Windows WTL:在某些命令处理程序中处理某些命令
我是WTL的新手 我正在处理的项目的一个类是WTLGUI类。其消息映射包含一条记录:Windows WTL:在某些命令处理程序中处理某些命令,windows,visual-c++,wtl,Windows,Visual C++,Wtl,我是WTL的新手 我正在处理的项目的一个类是WTLGUI类。其消息映射包含一条记录: COMMAND_CODE_HANDLER(0, OnMenuClick) OnMenuClick处理菜单单击后发送的所有WM\u命令。当OnMenuClick处理所有其他消息时,是否有办法为某些特定消息设置另一个命令处理程序 我试过这个: COMMAND_ID_HANDLER(ID_START_TASK, OnStartTask); COMMAND_CODE_HANDLER(0, OnMenuClick)
COMMAND_CODE_HANDLER(0, OnMenuClick)
OnMenuClick
处理菜单单击后发送的所有WM\u命令。当OnMenuClick
处理所有其他消息时,是否有办法为某些特定消息设置另一个命令处理程序
我试过这个:
COMMAND_ID_HANDLER(ID_START_TASK, OnStartTask);
COMMAND_CODE_HANDLER(0, OnMenuClick)
它可以工作,OnStartTask
处理ID\u START\u TASK
命令,但它取决于声明顺序。如果我更改字符串声明顺序,OnMenuClick
processsID\u START\u TASK
命令
我使用VS 2008+WTL 8.0,来自:
在调用CommandHandler之前,消息映射将bHandled设置为TRUE。
如果CommandHandler不能完全处理消息,则应设置
bHandled为FALSE,表示消息需要进一步处理
只要没有处理程序发出处理消息的信号,WTL就会调用处理程序。
如果处理程序没有显式地将bHandled设置为FALSE,WTL将不会将消息传递给下一个处理程序。据我所知,bHandled
默认设置为true
。因此,我唯一需要做的就是在OnMenuClick
中的false
中设置它。在ID\u START\u TASK
命令的情况下,我是对的吗?是的。如果您必须确保没有其他处理程序处理它,那么最好养成将其设置为FALSE并将其设置为TRUE的习惯。