正文

菜单的事件响应和状态响应2009-03-29 20:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/41855.html

分享到:

ON_COMMAND是点了按钮或菜单项后的响应消息,
ON_UPDATE_COMMAND_UI
是用来表示对应的按钮和菜单项的状态的响应消息.
比如WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行",那么在编写记事本这个程序时,

对文本进行自动换行或不自动换行的操作就要放在ON_COMMAND消息响应函数里,"自动换行"菜单项左边是否打勾的操作则放在ON_UPDATE_COMMAND_UI响应函数里.

下面新建一个单文档MFC工程,然后添加菜单demo|ShowSelect,其IDID_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

阅读(3704) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册