?? 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 + -