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