ON_NOTIFY не работает в моем диалоге, когда ON_NOTIFY_REFLECT определен элементом управления

0

В моем классе CTreeCtrl я действую на TVN_ITEMEXPANDED:

ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, &OnTVNItemExpanded)

В диалоговом окне родительского контроля я также хочу действовать с тем же уведомлением, TVN_ITEMEXPANDED,

ON_NOTIFY(TVN_ITEMEXPANDED, IDC_ELEMENT_TREE, &OnTVNItemExpanded)

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

НО, если я прокомментирую ON_NOTIFY_REFLECT из моего BEGIN_MESSAGE_MAP, полученного из BEGIN_MESSAGE_MAP, тогда мой метод диалога BEGIN_MESSAGE_MAP !?!

Почему уведомление не может попасть в мой контроль и в мой диалог?!?

Теги:
mfc

1 ответ

2
Лучший ответ

ON_NOTIFY_REFLECT переопределяет ON_NOTIFY, но вместо этого вы можете использовать ON_NOTIFY_REFLECT_EX который позволяет вашему ON_NOTIFY_REFLECT_EX вызову решить, должно ли сообщение проходить через родителя или нет.

См. " Отражение сообщений" для Windows Controls для получения более подробного объяснения:

Если в родительском оконном классе вы предоставляете обработчик для определенного сообщения WM_NOTIFY или диапазона сообщений WM_NOTIFY, ваш обработчик будет вызываться только в том случае, если дочерний элемент управления, отправляющий эти сообщения, не имеет обработчика отраженного сообщения через ON_NOTIFY_REFLECT(). Если вы используете ON_NOTIFY_REFLECT_EX() в своей карте сообщений, ваш обработчик сообщений может или не разрешить родительскому окну обрабатывать сообщение. Если обработчик возвращает FALSE, сообщение также будет обрабатываться родителем, а вызов, возвращающий TRUE, не позволяет родителю обрабатывать его. Обратите внимание, что отраженное сообщение обрабатывается перед уведомлением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню