2015-04-29 6 views
0

Я заметил поведение и хочу подтвердить, что вокруг него нет простого способа. Предположим, у меня есть основной CFrameWnd, который содержит несколько CViews, часто вложенных в несколько уровней. Скажем, каждый из них переопределяет PreTranslateMessage(MSG* pMsg) (не стреляйте в меня, я унаследовал этот код: P). Возникает вопрос: будет ли ВСЕ CViews/CFrameWnd/etc получать уведомление по их PreTranslateMessage(MSG* pMsg), или это сообщение, потребляемое первым PreTranslateMessage(MSG* pMsg), которое его обрабатывает?В MFC, неактивные окна получают события PreTranslateMessage?

Похоже, что на основании того, что я заметил, срабатывает только один PreTranslateMessage(MSG* pMsg), но я хочу подтвердить.

ответ

0

Неактивные представления получат вызовы PreTranslateMessage, если сообщение, которое было отправлено в очередь сообщений Windows, предназначено для этого представления или для дочернего окна этого представления.

Если сообщение не соответствует вышеуказанному условию, то неактивные представления не будут обрабатывать сообщения PreTranslateMessages.

Существует PreTranslateMessage и есть маршрутизация OnCmdMsg меню, панелей инструментов, лент и т. Д. В этом случае неактивные представления не будут обрабатывать их по умолчанию, если окно кадра приложения не переопределено OnCmdMsg и решает выполнить итерацию всех детские взгляды.

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