CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  非技术类

关于xp风格界面的问题。

楼主xiaoyao888(赵逍遥)2006-05-04 20:06:00 在 VC/MFC / 非技术类 提问

我使用在资源文件里加manifest文件的方法来实现XP风格界面  
  可是只有我自定义的工具栏是XP风格的,MDI框架的菜单和工具栏都是原来的样子。  
  不知道菜单和工具栏怎么才能像系统自带的程序那样有XP的风格?  
  难道只有自己定义的才行? 问题点数:20、回复次数:10Top

1 楼xiaoyao888(赵逍遥)回复于 2006-05-04 20:21:11 得分 0

还有个问题是我用  
  CMenu*   pPopup   =   AfxGetMainWnd()->GetMenu();  
  pPopup->EnableMenuItem(ID_AA_START,MF_GRAYED|MF_BYCOMMAND|   MF_DISABLED);  
  来禁用菜单项但却不起作用,该菜单项既没有变灰也没有变得无效,点它还是有反应,不知道为什么。我用  
  用MF_BYPOSITION的方式也不行。是MDI的。  
  难道是获得的菜单的指针不对吗?Top

2 楼whwjn(哈哈)回复于 2006-05-04 21:49:37 得分 5

要在XP系统下才行Top

3 楼xiaoyao888(赵逍遥)回复于 2006-05-05 17:17:28 得分 0

就是在XP下Top

4 楼coolzdp(unreal张师傅)回复于 2006-05-08 23:39:28 得分 5

CMenu   menu;  
   
  VERIFY(menu.LoadMenu(IDR_MENU_REPORTITEM));  
   
  menu.EnableMenuItem(ID_DELETE,   MF_BYCOMMAND   |   MF_GRAYED);Top

5 楼xiaoyao888(赵逍遥)回复于 2006-05-11 17:41:54 得分 0

不行啊,不管用啊Top

6 楼hjf80531(双手的幸福)回复于 2006-05-11 18:33:01 得分 9

楼主可能是一个基于对话框的程序:  
  如果的话..请手动添加以下内容:  
   
  1.在CPP文件中  
  BEGIN_MESSAGE_MAP  
  ...  
  ON_WM_INITMENUPOPUP()  
  ...  
  END_MESSAGE_MAP()  
   
  void   CXXXDlg::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;  
          }  
  }  
   
  在.H文件中  
  afx_msg   void   OnInitMenuPopup(CMenu   *pPopupMenu,   UINT   nIndex,BOOL   bSysMenu);  
   
  这样你就可以用  
   
  ON_UPDATE_COMMAND_UI(   ...,   ...   )  
  来更新你的菜单了Top

7 楼xiaoyao888(赵逍遥)回复于 2006-05-11 19:41:07 得分 0

正相反,是MDI的,我用基于对话框的对菜单进行操作却没有问题,但在MDI下同样的操作却不起作用。Top

8 楼xiaoyao888(赵逍遥)回复于 2006-05-14 19:43:58 得分 0

老大们帮帮忙Top

9 楼gofqjyie(誓将天下了然于胸)回复于 2007-03-29 17:08:53 得分 1

真强Top

10 楼xiaoyao888(赵逍遥)回复于 2007-03-29 17:12:43 得分 0

为了结贴,转到这里来了Top

相关问题

关键词

得分解答快速导航

  • 帖主:xiaoyao888
  • whwjn
  • coolzdp
  • hjf80531
  • gofqjyie

相关链接

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

广告也精彩

反馈

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