Страница 1 из 1

Поймать RegisteredMessage в MFC

Добавлено: 30 апр 2009, 16:04
Ranmych
Есть поток, который в некий момент
выдает
::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?

Заранее спасибо.

Re: Поймать RegisteredMessage в MFC

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

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

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

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

virtual LRESULT WindowProc(
   UINT message,
   WPARAM wParam,
   LPARAM lParam 
);

Re: Поймать RegisteredMessage в MFC

Добавлено: 05 май 2009, 10:40
Romeo
Посмотри внимательно на View в Spy++. Скорее всего там несколько окон друг на друге (как минимум два: MDI Child и сверху окно вьюшки). Вполне возможно, что ты посылаешь сообщение не тому окну.

Re: Поймать RegisteredMessage в MFC

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