У меня есть приложение с графическим интерфейсом MFC, которое имеет несколько фреймов (что-то вроде поведения Outlook с главным окном и окнами сообщений / встреч, которые создаются в новых фреймах, или Skype, например, с синхронизацией нескольких кадров), и мне нужно, чтобы данные PostMessage были заблокированы. через иерархию окон.
Скажем, я получаю строку, _wcsdup it, PostMessage (WM_NEWSTRING, ...), и элемент управления где-то в глубине иерархии обрабатывает ее, или, если нет подписчиков, сообщение очищается.
Сейчас я изучаю то, что все сообщения отправляются в поток приложения, поток находит активный фрейм или наиболее подходящий фрейм, передает ему сообщение, фрейм передает сообщение в его представление, представление передает сообщение в подпредставление и т. Д. , если нет представления для обработки сообщения, оно освобождается.
Проблема в том, что эти команды связывания довольно утомительно писать, поскольку мне приходится дублировать код пересылки сообщений в каждом имеющемся у меня классе CWnd. В то же время очистка ресурса довольно неприятна, потому что, если нет окна для приема сообщения, кто-то должен позвонить на бесплатный. Поэтому простая отправка сообщения в главный насос сообщений без дополнительной обработки в надежде, что кто-то всегда его поймает, не является правильным подходом. PostMessage возвращает S_OK, никто не видит сообщение как обрабатываемое, и оно остается висящим.
Есть ли лучший и правильный подход к тому, что я ищу?