点点滴滴
posts - 311, comments - 0, trackbacks - 0, articles - 0
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
(搬运工)用VS2008 Feature Pack 修改您现有的Visual C++的程序界面
Posted on 2011-06-13 19:23
点点滴滴
阅读(284)
评论(0)
编辑
收藏
引用
所属分类:
02 编程语言
上次给大家介绍了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之间(还算可以接受的说)。
Powered by:
C++博客
Copyright © 点点滴滴
日历
<
2011年6月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
公告
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔分类
(268)
01 数学基础(5)
02 编程语言(175)
03 编程工具(6)
04 硬件基础(2)
05 图像基础(3)
06 多媒体
07 压缩加密
08 游戏SDK(10)
09 游戏策划(3)
10 服务器(42)
11 生活随想(12)
12工具收集(1)
19 源码收集(9)
随笔档案
(311)
2017年5月 (1)
2016年12月 (2)
2016年11月 (7)
2014年10月 (4)
2014年9月 (2)
2014年7月 (1)
2014年2月 (1)
2013年11月 (4)
2013年10月 (42)
2013年8月 (1)
2013年7月 (1)
2013年6月 (3)
2013年5月 (3)
2013年4月 (2)
2013年3月 (4)
2013年2月 (3)
2013年1月 (2)
2012年11月 (3)
2012年10月 (3)
2012年9月 (12)
2012年8月 (8)
2012年7月 (47)
2012年6月 (3)
2012年5月 (4)
2012年3月 (4)
2012年2月 (5)
2012年1月 (2)
2011年12月 (5)
2011年11月 (4)
2011年10月 (3)
2011年9月 (5)
2011年8月 (2)
2011年7月 (2)
2011年6月 (7)
2011年5月 (13)
2011年4月 (9)
2011年3月 (17)
2011年2月 (9)
2011年1月 (25)
2010年12月 (10)
2010年11月 (24)
2010年10月 (2)
相册
blog
游戏
搜索
积分与排名
积分 - 463444
排名 - 45
最新评论