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

Posted okgogo2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);  
  }  
 }   
}   

  

以上是关于VC对话框的菜单设置变灰, 打勾 等的主要内容,如果未能解决你的问题,请参考以下文章

如何让MFC对话框中的Menu菜单变灰或恢复

我在学vc++的使用时这个不懂:怎样将项目设置为Debug模式?

mfc 菜单项变灰

VC对话框的菜单添加快捷键

VC对话框的菜单添加快捷键

C#在不同窗体中设置菜单menuStrip可用或不可用(或者使之变灰)