演练:更新MFC scribble应用程序(第1部分)
本演练演示如何修改现有的MFC应用程序使用功能区用户界面(ui)。Visual Studio支持Office 2007功能区和Windows 7风景功能区。有关功能区用户界面的更多信息,请 功能区 参见MSDN网站上。
本演练修改允许您使用鼠标创建线条图形的传统的scribble MFC示例1.0。此演练部分演示如何修改SCRIBBLE示例,以使其显示功能区栏。第2部分 添加更多按钮添加到功能区栏。
系统必备
各节内容
此演练部分包含以下部分:
替换基类
位图添加到项目
将功能区资源添加到项目
创建功能区栏的实例
将功能区类别
设置应用程序的外观
替换基类
若要将支持菜单到应用程序支持功能区的应用程序,必须更新从基类派生应用程序、框架窗口和工具栏选件类。(建议您不要修改原始scribble示例;相反,清理scribble项目,将其复制到另一个目录,然后修改副本。)
替换在scribble应用程序的基类
在scribble.cpp,请验证 CScribbleApp::InitInstance 包括对 AfxOleInit。
将以下代码添加到stdafx.h文件。
#include <afxcontrolbars.h>
在scribble.h,请修改 CScribbleApp 选件类的定义,使其从 CWinAppEx 类派生。
class CScribbleApp: public CWinAppEx
scribble 1.0编写的,当Windows应用程序使用初始化(.ini)文件保存用户首选项数据。而不是初始化文件中,修改scribble存储用户首选项在注册表中。若要设置注册表项和基础,请在 LoadStdProfileSettings() 语句后键入在 CScribbleApp::InitInstance 的代码。
SetRegistryKey(_T("MFCNext\\Samples\\Scribble2")); SetRegistryBase(_T("Settings"));
多线程的主框架文档界面(MDI)应用程序从 CMDIFrameWnd 选件类不再派生。相反,它从 CMDIFrameWndEx 选件类派生。
在mainfrm.h和mainfrm.cpp文件,请替换所有引用。CMDIFrameWnd 和 CMDIFrameWndEx。
在childfrm.h和childfrm.cpp文件,请在 CMDIChildWndEx替换 CMDIChildWnd 。
在childfrm。h文件,请 CSplitterWndEx替换 CSplitterWnd 。
修改工具栏和状态栏使用新MFC选件类。
在mainfrm.h文件:
在 CMFCToolBar替换 CToolBar 。
在 CMFCStatusBar替换 CStatusBar 。
在mainfrm.cpp文件:
在 m_wndToolBar.SetPaneStyle替换 m_wndToolBar.SetBarStyle
在 m_wndToolBar.GetPaneStyle替换 m_wndToolBar.GetBarStyle
在 DockPane(&m_wndToolBar)替换 DockControlBar(&m_wndToolBar)
在ipframe.cpp文件,注释代码以下三行。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); pWndFrame->EnableDocking(CBRS_ALIGN_ANY); pWndFrame->DockPane(&m_wndToolBar);
如果您打算静态链接到您的应用程序中,添加以下代码添加到项目资源(.rc)文件的开头。
#include "afxribbon.rc"
afxribbon.rc文件包含需要在运行时的资源。,在创建应用程序时,MFC 应用程序向导 自动包含此文件。
保存更改然后生成并运行应用程序。
[各节内容]
位图添加到项目
下四个步骤本演练需要位图资源。可以获取适当的位图各种方法:
使用 资源编辑器 开发您的位图。也可以使用资源编辑器来组合来自附带 Visual Studio的可移植网络映像() .png图像的位图。这些图像可以在 VS2008ImageLibrary内容。
但是,功能区用户界面要求某些位图支持透明的图像。透明位图使用32个像素,24位指定颜色的红色,绿色和蓝色分量,并且,8位定义用于指定颜色的透明度的一个 alpha通道 。当前资源编辑器可以查看,但是,不改变位图具有32个像素。结果,请使用外部图像编辑器而不是资源编辑器操作透明位图。
复制另一个应用程序的合适的资源文件添加到您的项目从该文件中导入位图。
本演练将一个应用程序的资源文件在示例目录。
位图添加到项目
使用文件资源管理器中复制下面的.bmp文件从resources目录(res) RibbonGadgets示例:
复制main.bmp对scribble项目。
复制filesmall.bmp和filelarge.bmp对scribble项目。
提交新的副本filelarge.bmp和filesmall.bmp文件,但是,保存在RibbonGadgets示例的副本。对复制homesmall.bmp和homelarge.bmp重命名再将复制到您的scribble项目。
制作toolbar.bmp文件,但是,保存在RibbonGadgets示例的副本。将该副本panelicons.bmp重命名然后将复制到您的scribble项目。
导入MFC应用程序的位图。在 资源视图,双击 *** scribble.rc *** 节点,双击 位图 节点,然后单击 添加资源。在出现的对话框中,单击 导入。浏览到 res 目录,选择main.bmp文件,然后单击 打开。
main.bmp位图包含一个26x26图像。更改位图的ID更改为IDB_RIBBON_MAIN。
导入附加到应用程序按钮的"文件"菜单的位图。
导入filesmall.bmp文件,包含十个16x16 (16x160)图像。由于我们只需要八个16x16图像(16x128),请使用 资源视图 更改该位图的宽度从160到128。更改位图的ID更改为IDB_RIBBON_FILESMALL。
导入filelarge.bmp,包含八个32x32 (32x256)图像。更改位图的ID更改为IDB_RIBBON_FILELARGE。
导入功能区类别和面板的位图。在功能区栏的每个选项是类,并包含文本标签和可选图像。
导入homesmall.bmp位图,包含一个小按钮位图的八个16x16图像。更改位图的ID更改为IDB_RIBBON_HOMESMALL。
导入homelarge.bmp位图,包含用按钮位图的八个32x32图像。更改位图的ID更改为IDB_RIBBON_HOMELARGE。
导入调整大小的功能区面板的位图。,如果功能区上太小而无法显示整个面板,使用这些位图或面板图标,在调整操作之后。
- 导入panelicons.bmp位图,包含八个16x16图像。在 位图编辑器的 属性 窗口,调整位图的宽度为64 (16x64)。更改位图的ID更改为IDB_PANEL_ICONS。
[各节内容]
将功能区资源添加到项目
当您将使用菜单到应用程序使用一功能区的应用程序时,您不必移除或禁用现有菜单。相反,您创建一个功能区资源,添加功能区按钮,然后将新的按钮与现有菜单项。虽然菜单不再可见,从功能区栏的消息传递菜单进行路由。此外,"菜单快捷方式继续工作。
功能区都包含应用程序按钮,则在功能区的左上角端的大按钮和一个或多个类别选项。每个类别选项包含作为区按钮和控件的容器的一个或多个面板。下面的过程演示如何创建功能区资源然后自定义应用程序按钮。
功能区资源添加到项目
在 项目 菜单上,单击 添加资源。
在 添加资源 对话框中,选择" 功能区 然后单击 新建。
Visual Studio创建一个功能区资源并打开它在"设计"视图。功能区资源ID是IDR_RIBBON1,在 资源视图显示。功能区上包含一类别和一个面板。
可以通过修改其属性自定义应用程序按钮。用于此代码的消息ID在scribble 1.0的菜单已定义。
在设计视图中,单击应用程序按钮显示其属性。更改属性值如下所示:为 IDB_RIBBON_MAIN于 文件的 图像 ,对 f的 提示 ,对 IDB_RIBBON_FILELARGE的 键 ,对 IDB_RIBBON_FILESMALL的 大图像 和 小图像 。
以下修改创建显示的菜单当用户单击应用程序按钮。在 *** 主项目 *** 旁边的省略号(*** … ***)打开 项编辑器。
单击 添加 添加按钮。将标题 更改为 新建(&N),ID 更改为 ID_FILE_NEW,图像 更改为 0,大型图像 更改为 0。
单击 添加 添加第二个按钮。将 标题更改为 &Save,ID 更改为ID_FILE_SAVE,Image 更改为 2,大型图像 更改为 2。
单击 添加 添加第三个按钮。将标题 更改为 Save &As,ID 更改为 ID_FILE_SAVE_AS,Image 更改为 3,大型图像 更改为 3。
单击 添加 添加第四个按钮。将Caption 更改为&Print,ID 更改为ID_FILE_PRINT,Image 更改为4,大型图像 更改为4。
更改 item 类型到 分隔符 然后单击 添加。
更改 item 类型到 按钮。单击 添加 添加第五个按钮。将Caption 更改为&Close,ID 更改为ID_FILE_CLOSE,Image 更改为5,大型图像 更改为5。
以下修改创建一个子菜单在上一步中创建的打印"按钮下。
单击 打印 按钮,更改 item 类型到 标签,然后单击 插入。更改 标题 到 预览并打印文档。
单击 打印 按钮,更改 item 类型到 按钮,然后单击 插入。将标题更改为&Print,ID 更改为ID_FILE_PRINT,Image 更改为4,大型图像 更改为4。
单击按钮 打印 然后单击 插入 添加按钮。将标题 更改为 快速打印(&Q),ID 更改为 ID_FILE_PRINT_DIRECT,图像 更改为 7,大型图像 更改为 7。
单击按钮 打印 然后单击 插入 添加另一个按钮。将Caption 更改为打印预览(&V),ID 更改为ID_FILE_PRINT_PREVIEW,图像 更改为 6,大型图像 to6。
现在已修改 *** 主项目 ***。单击退出 项编辑器的 关闭 。
以下修改创建出现在应用程序中按钮菜单的底部的一个退出点按钮。
在 属性 窗口,请在 按钮 旁边的省略号(*** … ***)打开 项编辑器。
单击 添加 添加按钮。将 标题 更改为 退出(&X),ID 更改为 ID_APP_EXIT,图像 更改为 8。
[各节内容]
创建功能区栏的实例
,当应用程序启动时,下面的步骤演示如何创建功能区栏的实例。若要添加功能区栏到应用程序中,声明在mainfrm.h文件的功能区栏。然后,在mainfrm.cpp文件,加载功能区资源的write代码。
创建功能区栏的实例
在mainfrm.h文件中,添加一个数据成员添加到 CMainFrame的受保护的部分,主框架的类定义。此成员表示功能区栏。
// Ribbon bar for the application CMFCRibbonBar m_wndRibbonBar;
在mainfrm.cpp文件,请在最终 return 语句之前添加以下代码。CMainFrame::OnCreate 函数的末尾。这将创建功能区栏的实例。
// Create the ribbon bar if (!m_wndRibbonBar.Create(this)) { return -1; //Failed to create ribbon bar } m_wndRibbonBar.LoadFromResource(IDR_RIBBON1);
[各节内容]
自定义功能区资源
您已经创建了应用程序按钮,可以向元素添加到功能区。
说明 |
---|
本演练提供所有面板中使用同一面板图标。但是,您可以使用其他图像列表索引显示其他图标。 |
添加一个home类别和编辑面板
scribble程序只需要一个类别。在"设计"视图中,单击显示其属性的 类别 。更改属性值如下所示:为 &Home,对 IDB_RIBBON_HOMELARGE,对 IDB_RIBBON_HOMESMALL的 小图像 的 大图像 的 标题 。
每个功能区类别进行组织到名为面板。每个面板包含执行相关操作的一组控件。此类具有一个面板。单击 面板,然后将 标题 到 编辑 和 *** 图像索引 *** 到 0。
为 编辑 面板中,向清除内容负责文档的按钮。此按钮的消息ID在IDR_SCRIBBTYPE菜单资源已经定义。指定 全部清除 为按钮文本和修饰按钮位图的索引。打开 工具箱,然后拖动 按钮 到 编辑 面板。单击按钮将更改 标题 到 全部清除,对 ID_EDIT_CLEAR_ALL,对 0,对 0的 *** 大图像索引 *** 的 *** 图像索引 *** 的 ID 。
保存更改,然后生成并运行应用程序。应显示scribble应用程序,并且,它应有功能区栏位于窗口的顶部而不是菜单栏。功能区栏应具有类别,主页,并且,主页 都应有一个面板,编辑。您添加的功能区按钮应与现有的事件处理程序和 打开、 关闭、 保存、 打印和 全部清除 按钮应按预期方式工作。
[各节内容]
设置应用程序的外观
可视 管理器 是全局对象控制应用程序的所有绘图。由于原始scribble应用程序使用Office 2000用户界面(UI)样式,应用程序可能看起来古板。可以重置应用程序使用Office 2007视觉管理器,以便它类似于Office 2007应用程序。
设置应用程序的外观
在 CMainFrame::OnCreate 功能,键入以下代码更改默认视觉管理器和样式。
// Set the default manager to Office 2007 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007)); CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
保存更改,然后生成并运行应用程序。应用程序UI应类似于Office 2007个UI。
[各节内容]
后续步骤
您修改1.0传统的scribble MFC示例使用功能区设计器。此时转到 第2部分。