Поймать RegisteredMessage в MFC

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Ranmych
Сообщения: 6
Зарегистрирован: 30 апр 2009, 15:50

Есть поток, который в некий момент
выдает
::PostMessage(pCD->hMainWnd, pCD->hWinMsg, 0, 0);

Возможно ли его поймать в проекте на MFC в классе View?

Пытался посылать сообщение с заранее определенным номером
типа:
::PostMessage(pCD->hMainWnd, WM_APP+100, 0, 0);

прописывая при этом в MESSAGE_MAP классе View
ON_MESSAGE(WM_APP+100, CPortthreadView::OnNewReadData)

С-Spy показывает что сообщение уходит. Но в View оно не ловится.

Как сделать так, чтобы это сообщение ловилось в проекте на MFC?

Заранее спасибо.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Как вариант - переопределить виртуальную функцию WindowProc. Свои сообщения обработать, а для остальных не забыть вызвать функцию предка.

Функция существует у класса CWnd (и его наследников).

Код: Выделить всё

CWnd::WindowProc
Provides a Windows procedure (WindowProc) for a CWnd object.

virtual LRESULT WindowProc(
   UINT message,
   WPARAM wParam,
   LPARAM lParam 
);
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Посмотри внимательно на View в Spy++. Скорее всего там несколько окон друг на друге (как минимум два: MDI Child и сверху окно вьюшки). Вполне возможно, что ты посылаешь сообщение не тому окну.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ranmych
Сообщения: 6
Зарегистрирован: 30 апр 2009, 15:50

Да. Класс View это только клиентская область, а сообщение посылалось всему окну. Теперь заработало.
Ко всему в MFC оказался макрос для мессадж мапса ON_REGISTERED_MESSAGE, где можно указывать не константу, а переменную. Так что перехват WindowProc или OnWndMsg тоже оказался лишним, хотя и с ним все работает.
Ответить