2012-02-17 2 views
0

Я новичок в WTL.WTL: для обработки определенных команд в некоторых обработчиках команд

Одним из классов проекта, над которым я работаю, является класс WTL GUI. Его сообщение Карта содержит запись:

COMMAND_CODE_HANDLER(0, OnMenuClick) 

OnMenuClick обрабатывает все WM_COMMAND «s отправляемых после меню щелчка мыши. Есть ли способ установить другие обработчики команд для некоторых определенных сообщений, а OnMenuClick обрабатывает все остальные?

Я попытался это:

COMMAND_ID_HANDLER(ID_START_TASK, OnStartTask); 
COMMAND_CODE_HANDLER(0, OnMenuClick) 

Он работает, OnStartTask процессы ID_START_TASK команд, но это зависит от того, декларации. Если я изменяю порядок объявления строк, OnMenuClick обрабатывает команды ID_START_TASK.

Я использую VS 2008 + WTL 8,0

ответ

2

От COMMAND_HANDLER:

Картографические наборы сообщений bHandled ИСТИНА, прежде CommandHandler называется. Если CommandHandler не полностью обрабатывает сообщение, он должен установить bHandled на FALSE, чтобы указать, что сообщение нуждается в дальнейшей обработке.

WTL вызывает обработчики, если ни один из них не сигнализировал о том, что они обработали сообщение. Если обработчик явно не устанавливает bHandled в FALSE, WTL не передает сообщение следующему обработчику.

+0

Насколько я знаю, '' bHandled'' установлен в '' true'' по умолчанию. Итак, единственное, что мне нужно сделать, это установить его в '' false'' в '' OnMenuClick'' в случае команды '' ID_START_TASK'', верно? – fogbit

+0

Да. Вероятно, это хорошая идея, чтобы привычка не устанавливать его в FALSE и устанавливать только значение TRUE, если вам нужно убедиться, что никакой другой обработчик не обработает его. – pezcode

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