递归方式操作菜单,使弹出式菜单可以反映子菜单的选中状态

BOOL _CheckMenuItem(HMENU hMenu, UINT nID, BOOL bCheck) { BOOL bFound = FALSE; if(hMenu) { for(int nPos=0; nPos<GetMenuItemCount(hMenu); nPos++) { MENUITEMINFO mii = {sizeof(mii), MIIM_ID | MIIM_SUBMENU, 0}; if(GetMenuItemInfo(hMenu, nPos, TRUE, &mii)) { if(mii.hSubMenu)//弹出式菜单 { if(_CheckMenuItem(mii.hSubMenu, nID, bCheck)) { CheckMenuItem(hMenu, nPos, MF_BYPOSITION | (bCheck? MF_CHECKED:MF_UNCHECKED)); bFound = TRUE; } } if(mii.wID == nID) //ID匹配项 { CheckMenuItem(hMenu, nID, MF_BYCOMMAND | (bCheck? MF_CHECKED:MF_UNCHECKED)); bFound = TRUE; } } } } return bFound; }

 

//应用示例 CMenu m_Menu; m_Menu.LoadMenu(IDR_XXXX); CMenu *pMenu = m_Menu.GetSubMenu(0); _CheckMenuItem(pMenu->m_hMenu, IDM_YYYY, TRUE); pMenu->TrackPopupMenu(0, point.x, point.y, this);

效果图

递归方式操作菜单,使弹出式菜单可以反映子菜单的选中状态_第1张图片

你可能感兴趣的:(递归方式操作菜单,使弹出式菜单可以反映子菜单的选中状态)