📄 06.3.1 基本菜单操作.txt
字号:
6.3 基本菜单操作.
6.3.1 标记菜单
运行刚才创建的 Menu程序后,可以看到程序的【查看】子菜单下的两个菜单项前面都带有一个对号( .j) (如图 6.11所示),我们称这种类型的菜单为标记菜单。
图 6.11查看菜单下的菜单项
下面,我们想要实现这样的功能:在【文件】子菜单中的【新建】菜单项上添加一个标记。因为程序的主菜单属于框架窗口,所以需要在框架类窗口创建完成之后再去访问菜单对象。可以在框架类( CMainFrame类)的 OnCreate函数的最后(但一定要在 retum语旬之前)添加实现这个功能的代码。
为了获得【文件】子菜单下的【新建】菜单项,首先要获得程序的菜单栏,也就是要在框架窗口中获得指向菜单栏的指针,这可以通过 CWnd的成员函数: GetMenu来实现,该函数具有如下形式的声明:
CMenu* GetMenu( ) const;
从其声明可以知道,该函数返回一个指向 CMenu类对象的指针。 CMenu类是一个 MFC类,是 Windows菜单句柄 HMENU的一个封装,提供了一些与菜单操作有关的成员函数,例如菜单的创建、更新和销毁等,还可以获取一个菜单的子菜单,这是通过 GetSubMenu这个成员函数实现的,这个函数的声明形式如下 :
CMenu* GetSubMenu( int nPos ) const;
可以看到,这个函数有一个参数 (nPos),该参数指定了子莱单的索引号。另外,这个函数也返回一个指向 CMenu对象的指针,但是,这个函数返回值所指向的对象与上面 CWnd类的 GetMenu函数返回值所指向的对象是不一样的,后者返回的是指向程序菜单栏对象的指针,而 CMenu类的 GetSubMenu成员函数返回的是由参数 nPos指定的子菜单的指针。
国际: GetMe叫数是 CW叫的成员函数,而 G山Menu函数是 CMenu
的成员函数。
找到了子菜单,相当于找到了楼层,下面就是要找房间了。另外,为了设置一个标记菜单,需要使用 CMenu类的 CheckMenultem这个函数,这个函数的功能就是为菜单项添加一个标记,或者移除菜单项的标记。该函数的声明形式如下所示:
UINT CheckMenultern( UINT nIDCheck工 tern, UINT nCheck );
该函数的第一个参数 nIDCheckItem指定需要处理的菜单项,它的取值由第二个参数决定。第二个参数 nCheck指定怎样设置菜单项,以及如何定位该菜单项的位置,它的取值可以是 MF CHECKED或 MF_UNCHECKED与 MF BYPOSITION或 MF_BYCOMMAND的组合,这些标志的含义分别如下所述:
. MF CHECKED
. MF UNCHECKED
设置菜单项的复选标记。
移走菜单项的复选标记。
·如1F
BYPOSITION 表明应该根据菜单项的位置来访问菜单项,即第一个参数指定的是菜单项的索引号。
·孔1F
BYC。如1MAND表明应该根据菜单项的命令来访问菜单项,即第一个参数指定的是菜单项的命令ID。另外,在Menu程序中,【文件】子菜单及其【新建】菜单项的索引号均为0。有了以
上这些知识,我们就可以实现为【文件】子菜单中的【新建】菜单项添加标记这一功能了,例 6-1所示代码中加灰显示的那行代码就是具体的实现代码,读者只需在CMainFrame类的 OnCreate函数的retum语句之前添加这条语句即可。
例6-1
int CMainFrame : : OnCreate(LPCREATESTRUCT lpCreateStruct)
{
GetMenu()->GetSubMenu(O)->CheckMenuItem(0, MF_BYPOSITION I MF_CHECKED);
return 0 ;
Build并运行Menu程序,打开【文件】子菜单,可以看到其下的【新建】菜单项左边已经添加了一个复选标记,如图 6.12所示。这时,如果希望取消这个标记,可以使用 MF_UNCHEC阻D标志来调用CheckMenultem函数。
图 6.12标记菜单功能的实现
当然,也可以通过菜单项标识来访问菜单项。首先,打开菜单编辑器,利用菜单项属性对话框,得到【新建】菜单项的标识:ID-FEE-NEW。然后,修改上述例6-1中加灰显示的那行代码,使用菜单项标识来实现设置【新建】菜单项标记的功能,修改后的代码如例6-2所示。
iJlJ 6-2
int CMainFrame : :OnCreate(LPCREATESTRUCT lpCreateStruct)
( GetMenu () ->GetSubMenu (0) ->checkMenuItem(ID_FILE_NEW, MF_BYCOMMAOD | MF_CHECKED) ; return 0 ;
读者可以再次运行Menu程序,可以发现程序实现了同样的效果,即为【文件】子菜单下的【新建】菜单项添加一个标记符号。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -