VC开发,菜单为什么会变灰

当点击有子菜单的菜单项时,系统发送WM_INITMENUPOPUP消息,MFC框架内部通过CCmdUI类进行处理。如果菜单项未响应CN_UPDATE_COMMAND_UI或CN_COMMAND消息,且m_bAutoMenuEnable为真,菜单项可能因缺乏处理函数而变灰。关闭m_bAutoMenuEnable可防止这一行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调用了EnableMenuItem为什么变灰那不用说了,我说说为什么不调用也会变灰:  
   
 首先要知道,当你点现了一个有子菜单的菜单项时(比如菜单栏上的“文件”),系统会向拥有这个菜单的窗口发送一个WM_INITMENUPOPUP, 下面是MFC对这个消息的默认处理:  
  void   CFrameWnd::OnInitMenuPopup(CMenu*   pMenu,   UINT   nIndex,   BOOL   bSysMenu)  
  {  
            //为了说明问题,我省略了很多代码  
            CCmdUI   state;  
            state.m_pMenu   =   pMenu;  
            state.m_nIndexMax   =   pMenu->GetMenuItemCount();  
            for   (state.m_nIndex   =   0;   state.m_nIndex   <   state.m_nIndexMax;  
      state.m_nIndex++)  
            {  
  state.m_nID   =   pMenu->GetMenuItemID(state.m_nIndex);  
  if   (state.m_nID   ==   (UINT)-1)  
  {  
                                          //m_nID==-1表示它下面还有popup   menu(就那种带右箭头的菜单项),  
                               
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值