VC对话框的菜单设置变灰, 打勾 等

 

一般可以用UPDATE_COMMAND_UI消息,并加入以下代码:
pCmdUI->Enable(FALSE);

就实现,弹对话框的菜单需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI。

 

原因

https://support.microsoft.com/zh-cn/help/242577/you-cannot-change-the-state-of-a-menu-item-from-its-command-user-interface-handler-if-the-menu-is-attached-to-a-dialog-box-in-visual-c

 

要点1。

http://bbs.csdn.net/topics/20077326

为要设置变灰的菜单添加UPDATE_COMMAND_UI消息,并加入以下代码:
pCmdUI->Enable(FALSE);当前菜单不可用
pCmdUI->Enable(TURE);当前菜单不可用
参数可用变量,这样就可以随时设置菜单某项禁用。

 

 

要点2:

http://blog.csdn.net/visualeleven/article/details/5513648:

对于模态非模态对话框默认是不响应菜单的UPDATE_COMMAND_UI消息的,需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI。

 

对于模态非模态对话框默认是不响应菜单的UPDATE_COMMAND_UI消息的,需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI。

 

[cpp] view plain copy
void CXXXDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)  
{  
 CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);  
  
// TODO: Add your message handler code here  
  
 if(!bSysMenu && pPopupMenu)  
 {  
  CCmdUI cmdUI;  
  cmdUI.m_pOther = NULL;  
  cmdUI.m_pMenu = pPopupMenu;  
  cmdUI.m_pSubMenu = NULL;  
  
  UINT count = pPopupMenu->GetMenuItemCount();  
  cmdUI.m_nIndexMax = count;  
  for(UINT i=0; i<count; i++)  
  {  
   UINT nID = pPopupMenu->GetMenuItemID(i);  
   if(-1 == nID || 0 == nID)  
   {  
    continue;  
   }  
   cmdUI.m_nID = nID;  
   cmdUI.m_nIndex = i;  
   cmdUI.DoUpdate(this, FALSE);  
  }  
 }   
}   

  

posted on 2017-04-11 22:06  okgogo2000  阅读(381)  评论(0编辑  收藏  举报