📄 06.4.2 插入菜单项目.txt
字号:
6.4.2 插入菜单项目
除了在己有菜单项目后面添加新的菜单项目以外,也可以在己有菜单项目之间插入一个新的菜单项目,这包括在两个子菜单之间插入一个子菜单,以及在两个菜单项之间插入一个新的菜单项。这可以利用 CMenu类的 InsertMenu成员函数来实现。这个函数的一种声明具有以下形式:
BOOL InsertMenu(UINT nPosition, UINT nFlags,UINT_PTR nIDNewltern = 0 , LPCTSTR lpszNewItern = NULL );
InsertMenu函数有四个参数,其中参数 nFlags、nIDNewItem和 lpszNewltem与 AppendMenu函数中相应参数具有相同的意义。但第二个参数旧ags除了具有 AppendMenu函数中介绍的那些标志以外,还可以利用或运算与 MF BYCOMMAND或 MF BYPOSITION标志相组合。而第一个参数 nPosition指定的是新菜单项目插入的位置,它的取值取决于第二个参数nFlags.当 nFlags参数指定的是MFBYCOMMAND标志时,第一个参数指定的是一个菜单命令标识,表示新菜单项将在这个标识所表示的菜单项之前插入:如果nFlags参数指定的是MF_BYPOSITION标志,那么,新菜单项目将在第一个参数指定的位置所表示的菜单项目之前插入,也就是说,第一个参数这时所表示的就是这个新菜单项目插入后所在的位置。
因为Menu2程序中,【编辑】子菜单的位置索引是1,所以如果要在Menu2程序的【编辑】和【查看】这两个子菜单之间插入一个名为Test的菜单项目,插入位置应该是2。读者应该把上述例6-25所示程序中调用AppendMenu函数的那行代码注释起来,井在其后添加上面InsertMenu函数调用,结果如例6-26所示。
例6-26
int CMainFrarne: :Oncreate(LPCREATESTRUCT lpcreateStruct)
'
CMenu rnenu;
rnenu.CreateMenu() ;
/ /GetMenu()->AppendMenu(MF_POPUP , (U工NT) rnenu . rn_hMenu , "Test " ) ;
GetMenu ( ) ->InsertMenu(2,MF_POPUP MF_BYPOSITION, (UINT) menu . m_hMenu , "Test" ) ; rnenu.Detach() ;
return 0 ;
Build并运行Menu2程序,发现在【编辑】和【查看】这两个子菜单之间多了一个名为Test的子菜单。 Menu2程序运行界面如图6.39所示。
图 6.39动态插入Test子菜单后的程序界面
如果要在新插入的子菜单中添加菜单项的话,同样可以使用AppendMenu函数来实现,我们可以在上述例6-26所示代码中新添加的InsertMenu函数之后添加如例6-27所示代码中加灰显示的那几行代码。
例6-27
int CMainFrame : :OnCreate(LPCREATESTRUCT 1pCreateStruct)
{
CMenu menu ;
menu . CreateMenu() ;
//GetMenu()->AppendMenu(MF_POPUP , (UINT)menu .m_hMenu , "Test ") ;
GetMenu () ->InsertMenu(2,MF_POPUP MF_BYPOSITION , (UINT)menu . m_hMenu , "Test") ;
食 menu.AppendMenu(MF_STRING, 111 , "Hello") ;
menu.AppendMenu(MF_STRING, 112 , "Bye");
menu.AppendMenu(MF_STR工NG, 113, "Mybo1e");
menu.Detach () ;
return 0;
注:因为这里仅仅是一个示例,所以笔者给这些新添加的菜单项随便赋予了一个B号.并不是说它们必须是 111、 112
或 1\3。
Build井运行Menu2程序,单击【Test】子菜单,将发现它的下面多了三个菜单项 (如图 6.40所示).就是上述代码创建的三个菜单项。
如果要在Menu2程序的【文件】子菜单下添加一个菜单项,可以在上述例6-27所示 I CMainFrame类的OnCreate函数中添加下面这行代码来实现:
GetMenu()->GetSubMenu(D)->AppendMenu(MF_STR工NG,工14, "Welcome" ) ;
Build并运行 Menu2程序,单击【文件】子菜单,发现它的下面多了一个菜单项: We1come。如图6.41所示。
如果要在Menu2程序的【文件】子菜单的【新建】和【打开】菜单项之间插入一个新菜单项,可以在CMainFrame类的OnCreate函数中添加下面这行代码来实现:
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE/OPEN, MF_BYCOMMAND | MF_STRING , 115 , "VC编程.) ;
Build井运行Menu2程序,单击【文件】子菜单,发现在【新建】和【打开】菜单项之间多了一个菜单项: VC编程(如图 6.42所示〉。
图 6 .42为文件子菜单动态插入新菜单项后的结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -