mfc 中一般通过处理UPDATE_COMMAND_UI消息来设置菜单的外观。但是如果将菜单通过弹出的方式(右键弹出、系统托盘上弹出等)显示的时候,将不会发出UPDATE_COMMAND_UI消息,解决办法就是,处理WM_INITMENUPOPUP消息,在处理过程中手动发出UPDATE_COMMAND_UI
void CmonitorDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
// TODO: 在此处添加消息处理程序代码
CCmdUI state;
state.m_pMenu = pPopupMenu;
state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; state.m_nIndex++)
{
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
state.DoUpdate(this, FALSE);
}
}
得到弹出菜单指针,然后遍历每一个菜单项强制更新。