По поводу подписки-отписки.
Здесь есть два подхода:
1. подписываться при запуске и отписываться при закрытии.

Для начала, потребуется некий ресурс операционной системы, к которому должно иметь доступ окно (или программа) на этапе инициализации. С использованием этого ресурса будет осуществлена подписка на сообщения. Этот ресурс будет зависимостью, целесообразность которой спорно.

Далее, предположим, что со стороны этого ресурса будут решены проблемы безопасности: взаимное влияния колбэков друг на друга, регистрация непомерного количества колбэков для одного окна (или приложения). Допустим, пришло событие и был запущен колбэк. Как принять из него результат? К тому же, окон может быть запущено большое количество, и для каждого из них будет много колбэков. Поиск колбэка для обработки событий будет по-больше, чем сейчас в винде.

И наконец, как отписываться? В случае штатного закрытия окна всё относительно просто: на событие закрытия окна создаём колбэк и там всё отписываем. А если закрытие было нештатным, то непонятно, что делать.

2. не осуществлять явную подписку на события. Тогда операционная система будет считать, что окно подписано на все события. А решение по его обработке будет оставлено на усмотрения единственного колбэка.