这里主要是对主菜单状态的编程。
首先,可以在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语句)。