第 13 章 MFC 功能包编程简介
VS08 SP1 所含的 VC08 的 MFC 功能包(MFC Feature Pack for Visual C++ 2008),在
MFC 9.0 的基础上增加 137 个新类(及 86 个内部类)和 1 个新结构。功能包对传统 MFC 库
进行了扩展,以支持时髦的现代用户界面元素,如 Office Fluent(流畅)UI、停靠窗口和
MDI 选项卡(tab)窗口(似 Visual Studio 2005/2008)、增强型工具条、丰富的新控件集、
支持总体视觉样式(overall visual style)、支持桌面报警(desktop alerts)等等。程序员可以
利用该功能包编写具有类似于微软公司新版的 Microsoft Office、Visual Studio 或 Internet
Explorer 等流行界面视觉样式的应用程序。
MFC 功能包的改进主要体现在新型用户界面上,主要包括:功能区(ribbon)、选项卡
(tab)窗口和窗格(pane)、视觉样式切换(换肤)、可停靠与自动隐藏的控制条和窗格等。
MFC 功能包的帮助信息,位于 MSDN 的“目录\开发工具和语言\Visual Studio 文档\Visual
C++\参考信息\Libraries Reference\MFC Feature Pack for Visual C++ 2008”,主要内容在其
“Reference\Classes”子目录中。
在 VS2010 中,MFC 功能包已被完全并入 MFC,所以其帮助系统也被并入标准的 MFC
帮助系统之中,位于 MSDN 的“目录\开发工具和语言\Visual Studio 文档\Visual C++\参考信
息\Libraries Reference\MFC”,主要内容也在其“Classes”子目录中。
13.1 新增功能
MFC 功能包在用户界面方面增加了许多新功能,包括对传统界面元素的改进和若干新
增的界面元素。
13.1.1 传统界面元素的改进
MFC 功能包,对菜单、工具条、对话框和控件等传统界面元素,进行了大量改进,以
适应时髦用户界面的需要。
1.菜单
在功能包中增了微软 Office 新样式的菜单和菜单条,可以停靠和用(自绘)图片定制,
1
支持菜单阴影和滚动、菜单工具提示、运行时的菜单字体修改、菜单标识的自绘、最近使用
列表和窗口列表、右对齐的组合框、可去掉的菜单(tear-off menus)等,还支持菜单动画,
包括图片淡入和渐显、展开或滑进视图等。
2.工具条
功能包中的新型工具条,支持大图标和双臂章式(double-chevron)按钮(存在比当前
可见部分更多的按钮),而且按钮的图片可在鼠标悬浮于按钮上时更换,并允许在图片下显
示文本,还可以在菜单和工具提示中自动创建键盘快捷键。在新型工具条中,可包含钢筋
(Rebar)子窗口容器、标准的组合框和文本框按钮、标准字体组合框和字体大小组合框按
钮、标准颜色选择器控件,以及包含钉销钮的下拉式可移去窗格,还支持 MS Office 视觉样
式(visual styles)和具有背景图的透明工具条。不可定制的工具条。
3.控件
功能包中新增和改进的控件有:URL 链接钮、装饰有位图图片的按钮、菜单钮、可编
辑列表、颜色选择器控件、壳(Shell)树控件、壳列表控件、屏蔽的(Masked)编辑控件、
定制的(Custom)工具提示控件、包含浏览钮的编辑控件、属性格(Property grid)、MDI
选项卡(tab)控件、支持诸如三维、Excel、OneNote 等视觉样式的选项卡控件。
4.对话框
功能包中新增和改进的对话框有:Windows 管理器对话框、Office 样式的颜色选择对话
框、图片编辑器对话框、包含若干控件(诸如快捷条、树控件或 Office 2007 样式列表等)
的属性单(property sheets)。
13.1.2 新界面元素
MFC 功能包新增加的界面元素主要有窗格、功能区和选项卡。
1.窗格
窗格(Panes)是一种窗口,通常是可调整大小、可移去和可停靠的。窗格支持如下功
能:MS Office 样式的对话框条、(支持图片和停靠的)Office 样式的菜单条,MS Outlook
2
样式的快捷条(shortcut bar)、标题条(caption bar)和任务窗格(task pane),(类似于工具
条、属性和浏览器窗格)Visual Studio 样式的窗格。窗格还支持(内容和位置在应用程序的
多次运行之间持续不变的)钢筋(Rebar)控件、(支持图标、动画和进度条)状态条和打印
预览服务。
2.功能区控件
功能区(ribbon,缎丝带/带状条)是新的 Microsoft Office Fluent 用户界面的一部分,用
来代替传统的菜单和工具条功能。
在面板设计器中,功能区包含一些用于创建、编辑和导出面板及其元素的上下文工具。
功能区控件支持:通用功能区特性(features)、Vista Aero 集成(默认样式为气体主题[theme])、
功能区窗格、功能区上下文的类别(categories)选项卡标签)、功能区元素、功能区键提示
(keytips)、功能区调色板(图表种类[galleries])、功能区用户化定制、功能区最小工具条、
功能区启动(Launch)按钮和主按钮、功能区状态条等。
3.选项卡窗口
在 MFC 功能包的 MDI 应用程序中,不再使用传统的多个独立子窗口作为文档窗口,
而是使用位于主框架窗口客户区的 MDI 选项卡窗口(tabbed window)组,简称为选项卡组
(tabbed groups)。选项卡窗口可被垂直或水平排列,如果一个应用程序具有多个 MDI 选项
卡组,则各组之间用分隔条(splitter)分开。
MDI 选项卡组具有如下特点:应用程序可动态创建选项卡窗口、应用程序可垂直或水
平排列选项卡窗口、选项卡窗口组被分隔条分开、用户可使用分隔条来调整选项卡组的大小、
用户可在组间拖动单个选项卡、用户可拖动单个选项卡来创建组、用户可使用快捷菜单来移
动选项卡或创建新组、应用程序可以保存和装入选项卡窗口的布局和 MDI 文档列表、应用
程序还可以访问单个选项卡组并修改它们的参数。
13.1.3 新增功能
MFC 功能包新增加的其他功能有 Outlook 式的桌面报警、控件的定制、可视化管理和
若干特殊的功能和操作。
3
1.桌面报警
微软的 Outlook 式桌面报警(Desktop Alert),显示一个包含通知的弹出窗口,如 Outlook
收件箱中的通知邮件到达消息的窗口。
2.定制
用户可自定义控件的颜色、图片和文本等,包括:位于工具条和菜单之间的拖拉钮(drag
button)、使用简单的位图编辑器来编辑用户定义的图片、在运行时创建自定义的工具条、
定制上下文菜单、使用工具条定制菜单来快速定制工具条按钮、使用菜单资源来自动创建用
户化类别(customization categories)、利用按下 Alt 键并拖曳工具条按钮来定制工具条、定
制鼠标事件处理、定制快捷键、保存和恢复工具条与菜单的状态到注册表、访问工作区
(workspace)管理器以保持定制的设置到注册表、调用自定义工具等。
3.可视化
MFC 提供了可视化(visualization)管理器,它按照用户选择的视觉样式来绘制控件。
可视化支持 Microsoft Office 2000/XP/2003/2007 视觉样式和 Visual Studio 6.0/.NET/2005 视觉
样式。
4.特殊功能
MFC 支持如下操作:自动隐藏窗口、保存和装入已打开文档的状态、将若干窗格停靠
到浮动的袖珍(mini)框架窗口、α混合图片(支持 32 位图片)、按从右到左(RTL =
Right-To-Left)的格式显示全球化文本、允许可达性(accessibility)支持。
MFC 还支持运行时改变窗口的停靠类型:
标准——在拖动窗口期间不画窗口的内容(如 Microsoft Visual Studio .NET 2003)。
立即——在拖动窗口期间画窗口的内容(如 Microsoft Visio)。
灵巧(Smart)——在拖动窗口期间画窗口的内容而且有一箭头标记指出窗口可停
靠的位置(如 Microsoft Visual Studio 2005/2008)。
4
13.2 界面的切换与定制
与传统的 MFC 应用程序不同,功能包应用程序可以在运行时由用户来动态切换界面风
格和定制菜单与工具条等界面元素。下面我们通过一个简单的例子,展示一下 MFC 功能包
应用程序界面的视觉样式及主题的切换效果和强大的用户自定义功能。
13.2.1 视觉样式切换
创建一个单文档界面的 MFC 应用程序 FP1:在“MFC 应用程序向导”对话框的“应用
程序类型”页(参见图 13-1),选中“应用程序类型”栏的“单个文档”单选项、选中“项
目类型”栏的“MFC 标准”单选项,其它保持不变(如“视觉样式和颜色”栏的下拉式列
表中为“Visual Studio 2005”选项、“启用视觉样式切换”复选框是选中的),按“完成”钮
生成 FP1 项目。直接编译运行的结果如图 13-2 所示。
图 13-1 在 MFC 应用程序向导中启用视觉样式切换
5
图 13-2 Visual Studio 2005 视觉样式
在应用程序的“视图”菜单中有一个“应用程序外观”子菜单,其中包含如下菜单项:
Windows 2000、Office XP、Windows XP、Office 2003、Visual Studio.NET 2005(默认值)、
Office 2007(蓝色样式、黑色样式、银色样式、水绿色样式),参见图 13-3。
图 13-3 应用程序外观菜单
默认的视觉样式为我们在在“MFC 应用程序向导”对话框的“应用程序类型”页“视
觉样式和颜色”栏的下拉式列表中所选中的选项(Visual Studio 2005)。图 13-4 是若干其它
视觉样式的效果图:
Windows XP
Office 2003
6
Office 2007 的蓝色样式
Office 2007 的黑色样式
图 13-4 部分视觉样式
13.2.2 自定义设置
在程序的“视图”菜单的“工具栏和停靠窗口”子菜单中,还有一个“自定义”菜单项,
利用其弹出的对话框,用户可以在程序运行时进行许多自定义设置(似 MS Word 2003),图
13-5 是“自定义”对话框的若干设置页。
“命令”页
“工具栏”页
“键盘”页
“菜单”页
7
“选项”页
图 13-5 “自定义”对话框的若干设置页
1.增删工具栏按钮
可以按工具栏右端的工具栏选项钮 ,利用弹出的“添加或删除按钮”子菜单中的“标
准”子菜单,来增/删(显示/隐藏)标准工具栏中的按钮,参见图 13-6。
图 13-6 “添加或删除按钮”菜单中的“标准”子菜单
利用工具栏选项的“添加或删除按钮”子菜单中的“自定义”菜单项(或利用程序“视
图”菜单的“工具栏和停靠窗口”子菜单中的“自定义”菜单项)弹出的“自定义”对话框
的“命令”页,还可以使用各菜单中的菜单项来可视化地交互增删、分组、调位工具栏上的
按钮(或菜单项)(似 MS Office 和 MS Visual Studio)。
2.新建工具栏
利用“自定义”对话框的“工具栏”页(参见图 13-7),可以在运行时为应用程序动态
8