⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06.4.2 插入菜单项目.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 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 + -