2009-07-30 3 views
0

Я успешно зарегистрирован класс окна с помощью 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 верно, то оконная процедура не вызывается. Я пытаюсь понять, почему это должно быть. Процедура окна - это одна из MSDN example. Я хотел бы добавить еще один случай, как только подтвержу, что сообщения прошли.

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

ответ

1

Условий нет.

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

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

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

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

+0

Я обновил вопрос в ответ на некоторые из ваших проблем. – Simon

+0

Возможно, здесь важна WndProc. Я думаю, что цикл сообщений также, если только для полноты. –

+0

Я добавил ссылку на код wndproc, который я использовал. Нужно ли писать цикл сообщений? Я уже получил четыре сообщения, которые я описал, поэтому я предположил, что существует цикл сообщений. – Simon

Смежные вопросы