VC對話框菜單項Menu選中,顯示打勾(單選和多選)

1.單選實現

CMenu* menu = GetMenu()->GetSubMenu(1); //獲得菜單項的第二項,其中菜單從左到右是從0開始排列

菜單1-->對應 0 
選項切換-->對應 1 
menu->CheckMenuRadioItem(ID_menuSkin1, ID_menuSkin6, ID_menuSkin3, MF_BYCOMMAND);  //設置單選狀態,函數具體詳解如下

CMenu::CheckMenuRadioItem,該函數校覈一個指定的菜單項並使其成爲一個圓按鈕項。同時不校覈相關組裏的其他菜單項並清除這些項的圓按鈕的類型標誌。

BOOL CheckMenuRadioItem(UINT idFirst,UINT idLast,UINT idCheck,UINT uFlags);

返回值:如果成功,則返回非零值,否則爲0。

參數:

nIDFirst 指定(作爲一個ID號或位移量,依賴於nFlags的值)單選鈕組中的第一個菜單項的值。
nIDLast 指定(作爲一個ID號或位移量,依賴於nFlags的值)單選鈕組中的最後一個菜單項的值。
nIDItem 指定(作爲一個ID號或位移量,依賴於nFlags的值)單選鈕組中的被選中的菜單項的值。
nFlags 以下列方式指定nIDFirst, nIDLast或nIDItem的解釋:

  • MF_BYCOMMAND  指定參數給出已存在菜單項的命令ID號。若沒有設置MF_BYCOMMAND或MF_BYPOSITION,那麼該值爲缺省值
  • MF_BYPOSITION   指定參數給出已存在菜單項的位置。第一項在位置0

說明:
檢測一個指定的菜單項,並將其選中。同時,該函數不檢測關聯組中其它的菜單項,並清除這些項的單選項類型標誌。使用單選鈕位圖而非檢測標記位圖,將顯示被檢測的項。

 

注意:引用的是菜單條目的位置(第一個位置0):設爲MF_BYPOSITION;引用的是菜單ID,則設爲MF_BYCOMMAND。

這個組別既可按位置定義,也可按菜單ID定義。複選的項目會顯示一個圓形的樣式複選符號(●),而不是一個標準的複選符號(√)

如果想實現點擊改變選擇項,還需要在菜單子項的點擊事件中,重寫選中項,如下:

void CXXDlg::Onmenuskin1()
{
    GetMenu()->GetSubMenu(1)->CheckMenuRadioItem(ID_menuSkin1, ID_menuSkin6, ID_menuSkin2, MF_BYCOMMAND); //改爲ID_menuSkin2爲選中項
}

2.複選框實現:

這個比較簡單

CMenu* menu = GetMenu()->GetSubMenu(1);
menu->CheckMenuItem(ID_menuSkin3, MF_BYCOMMAND | MF_CHECKED);//通過命令ID,選中menuSkin3

CMenu::CheckMenuItem ,在彈出式子菜單中的菜單對象中添加或刪除複選標記.

UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck );

返回值:
返回菜單項以前的狀態:MF_CHECKED或MF_UNCHECKED。如果該菜單項不存在,那麼將返回0xFFFFFFFF。

參數:
nIDCheckItem 指定由nCheck確定的將要檢測的菜單項。
nCheck 指定如何檢測菜單項,並如何決定菜單中菜單的位置。參數nCheck可以是MF_CHECKED或MF_UNCHECKED與 MF_BYPOSITION或MF_BYCOM MAND的組合。這些標誌可通過使用位與操作進行組合。它們有下列含義:

  • MF_BYCOMMAND 指定參數給出已存在菜單項的命令ID號。它爲缺省值。
  • MF_BYPOSITION 指定參數給出已存在菜單項的位置。第一項位於的位置是0。
  • MF_CHECKED 與MF_UNCHECKED一起用作開關,在菜單項之前放置缺省的檢測標記。
  • MF_UNCHECKED 與MF_CHECKED用作開關,刪除菜單項之前的檢測標記。

說明:
在彈出菜單中爲菜單項增添或刪除檢測標記。參數nIDCheckItem指定了將要修改的菜單項。
參數nIDCheckItem既可以標識彈出菜單項,也可以標識菜單項。在檢測彈出菜單項的時候不需特別的步驟。不能檢測頂層菜單。彈出菜單必須通過位置來檢測,其原因在於它沒有與之相關聯的菜單項標識符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章