关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)

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

[cpp] view plain copy
 
  1. void CXXXDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)  
  2. {  
  3.  CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);  
  4.   
  5. // TODO: Add your message handler code here  
  6.   
  7.  if(!bSysMenu && pPopupMenu)  
  8.  {  
  9.   CCmdUI cmdUI;  
  10.   cmdUI.m_pOther = NULL;  
  11.   cmdUI.m_pMenu = pPopupMenu;  
  12.   cmdUI.m_pSubMenu = NULL;  
  13.   
  14.   UINT count = pPopupMenu->GetMenuItemCount();  
  15.   cmdUI.m_nIndexMax = count;  
  16.   for(UINT i=0; i<count; i++)  
  17.   {  
  18.    UINT nID = pPopupMenu->GetMenuItemID(i);  
  19.    if(-1 == nID || 0 == nID)  
  20.    {  
  21.     continue;  
  22.    }  
  23.    cmdUI.m_nID = nID;  
  24.    cmdUI.m_nIndex = i;  
  25.    cmdUI.DoUpdate(this, FALSE);  
  26.   }  
  27.  }   
  28. }   
 
http://blog.csdn.net/visualeleven/article/details/5513648
 
原文地址:https://www.cnblogs.com/findumars/p/6002464.html