CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

ON_COMMAND建立的菜单映射,如何在已选的项前面标记

楼主zhjie374(zhjie374)2004-10-04 11:13:01 在 VC/MFC / 基础类 提问

RT 问题点数:0、回复次数:6Top

1 楼laiyiling(陌生人[MVP])回复于 2004-10-04 11:20:17 得分 0

如何在已选的项前面标记?  
  --------------  
  不是很明白啊!Top

2 楼anothervip(Never ending... ...)回复于 2004-10-04 11:30:35 得分 0

是打勾吗?  
   
  CMenu::CheckMenuItem()  
   
  CCmdUI::SetCheck()Top

3 楼huaboy408(Thinking...)回复于 2004-10-04 11:54:21 得分 0

响应ON_UPDATE_COMMAND_UI  
  然后  
  pCmdUI->SetCheck(TRUE);Top

4 楼zhjie374(zhjie374)回复于 2004-10-04 22:39:02 得分 0

我利用的是弹出菜单!  
  ON_UPDATE_COMMAND_UI建立映射以后,还是不能标记(打勾)!  
  Top

5 楼zxs0001(盛)回复于 2004-10-04 23:24:49 得分 0

这个弹出菜单是不是在对话框中弹出的呀,  
  如果是的话就会有这问题!把框架类的一些关于菜单操作的函数拷过去就行了。  
  Top

6 楼zxs0001(盛)回复于 2004-10-04 23:28:40 得分 0

如果是的话,具体可以这么做:  
  在.h文件中加入如下声明  
  void   OnInitMenuPopup(CMenu   *pPopupMenu,   UINT   nIndex,BOOL   bSysMenu);   //初始化系统菜单函数,以响应ON_UPDATE_COMMAND_UI    
   
  在.cpp文件的映射部分加入  
  ON_WM_INITMENUPOPUP()     //响应菜单栏的ON_UPDATE_COMMAND_UI    
   
  再在.cpp文件中实现  
  void   CYourDlg::OnInitMenuPopup(CMenu   *pPopupMenu,   UINT   nIndex,BOOL   bSysMenu)  
  {  
          ASSERT(pPopupMenu   !=   NULL);  
          //   Check   the   enabled   state   of   various   menu   items.  
   
          CCmdUI   state;  
          state.m_pMenu   =   pPopupMenu;  
          ASSERT(state.m_pOther   ==   NULL);  
          ASSERT(state.m_pParentMenu   ==   NULL);  
   
          //   Determine   if   menu   is   popup   in   top-level   menu   and   set   m_pOther   to  
          //   it   if   so   (m_pParentMenu   ==   NULL   indicates   that   it   is   secondary   popup).  
          HMENU   hParentMenu;  
          if   (AfxGetThreadState()->m_hTrackingMenu   ==   pPopupMenu->m_hMenu)  
                  state.m_pParentMenu   =   pPopupMenu;         //   Parent   ==   child   for   tracking   popup.  
          else   if   ((hParentMenu   =   ::GetMenu(m_hWnd))   !=   NULL)  
          {  
                  CWnd*   pParent   =   this;  
                        //   Child   windows   don't   have   menus--need   to   go   to   the   top!  
                  if   (pParent   !=   NULL   &&  
                        (hParentMenu   =   ::GetMenu(pParent->m_hWnd))   !=   NULL)  
                  {  
                        int   nIndexMax   =   ::GetMenuItemCount(hParentMenu);  
                        for   (int   nIndex   =   0;   nIndex   <   nIndexMax;   nIndex++)  
                        {  
                          if   (::GetSubMenu(hParentMenu,   nIndex)   ==   pPopupMenu->m_hMenu)  
                          {  
                                  //   When   popup   is   found,   m_pParentMenu   is   containing   menu.  
                                  state.m_pParentMenu   =   CMenu::FromHandle(hParentMenu);  
                                  break;  
                          }  
                        }  
                  }  
          }  
   
          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);  
                  if   (state.m_nID   ==   0)  
                        continue;   //   Menu   separator   or   invalid   cmd   -   ignore   it.  
   
                  ASSERT(state.m_pOther   ==   NULL);  
                  ASSERT(state.m_pMenu   !=   NULL);  
                  if   (state.m_nID   ==   (UINT)-1)  
                  {  
                        //   Possibly   a   popup   menu,   route   to   first   item   of   that   popup.  
                        state.m_pSubMenu   =   pPopupMenu->GetSubMenu(state.m_nIndex);  
                        if   (state.m_pSubMenu   ==   NULL   ||  
                          (state.m_nID   =   state.m_pSubMenu->GetMenuItemID(0))   ==   0   ||  
                          state.m_nID   ==   (UINT)-1)  
                        {  
                          continue;               //   First   item   of   popup   can't   be   routed   to.  
                        }  
                        state.DoUpdate(this,   TRUE);       //   Popups   are   never   auto   disabled.  
                  }  
                  else  
                  {  
                        //   Normal   menu   item.  
                        //   Auto   enable/disable   if   frame   window   has   m_bAutoMenuEnable  
                        //   set   and   command   is   _not_   a   system   command.  
                        state.m_pSubMenu   =   NULL;  
                        state.DoUpdate(this,   FALSE);  
                  }  
   
                  //   Adjust   for   menu   deletions   and   additions.  
                  UINT   nCount   =   pPopupMenu->GetMenuItemCount();  
                  if   (nCount   <   state.m_nIndexMax)  
                  {  
                        state.m_nIndex   -=   (state.m_nIndexMax   -   nCount);  
                        while   (state.m_nIndex   <   nCount   &&  
                          pPopupMenu->GetMenuItemID(state.m_nIndex)   ==   state.m_nID)  
                        {  
                          state.m_nIndex++;  
                        }  
                  }  
                  state.m_nIndexMax   =   nCount;  
          }  
  }    
   
  Top

相关问题

  • 模态对话框中怎样消息映射菜单或按钮ID的ON_UPDATE_COMMAND_UI?
  • 在对话框里面使用ON_UPDATE_COMMAND_UI映射工具条(toolbar和菜单(menu)的心得
  • SDI程序中菜单消息映射
  • 菜单中的复选标记
  • 各位,我想设置菜单上某一个子项的 Check 怎么设置呀???哦 ON_COMMAND_UI消息在哪映射呢???
  • 我的菜单消息映射出错了!
  • 菜单的复选标记怎么设置或者实现?
  • 怎么在Win32中正理设置菜单的选中标记?
  • 新手提问:从菜单中映射对话框出现问题,
  • 怎样在右键菜单的菜单项左侧加上与去掉对勾标记?

关键词

  • 映射
  • 文件
  • null
  • ppopupmenu
  • pparentmenu
  • state
  • 菜单
  • popups
  • nindex
  • 标记

得分解答快速导航

  • 帖主:zhjie374

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo