在MFC编程中,一个种资源总有一种类与其对应。如
1.字符串有CString
2.菜单资源有CMenu
3.按钮资源有CButton
等等
类中就封装了有能对此类资源操作的函数。
正题
一、菜单的基本结构
(图一)
(图二)
这就是MFC中的菜单的样子。图中用系统的Paint,标记上了一些序号。这些序号就显得十分重要了。
(图一)中标号的就是菜单(Menu)。(图二)中标号的就是子菜单(SubMenu)。
Remarks
子菜单中有分割线。这个分割线也是算一个位置的哦!这是重点要记住的。
二、菜单操作中的常用函数
1.GetMenu()获取整个菜单的CMenu *
这个函数是CWnd的成员函数。能获取类所对应的窗口所拥有的CMenu资源对应对象的指针。
2.GetSubMenu()是CMenu的成员函数
这个函数是用于获取一个菜单的子菜单。也就是(图二中标号的对应的资源的类的指针)
3.CheckMenuItem(1,2)设置标记(这个标记就是那个√)
1:是索引方式。一种是序号索引,一个是ID号索引。
2:是决定索引方式的参数。
两种方式对应的宏是:MF_BYPOSITION和MF_BYCOMMAND。
4.EnableMenuItem()设置子菜单项目的可用性。如果要设置文件或新建...,就必须在框架窗口的构造函数里面把m_bAutoMenuEnable变量设置为FALSE。因为如果没设置默认值是TRUE。这就说明文件和新建这些是由MFC内部自动处理的。你无法更改可用性。
5.如果工具栏的图标的ID号和菜单的ID号一样,那么这两个将会同步。
当然这个也是MFC内部自动处理的结果。
6.在使用UPDATE_COMMAND_UI消息对菜单进行操作时,要注意使用ID号来操作。因为如果使用序号,可能会出问题,因为菜单里面序号的和工具栏的序号不同
if(pCmdUI->m_nIndex == 2)
pCmdUI->Enable();
这种情况下可能Toolbar中的图标可能并不能同步修改。因为Toolbar和Menu中的对应顺序可能有区别。
但是如果是用ID
if(pCmdUI->m_nID == ID_EDIT_CUT)
pCmdUI->Enable();
用ID号的话,就不会出现这样的问题了。
7.InsertMenu() 和 AppendMenu()前者是在中间插入,后者是在后面添加。
这个函数根据参数的不同可以插入菜单项或者是子菜单项。