问题描述
我想在某些事件中启用/禁用菜单项,什么是独立于 UPDATE_COMMAND_UI 处理程序的,所以,我没有 CCmdUI 对象,所以,我想发送一条消息,什么调用处理程序。我试过这个:
SendMessage(WM_COMMAND,CN_UPDATE_COMMAND_UI,ID_VIEW_SyntaxHIGHLIGHT);
这样好吗?如果没有,正确的方法是什么?谢谢。
解决方法
不,这不正确。您需要转到类视图,然后转到事件选项卡并添加一个 ON_UPDATE_COMMAND_UI
处理程序。
在实现中,您可以调用 pCmdUI->Enable()
和/或 pCmdUI->SetCheck()
或 pCmdUI->SetRadio()
,具体取决于您希望 UI 项具有的功能。这种机制的伟大之处在于,您不需要在每次可能影响 UI 项的启用/检查/无线电状态的操作之后调用某种说 UpdateUIItems()
函数,而是框架调用处理程序,而您的应用程序正在进入空闲状态。当然,评估上述条件的代码必须尽可能快。不要在那里执行冗长的操作。尝试在这样的处理程序(例如 Beep(1000,25)
)中播放一个简短的声音以查看它们被调用的频率。必须在 ON_COMMAND
处理程序中创建、读取或修改数据。在 ON_UPDATE_COMMAND_UI
处理程序中,您只需将 UI 项的状态告诉框架即可。
检查UI Update Mechanism。另外,我以前的帖子here 和here。