MFC 遍歷選單項 獲取狀態 改變狀態
阿新 • • 發佈:2018-12-31
// 遍歷選單 void CTestDlg::OnBnClickedButton2() { CMenu* cMenuMain = GetMenu(); int cntMain = cMenuMain->GetMenuItemCount(); for(int i = 0; i < cntMain; i++) { CString menuName; CMenu *cMenuSub = cMenuMain->GetSubMenu(i); int cntSub = cMenuSub->GetMenuItemCount(); cMenuMain->GetMenuString(i, menuName, MF_BYPOSITION); MessageBox(menuName); for(int j = 0; j < cntSub; j++) { cMenuSub->GetMenuString(j, menuName, MF_BYPOSITION); MessageBox(menuName); } } } // 獲取狀態與改變狀態 void CTestDlg::OnBnClickedButton3() { CMenu* cMainMenu = GetMenu(); int cntMain = cMainMenu->GetMenuItemCount(); for(int i = 0; i < cntMain; i++) { CMenu* cSubMenu = cMainMenu->GetSubMenu(i); int cntSub = cSubMenu->GetMenuItemCount(); for(int j = 0; j < cntSub; j++) { int flag = cSubMenu->GetMenuState(j, MF_BYPOSITION); if(flag == MF_CHECKED) // 選擇與未選中切換 cSubMenu->CheckMenuItem(j, MF_BYPOSITION | MF_UNCHECKED); else if(flag == MF_UNCHECKED) cSubMenu->CheckMenuItem(j, MF_BYPOSITION | MF_CHECKED); else if(flag == MF_ENABLED) // enable與gray的切換 cSubMenu->EnableMenuItem(j, MF_BYPOSITION | MF_GRAYED); else if(flag == MF_GRAYED) cSubMenu->EnableMenuItem(j, MF_BYPOSITION | MF_ENABLED); } } }