在 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_VIEW_STATUSBAR),方便用 MF_BYCOMMAND 精確控制。MF_BYPOSITION 適合固定結構的初始化;MF_BYCOMMAND 適合命令處理函式中動態切換。掌握 CheckMenuItem 即可輕鬆實現選單項目勾選狀態切換。