系统菜单栏

这里主要是对主菜单状态的编程。

首先,可以在MainFrame的OnCreate函数中。

1、要实现这种编程,首先要找到菜单,CWnd类有GetMenu()这个函数。

2、菜单下可能还有子菜单,CMenu类有GetSubMenu()这个函数。

3、得到菜单后,就可以操作了,CheckMenuItem(),SetDefaultItem(),SetMenuItemBitmaps(),EnableMenuItem()。

*值得注意的是SetMenuItemBitmaps()这个函数需要一个CBitmap*,这个指针的对象跟一个位图资料关联。在关联状态下,如果对象销毁,位图显示不出来。所以,要么CBitmap声明为全局对象,要么取消关联,用Detach()。

*MFC程序会自动管理菜单项的可使用状态,所以在使用EnableMenuItem之前,要先禁用系统的自动管理,m_bAutoMenuEnable这个变量设置为FALSE(可以在构造函数中处理)。VS2008中,MF_DISABLED这个函数同时使其变灰。

 

移除和装载菜单,用CWnd类的SetMenu函数。参数为NULL或CMenu*。这里也要用到Detach。

 

也可以在主框架创建完成后,利用菜单命令更新机制。

菜单项状态的维护依赖于CN_UPDATE_COMMAND_UI消息,可以对这个消息进行捕获并响应。

这是属于事件的,所以在VS2008中事件中为它添加一个消息响应。

*这个方法不仅针对菜单项,相同ID的工具栏项也受到相同影响。

CCmdUI类有m_nIndex和m_nID两个成员函数可以分辨这个消息是从菜单还是工具栏发来的(通过If语句)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值