上次给大家介绍了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之间(还算可以接受的说)。