Где групповые перехватить сообщения потока WINAPI / MFC - PullRequest
0 голосов
/ 17 ноября 2010

Кто-нибудь знает, где лучше всего пересылать сообщения потоков дочерним элементам управления?

По сути, приложение должно перехватывать сообщения зарегистрированных потоков в диапазоне msg_frst ... msg_last и пересылать их в активный кадр / представление.

В MFC есть 3 точки перегрузки, или кажется так: DefWndProc OnWndMessage PreTranslateMessage

Какой правильный вариант для переопределения?

1 Ответ

1 голос
/ 17 ноября 2010

Сообщение, отправленное с помощью PostThreadMessage (), имеет дескриптор окна NULL.Так что забудьте о любом из методов окна, DispatchMessage () не собирается их доставлять.Все, что у вас есть, это CWinThread :: PreTranslateMessage ().

Но здесь есть большая опасность, она больше не будет вызываться, когда какой-либо код в этом потоке начнет прокачивать свой собственный цикл сообщений.Ваши сообщения теперь попадают в разрядное ведро, потому что другой код теперь вызывает Peek / GetMessage ().Это гораздо более вероятно, чем вы думаете, MessageBox () достаточно.Или модальный цикл COM.Etcetera.

Вы можете безопасно использовать только PostThreadMessage () для отправки сообщений в поток, который не создает какие-либо собственные окна.Обходной путь достаточно прост, предоставьте потоку дескриптор окна, чтобы он мог вызывать PostMessage ().Это может быть скрытое окно, предназначенное, например, для обработки этих сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...