系统菜单栏

本文介绍如何使用MFC编程来管理应用程序主菜单的状态,包括如何查找菜单、子菜单,以及如何通过不同函数如CheckMenuItem(), SetDefaultItem(), SetMenuItemBitmaps(), EnableMenuItem()等来控制菜单项的选择状态、默认项、图标和可用性。文章还详细说明了如何禁用自动菜单项管理,以及如何通过消息响应机制更新菜单项的状态。

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

首先,可以在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语句)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值