ON_COMMAND是点了按钮或菜单项后的响应消息,
ON_UPDATE_COMMAND_UI是用来表示对应的按钮和菜单项的状态的响应消息.
比如WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行",那么在编写记事本这个程序时,
对文本进行自动换行或不自动换行的操作就要放在ON_COMMAND消息响应函数里,而"自动换行"菜单项左边是否打勾的操作则放在ON_UPDATE_COMMAND_UI响应函数里.
下面新建一个单文档MFC工程,然后添加菜单demo|ShowSelect,其ID为ID_DEMO_SHOW。
右击“ShowSelect”进入ClassWizard,我们可以看到该菜单有两个待选消息响应:
1. COMMAND,对应ON_COMMAND消息
2. UPDATE_COMMAND_UI,对应ON_UPDATE_COMMAND_UI消息
选择Messages:COMMAND,然后“Add Function”,ON_COMMAND(ID_DEMO_SHOW, OnDemoShow)
选择Messages: UPDATE_COMMAND_UI,然后“Add Function”, ON_UPDATE_COMMAND_UI(ID_DEMO_SHOW, OnUpdateDemoShow)
现在添加简单的菜单事件响应:点击demo|ShowSelect菜单后,弹出对话框,提示“您刚才点击勾选了"demo|ShowSelect"菜单!”,同时使菜单条前打勾;再次点击此菜单后,提示“您刚才点击退选了\"demo|ShowSelect\"菜单!”,并且菜单条前的勾将消失。
为了记录菜单的点击情况,需要为MainFrm添加BOOL bCheck辅助变量,并初始化bCheck=FALSE;。
//一次勾选,二次退选
void CMainFrame::OnDemoShow()
{
// TODO: Add your command handler code here
if(!bCheck)
{
bCheck=TRUE;
AfxMessageBox("您刚才点击勾选了\"demo|ShowSelect\"菜单!");
}
else
{
bCheck=FALSE;
AfxMessageBox("您刚才点击退选了\"demo|ShowSelect\"菜单!");
}
}
void CMainFrame::OnUpdateDemoShow(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(bCheck); // 勾选
// 还原bCheck值
if(bCheck)
bCheck=FALSE;
else
bCheck=TRUE;
}
此外,我们还可以调用CCmdUI类的Enable()方法允许或禁止(变灰)该选项;调用SetRadio()设置菜单选中有黑点;调用SetText()设置项的文本。
参考:http://hi.baidu.com/tuke0001/blog/item/f1b8130e95e430cf7bcbe1dc.html
评论