首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 選單列項目添加核取記號(勾選標記)

     編輯:程式設計疑難解答

需求

在 MFC 對話框程式的選單列中,為特定選單項目顯示核取方塊風格的勾選標記(如記事本的「狀態列」項目),而非修改文字。

一行代碼解決

// 取得主選單 → 第 0 個彈出選單 → 第 0 個項目(按位置)設為勾選
GetMenu()->GetSubMenu(0)->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);

參數說明

參數含義
GetSubMenu(0)第一個頂層選單(通常為「檔案」或自訂第一個)
CheckMenuItem(0, ...)該彈出選單中第 0 個項目(第一個)
MF_BYPOSITION以位置索引而非命令 ID 識別項目
MF_CHECKED設為勾選狀態;對應 MF_UNCHECKED 取消

動態切換範例

void CMyDialog::OnToggleStatusBar()
{
    CMenu* pMenu = GetMenu()->GetSubMenu(2); // 假設「檢視」是第 3 個頂層選單
    UINT state = pMenu->GetMenuState(ID_VIEW_STATUSBAR, MF_BYCOMMAND);
    bool checked = (state & MF_CHECKED) != 0;
    pMenu->CheckMenuItem(ID_VIEW_STATUSBAR, MF_BYCOMMAND | (checked ? MF_UNCHECKED : MF_CHECKED));
    // 同步顯示/隱藏狀態列邏輯...
}

注意事項

  • 選單項目需在資源編輯器中定義 ID(如 ID_VIEW_STATUSBAR),方便用 MF_BYCOMMAND 精確控制。
  • MF_BYPOSITION 適合固定結構的初始化;MF_BYCOMMAND 適合命令處理函式中動態切換。
  • 若選單結構動態變動,優先使用命令 ID 定位。

掌握 CheckMenuItem 即可輕鬆實現選單項目勾選狀態切換。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved