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

Я успешно зарегистрировал класс окна, используя 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 ответ

Решение

Там нет условий.

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

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

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

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

Другие вопросы по тегам