Какие условия должны быть выполнены для публикации сообщения в окне? - PullRequest
0 голосов
/ 30 июля 2009

Я успешно зарегистрировал класс окна, используя RegisterClassEx, и создал окно, используя CreateWindowEx:

m_hInstance = ::GetModuleHandle(NULL);
...
m_hWnd = ::CreateWindowEx(0, "CMyClassName", "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);

Соответствующая оконная процедура принимает сообщения 36, 129, 131 и 1, и возвращаемое HWND не равно нулю. Однако, когда я позже позвоню PostMessage (из другого потока):

bool bPosted = ::PostMessage(m_hWnd, WM_APP + 3, 0, 0);

, хотя bPosted имеет значение true, оконная процедура не вызывается. Я пытаюсь понять, почему это должно быть. Оконная процедура - пример из MSDN - я намеревался добавить еще один случай, как только подтвердил, что сообщения проходили.

Какие условия должны быть выполнены для публикации оконного сообщения?

1 Ответ

1 голос
/ 30 июля 2009

Нет условий.

Существуют некоторые ограничения при использовании сообщений [0, WM_USER), но нет ограничений по WM_APP.

Вы проверяете код возврата PostMessage ?

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

Вы также должны предоставить цикл сообщений , если вы этого не делаете. Большинство фреймворков скрывают эту деталь (по крайней мере, в некоторой степени), но если вы имеете дело с win32 напрямую, вы должны предоставить свой собственный.

...