Сообщение, отправленное с помощью PostThreadMessage (), имеет дескриптор окна NULL.Так что забудьте о любом из методов окна, DispatchMessage () не собирается их доставлять.Все, что у вас есть, это CWinThread :: PreTranslateMessage ().
Но здесь есть большая опасность, она больше не будет вызываться, когда какой-либо код в этом потоке начнет прокачивать свой собственный цикл сообщений.Ваши сообщения теперь попадают в разрядное ведро, потому что другой код теперь вызывает Peek / GetMessage ().Это гораздо более вероятно, чем вы думаете, MessageBox () достаточно.Или модальный цикл COM.Etcetera.
Вы можете безопасно использовать только PostThreadMessage () для отправки сообщений в поток, который не создает какие-либо собственные окна.Обходной путь достаточно прост, предоставьте потоку дескриптор окна, чтобы он мог вызывать PostMessage ().Это может быть скрытое окно, предназначенное, например, для обработки этих сообщений.