菜單及CMenu類的使用


CMenu類的主要成員函數

BOOL LoadMenu(UINT nIDResource);

加載菜單資源,並將其附加到CMenu對象上。參數nIDResource指定了要加載的菜單資源的ID。如果菜單加載成功則返回TRUE,否則返回FALSE。

BOOL DeleteMenu(UINT nPosition,UINT nFlags);

在菜單中刪除一個菜單項。參數nPosition指定要刪除的菜單項。參數nFlags就用來解釋nPosition的意義,

為MF_BYCOMMAND時說明nPosition表示菜單項的ID,

為MF_BYPOSITION時說明nPosition表示菜單項的位置,

第一個菜單項的位置為0。如果刪除菜單項成功則返回TRUE,否則返回FALSE。

BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = 0);

用來在指定位置顯示一個浮動的彈出式菜單。參數nFlags指定屏幕坐標和鼠標位置的標志,可以是以下取值:

TPM_CENTERALIGN:菜單在水平方向上相對於參數x指定的坐標值居中顯示
TPM_LEFTALIGN:菜單的左側與參數x指定的坐標值對齊
TPM_RIGHTALIGN:菜單的右側與參數x指定的坐標值對齊
TPM_BOTTOMALIGN:菜單的底部與參數y指定的坐標值對齊
TPM_TOPALIGN:菜單項的頂部與參數y指定的坐標值對齊
TPM_VCENTERALIGN:菜單在垂直方向上相對於參數y指定的坐標值居中顯示

參數x指定彈出式菜單的水平方向的屏幕坐標,參數y指定菜單頂部垂直方向上的屏幕坐標,參數pWnd指明哪個窗口擁有此彈出式菜單,不能為NULL,參數lpRect忽略。

 

UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);

在彈出菜單中為菜單項增加選中標記或移除選中標記。參數nIDCheckItem指定要選中或取消選中的菜單項。參數nCheck指定菜單項的選中狀態和如何根據nIDCheckItem確定菜單項的位置,可以是MF_CHECKED或MF_UNCHECKED與MF_BYPOSITION或MF_BYCOMMAND的組合,這幾個標志的含義如下:

MF_BYCOMMAND:為默認值。說明參數nIDCheckItem表示菜單項的ID
MF_BYPOSITION:說明參數nIDCheckItem表示菜單項的位置,第一個菜單項的位置是0
MF_CHECKED:為菜單項添加選中標記
MF_UNCHECKED:為菜單項移除選中標記

 該函數返回菜單項之前的狀態:MF_CHECKED或MF_UNCHECKED, 如果菜單項不存在則返回0xFFFFFFFF。

 

 UINT EnableMenuItem(UINT nIDEnableItem,UINT nEnable);

       激活、禁用菜單項或使其變灰。參數nIDEnableItem指定要激活、禁用或變灰的菜單項。參數nEnable指定操作的類型,可以是MF_DISABLED、MF_ENABLED或MF_GRAYED與MF_BYCOMMAND或MF_BYPOSITION的組合,這些值的含義如下:

       MF_BYCOMMAND:同CheckMenuItem
       MF_BYPOSITION:同CheckMenuItem
       MF_DISABLED:禁用菜單項,使其不能被選擇但不變灰
       MF_ENABLED:激活菜單項,使其能夠被選擇並由變灰狀態恢復
       MF_GRAYED:禁用菜單項,使其不能被選擇並變灰

       該函數返回菜單項之前的狀態:MF_DISABLED、MF_ENABLED或MF_GRAYED

CMenu* GetSubMenu(int nPos) const;

       獲取彈出菜單的CMenu對象。參數nPos指定彈出菜單在菜單中的位置,不能使用ID。返回值是CMenu對象的指針,該CMenu對象的m_hMenu成員為由nPos指定的彈出菜單的句柄,如果不存在這樣的CMenu對象則返回NULL,然后創建一個臨時彈出菜單。

       CMenu類的成員函數先講這些,如果大家需要用其他的函數可以到MSDN中查看,解釋的很清楚。

菜單消息

       菜單主要能發送兩種消息:COMMAND消息和UPDATE_COMMAND_UI消息。下面分別講解:

       COMMAND消息:在菜單項被點擊時發送該消息。

       UPDATE_COMMAND_UI消息:用來維護菜單項的各項狀態,包括激活、禁用、變灰、選中、未選中等。在下拉菜單每次打開的時候,所有菜單項的此消息都會被發送出去。如果所屬類中為菜單項的該消息添加了處理函數,則執行相應函數更新菜單狀態,如果菜單項沒有此消息處理函數,也沒有COMMAND消息的處理函數,那么它就會變灰。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM