UPDATE_COMMAND_UI
处理菜单对应的用户界面
COMMAND
处理该菜单对应的功能
一 个菜单拉下来,使用者可以从命令项的状态(打勾或没打勾、灰色或正常)得到一些状态提示。如果Document 中没有任何资料的话,【Edit/Clear All】照道理就不应该起作用,因为根本没资料又如何"Clear All" 呢?! 这时候我们应该把这个命令项除能(disable)。又例如在粗笔状态下,程序的【Pen/Thick Line】命令项应该打一个勾(所谓的check mark),在细笔状态下不应该打勾。此外,菜单命令项的状态应该同步影响到对应之工具栏按钮状态。
所有UI 对象状态的维护可以依赖所谓的UPDATE_COMMAND_UI 消息。
传统SDK 程序中要改变菜单命令项状态, 可以调用EnableMenuItem 或是CheckMenuItem,但这使得程序杂乱无章,因为你没有一个固定的位置和固定的原则处理命令项状态。MFC 提供一种直觉并且仍旧依赖消息观念的方式,解决这个问题,这就是UPDATE_COMMAND_UI 消息。其设计理念是,每当菜单被拉下并尚未显示之前,其命令项(以及对应之工具栏按钮)都会收到UPDATE_COMMAND_UI 消息,这个消息和WM_COMMAND 有一样的绕行路线,我们(程序员)只要在适当的类别中放置其处理函数,并在函数中做某些判断,便可决定如何显示命令项。
(选摘自《深入浅出MFC》第9章)
例如,要使菜单变灰、或者在菜单项里面打勾则用UPDATE_COMMAND_UI,否则使用用COMMAND
例子:
void CMainFrame::OnUpdateSelectBlue(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(true);//把菜单选中
}