zoukankan      html  css  js  c++  java
  • 用VS2008 Feature Pack 修改您现有的Visual C++的程序界面 (转)

    上次给大家介绍了Visual C++ 2008 的Feature Pack的界面库新特性。今天给大家介绍一下,怎样用Feature Pack把您现有的Visual C++ 程序界面修改得漂亮些。

          所需的修改环境:
          Visual C++ 2008  (Team Suite版Express版都可以,但必须是英文版,否则Feature Pack不支持)
          正确的安装了Visual C++ 2008 Feature Pack beta
          您要修改的Visual C++ 的程序源代码工程

          具备了以上三点就可以开始进行修改操作了。但是有一点提请注意,那就是您程序中是否用到了MS C++ 9.0 编译器不再支持的语法特性?如果有,那很不幸,我个人不推荐您升级您的程序界面,毕竟程序运行的稳定性才是最重要的。为了漂亮的界面修改已经测试过并稳定运行的代码,可不是一个明智的选择。

          下面我就用一个Visual C++的入门Demo Scribble 来修改。这个Scribble您可以在MSDN网站上下载到,但请您注意,我给出的这个下载工程是VS2005 for x64的。下载后,您需要进行以下改动:
           1) 将Scribble工程属性中,C/C++编译器的Treat Warnings as error 关闭,否则您的工程将会因为一个Warning没有解决,导致整个程序编译失败。如图:
           

          2) 编译时,将Target 改为Win32;

          罗嗦了这么多,开始修改吧!

          第一步: 请确定CScribbleApp::InitialInstance() 方法中已经调用了AfxOleInit();
          第二步: 在stdafx.h文件中加入 #include"afxcontrolbars.h" ,这头文件包含了Feature Pack新增的界面类声明;
          第三步:修改CScribbleApp类继承的父类,由CWinApp改为CWinAppEx;这个CWinAppEx类比CWinApp添加了很多的功能,说个简单的,CWinAppEx提供了一个SetRegistryBase方法,这个方法可以用来设定当前App所使用的注册表的根。
          第四步:修改主框架类,将CMainFrame的父类由CMDIFrameWnd改为CMDIFrameWndEx;这个修改设计到类声明、IMPLEMENT_DYNAMIC宏、MESSAGE_MAP宏、OnCreate函数等调用到静态方法的地方、以及其它等等。最好是直接用Replace all文本替换掉;
          第五步:将CMDIChildWnd类替换为CMDIChildWndEx,主框架换了,子窗体也要换;
          第六步:替换CTooBar为CMFCTooBar,替换CStatusBar为CMFCStatusBar;就是修改一下m_wndStatusBar和m_wndToolBar两个变量的声明处;
          第七步:替换CMainFrame::OnCreate()函数中m_wndToolBar 和m_wndStatusBar停靠的相关代码;将Set/Get BarStyle改为Set/Get PaneStyle 也是文本替换一下,很简单。将DockControlBar(&m_wndStatusBar);改为DockPane(&m_wndStatusBar);
          完成以上七步,基本改造就算完成了。但是如果您现在编译您的程序,您会发现Scribble界面基本上没有任何改变。下面的才是更重要的,我们要添加RibbonBar了:

          第一步:在CMainFrame类中声明一个CMFCRibbonBar类型的变量m_wndRibbonBar。这个变量就代表Office2007界面里面那个替代了菜单的东东;
          第二步:在CMainFrame类中声明一个CMFCRibbonApplicationButton的变量m_MainButton。这个变量代表了Office2007界面左上角那个Home按钮;
          第三步:在CMainFrame::OnCreate函数中添加代码。首先是创建RibbonBar对象,老规矩:
          if(!m_wndRibbonBar.Create(this))
          {
              return -1;
          }
          第四步:设定m_MainButton对象:
          m_MainButton.SetImage(……);   //设定图标
          m_MainButton.SetToolTipText(……); //设定提示文本
          m_MainButton.SetText(……);   //设定按钮文本
          第五步:在CMainFrame::OnCreate函数中添加代码,通过RibbonBar对象添加一个Category:
          CMFCRibbonMainPanel *pMainPanel = m_wndRibbonBar.AddMainCategory(_T("File"));
          这实际上就类似于创建了一个名为File的主菜单项;
          第六步:给这个Panel添加按钮(其实就是子菜单项):
          pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN,_T("打开")));
          ……
          第七步:
          在CMainFrame::OnCreate()函数的最后部分,添加代码设定当前界面的风格:
          CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
          CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007Luna_Blue);
          代码的第一行用来设定可视化管理器为Office2007类型,可供选择的还有OfficXP、Office2003、VS2005 三种,换句话说,我们可以将我们的程序界面修改为Office2007、Office2003、OfficeXP、VS2005四种风格;
          代码的第二行用来设定Office2007界面的色调;
          完成以上步骤后,就可以编译运行啦,看看界面是不是改变了呢?
          修改前:
         

          修改后:
          

          我没有找到比较好看的图标,也没有把菜单都实现出来,仅仅是作为一个演示。相信在美工的帮助下,我们的MFC程序界面一定会漂亮起来的。

          说到最后,我要提醒大家一下,发布程序前,已经要静态链接MFC的库。在现在VC8.0 的RTM尚不普及的情况下,就别指望您的用户安装部署了支持Feature Packe的FTM库了。粗粗看了一下,一个用向导生成的支持Feature Pack的Application(是的,安装了Feature Pack在用AppWizard生新程序的时候,就可以指定Feature Pack支持了),什么代码都不加,静态编译一般在6M-8M之间(还算可以接受的说)。
          
  • 相关阅读:
    4412开发板QtE系统下MT6620wifi的测试
    如何编译(helloworld)可以在开发板上运行的应用
    iMX6Q/PLUS开发板烧写设备树内核的Ubuntu系统
    Windows server 2008系统优化
    三十句瞬间使你清醒的话
    收集的Word2007技巧大全
    WINDOWS系统文件详解
    注册表从入门到精通
    140个绝对绝对值得收藏的电脑技巧
    经典人生感悟格言
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1234445.html
Copyright © 2011-2022 走看看