【转】在可停靠窗格中使用对话框来实现可视化设计
2014-08-20 19:10
225 查看
转自:http://www.cnblogs.com/shuhaoc/archive/2011/06/26/cdockableform.html
摘要:本文将介绍如何在可停靠窗口(Dockable Pane)中使用对话框来来实现可视化设计,即将一个对话框(Dialog)作为子窗口填充在可停靠窗格之中,这样做的好处是使得可以通过Visual Studio的对话框资源编辑功能可视化地设计窗口,并轻松地实现控件的消息处理程序。
关键字:Dockable Pane, Dialog, 可视化设计
一、使用可停靠窗格开发用户界面
很多程序中都使用可停靠窗格作为用户界面中的重要组成部分,最熟悉的例子莫过于使用最多的Visual Studio。从VS2008 SP1和VS2010开始,新版的MFC框架中已经提供了一系列的类实现这样的功能,其中最值得关注的是CDockablePane类。
CDockablePane类代表了一个可停靠窗格,其用法可以通过阅读Visual Studio的“MFC应用程序向导”自动生成的源代码来习得。创建一个可停靠窗格的步骤大致分为五步:
(1) 定义一个类继承自CDockablePane以实现特定的功能。
(2) 在CMainFrame中定义上述类型成员变量。
(3) 在CMainFrame的OnCreate函数中调用CDockablePane的Create函数创建窗格。
(4) 调用CDockablePane的EnableDocking函数配置可停靠位置。
(5) 调用CMainFrame的DockPane函数停靠此窗格。
详情可参考Visual Studio生成的代码,此处不再赘述。
美中不足的是,Visual Studio并未提供对可停靠窗格进行可视化设计的支持。不过,如果需要,可以通过对话框的功能来间接实现。
二、设计思路
依照使用方便、代码可重用的设计原则,有以下几个方面需要考虑:
(1) 应当提供用户一个类来继承使用(CDockableForm),为了设计在对话框编辑视图中添加控件关联变量和事件处理程序,CDockableForm类应该是CDialog类的子类。
(2) 用户创建此类的对象时,CDockablePane类的对象也应该随之创建。该类提供一个Create函数,在该函数中应该同时完成可停靠窗格和对话框的创建过程。
(3) 对话框应该铺满可停靠窗格,并随可停靠窗格隐藏而隐藏、显示而显示。这需要将对话框设置为可停靠窗格的子窗口,并添加一个类(CDockablePaneAsContainer)继承自CDockablePane,在其WM_SIZE消息处理函数中调整对话框的位置。
(4) 在可停靠窗格销毁时,应该同时销毁对话框。可以可停靠窗格的WM_DESTROY消息处理函数中销毁对话框。
(5) CDockablePane类应该提供一个成员函数使得用户可以访问其CDockablePane成员,以实现其在主框架窗口(CMainFrame)中的停靠功能。
依上所述,设计的类如图所示。
图2-1 类图
CDockableForm类和CDockablePaneAsContainter类的实现代码见附录1-4。
使用方法分为四步:
(1) 创建、编辑对话框资源,添加对话框类,基类选择CDialog类。
(2) 在项目中添加DockableForm.h和DockableForm.cpp(见附录5),在对话框类的头文件中包含DockableForm.h,将对话框类的基类改为CDockableForm,将对话框类的头文件和源代码文件中所有CDialog替换为CDockableForm,同时也要修改一个对话框类的构造函数,因为CDockableForm类的构造函数与CDialog类的不一样。
(3) 在CMainFrame类中添加第二步生成的类的成员,在其OnCreate函数中调用该成员的Create函数创建可停靠窗格,调用GetDockablePane方法得到其可停靠窗格的引用以实现停靠功能。
使用示例见附录5。
附录
1. CDockableForm类的声明代码。
2. CDockableForm的实现代码。
3. CDockableForm类的声明代码。
4. CDockablePaneAsContainer的实现代码。
5. 示例代码下载地址: 下载地址
摘要:本文将介绍如何在可停靠窗口(Dockable Pane)中使用对话框来来实现可视化设计,即将一个对话框(Dialog)作为子窗口填充在可停靠窗格之中,这样做的好处是使得可以通过Visual Studio的对话框资源编辑功能可视化地设计窗口,并轻松地实现控件的消息处理程序。
关键字:Dockable Pane, Dialog, 可视化设计
一、使用可停靠窗格开发用户界面
很多程序中都使用可停靠窗格作为用户界面中的重要组成部分,最熟悉的例子莫过于使用最多的Visual Studio。从VS2008 SP1和VS2010开始,新版的MFC框架中已经提供了一系列的类实现这样的功能,其中最值得关注的是CDockablePane类。
CDockablePane类代表了一个可停靠窗格,其用法可以通过阅读Visual Studio的“MFC应用程序向导”自动生成的源代码来习得。创建一个可停靠窗格的步骤大致分为五步:
(1) 定义一个类继承自CDockablePane以实现特定的功能。
(2) 在CMainFrame中定义上述类型成员变量。
(3) 在CMainFrame的OnCreate函数中调用CDockablePane的Create函数创建窗格。
(4) 调用CDockablePane的EnableDocking函数配置可停靠位置。
(5) 调用CMainFrame的DockPane函数停靠此窗格。
详情可参考Visual Studio生成的代码,此处不再赘述。
美中不足的是,Visual Studio并未提供对可停靠窗格进行可视化设计的支持。不过,如果需要,可以通过对话框的功能来间接实现。
二、设计思路
依照使用方便、代码可重用的设计原则,有以下几个方面需要考虑:
(1) 应当提供用户一个类来继承使用(CDockableForm),为了设计在对话框编辑视图中添加控件关联变量和事件处理程序,CDockableForm类应该是CDialog类的子类。
(2) 用户创建此类的对象时,CDockablePane类的对象也应该随之创建。该类提供一个Create函数,在该函数中应该同时完成可停靠窗格和对话框的创建过程。
(3) 对话框应该铺满可停靠窗格,并随可停靠窗格隐藏而隐藏、显示而显示。这需要将对话框设置为可停靠窗格的子窗口,并添加一个类(CDockablePaneAsContainer)继承自CDockablePane,在其WM_SIZE消息处理函数中调整对话框的位置。
(4) 在可停靠窗格销毁时,应该同时销毁对话框。可以可停靠窗格的WM_DESTROY消息处理函数中销毁对话框。
(5) CDockablePane类应该提供一个成员函数使得用户可以访问其CDockablePane成员,以实现其在主框架窗口(CMainFrame)中的停靠功能。
依上所述,设计的类如图所示。
图2-1 类图
CDockableForm类和CDockablePaneAsContainter类的实现代码见附录1-4。
使用方法分为四步:
(1) 创建、编辑对话框资源,添加对话框类,基类选择CDialog类。
(2) 在项目中添加DockableForm.h和DockableForm.cpp(见附录5),在对话框类的头文件中包含DockableForm.h,将对话框类的基类改为CDockableForm,将对话框类的头文件和源代码文件中所有CDialog替换为CDockableForm,同时也要修改一个对话框类的构造函数,因为CDockableForm类的构造函数与CDialog类的不一样。
(3) 在CMainFrame类中添加第二步生成的类的成员,在其OnCreate函数中调用该成员的Create函数创建可停靠窗格,调用GetDockablePane方法得到其可停靠窗格的引用以实现停靠功能。
使用示例见附录5。
附录
1. CDockableForm类的声明代码。
相关文章推荐
- 在可停靠窗格中使用对话框来实现可视化设计
- VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
- 如何使用表名做为参数实现存储过程的设计
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- 设计模式应用之使用COMPOSITE模式实现流程(一)
- 如何不使用可视化设计来显示登陆窗体?
- 在VB中使用INI文件实现每日一贴对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- 设计模式应用之使用COMPOSITE模式实现流程(二)
- 设计模式应用之使用COMPOSITE模式实现流程(三)
- VisualFC使用 - DialogFont(对话框字体设计)
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- 如何不使用可视化设计来显示登陆窗体?
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- 如何使用CTabCtrl来实现多页面属性对话框?
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框