计方面也有如下的区别。
o SDI 程序仅仅基于主框架窗口(CMainFrame ),而 MDI 程序同时基于主框架窗口
(
CMainFrame )和子框架窗口(CChildFrame )。
o 对于管理文档、框架和窗口的文档模板类,两种结构也有本质的差别。SDI 程序基于
的文档模板类是 CSingleDocTemplate,只能管理单个文档类型;而 MDI 程序基于的文
档模板类是 CMultiDocTemplate,能同时创建多种文档类型。
o 只能向 SDI 应用程序类中加入一种文档模板,而可以向 MDI 应用程序类中加入多个
CMultiDocTemplate 对象。
SDI 程序和 MDI 程序的文档视图结构都是由文档模板管理的,下面针对 MDI 应用程序
的情况介绍文档模板在编程的应用。
每个应用程序类(CWinApp 的派生类)中都保留并维护了一份所有文档模板的指针列表,
这是一个链表结构。应用程序为所要支持的每个文档类型动态分配一个 CMultiDocTemplate
对象,并在应用程序类的 CWinApp::InitInstance 成员函数中将每个 CMultiDocTemplate 对象
传递给 CWinApp::AddDocTemplate,该函数将一个文档模板加入到应用程序可用文档模板的
列表中。应用程序可以用 CWinApp::GetFirstDocTemplatePostion 获得应用程序注册的第一个
文档模板的位置,利用该值来调用 CWinApp::GetNextDocTemplate 函数,获得第一个
CDocTemplate 对象指针。
一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针
列表。应用程序可以用 CDocTemplate::GetFirstDocPosition 函数获得与文档模板相关的文档集
合中第一个文档的位置,并用 POSITION 值作为 CDocTemplate::GetNextDoc 的参数来重复遍
历与模板相关的文档列表。
在文档中可以调用 CDocument::GetDocTemplate 获得指向该文档模板的指针。一个文档
CDocument::AddView
可以有多个视图,每一个文档都保留并维护一个所有相关视图的列表。
将一个视图连接到文档上,将该视图加入到文档相联系的视图的列表中,并将视图的文档指
针 指 向 该 文 档 。 当 有 选 择 菜 单 命 令 “ File|New ” 、“File|Open ”、“Windows|New ” 或
“Window|Split ”菜单命令而将一个新创建的视图的对象连接到文档上时,MFC 会自动调用该
函数,框架通过文档视图结构将文档和视联系起来。当然,也可以根据特定需要手动调用该
函数。
技巧:使 MDI 启动时不建立一个新文件
使用 AppWizard 工具生成的 MDI 程序启动时会默认创建一个空白文件,这有时候会带来
麻烦(也许在程序启动时不允许创建新文件 )。为了使 MDI 启动时不建立一个新文件,需
要修改 InitInstance() 函数如下:
CmandLineInfo cmdInfo;
if (cmdInfo。m_nShellmand == CmandLineInfo::FileNew )
{
cmdInfo。m_nShellmand = CmandLineInfo::FileNothing;
}
ParsemandLine (cmdInfo );
·29 ·
…………………………………………………………Page 39……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
此时程序启动后显示如图 2…22 所示。
实例 2…4 :技巧演示实例。源代码在光盘中“02实例 2…4TestMDI ”目录下。
图 2…22 MDI 启动时不生成新文件示例
2。5 窗口类及其控件栏
框架窗口为应用程序界面提供结构框架,它是应用程序的主窗口,负责管理其包容的窗
MFC 提供了
口,一个应用程序的最顶层的框架窗口为应用程序启动时创建的第一个窗口。
CFrameWnd、CMDIFrameWnd、CMDIChildWnd 和 Cdialog 类,分别用于支持单文档窗口、
多文档窗口和对话框。同时,在基于文档视图的应用框架中也经常用到相关的控件栏,如工
具栏、状态栏等,这些也是应用程序不可缺少的部分。下面将对这些方面进行分别介绍。
2。5。1 主窗口类
主窗口类 CMainFrame 可以应用在 SDI 或 MDI 结构中。在 SDI 框架结构中,CMainFrame
派生于类 CFrameWnd,形成单个文档及其视图的边框。框架窗口既是应用程序的主框架窗口,
也 是 当 前 文 档 对 应 的 视 图 的 边 框 。 在 MDI 框 架 结 构 中 , CMainFrame 派 生 于 类
CMDIFrameWnd,它是所有 MDI 文档窗口的容器,并与它们共享菜单条,MDI 框架窗口是
出现在桌面中的顶层窗口。
窗口的创建分为两步:第一步是用 new 运算符创建一个窗口对象,但是此时只是初始化
窗口的数据成员,并没有真正创建窗口(这一点与一般的对象有所不同)。
//第一步:创建一个 C++对象,其中 CMainFrame 是从 CFrameWnd 派生的对象
CMainFrame* pMyFrame=new CMainFrame();//用 new 操作符创建窗口对象
·30 ·
…………………………………………………………Page 40……………………………………………………………
第 2 章 应用程序基本框架
或
CMainFrame MyFrame;//定义一个窗口对象,自动调用其构造函数
第二步是创建窗口。使 CFrameWnd 的 Create 成员函数创建窗口,并将其句柄保存在 C
公共数据成员 m_hWnd 中。
//第二步:创建窗口
pMyFrame…》Create(NULL;“My Frame Window”);
或
MyFrame。Create(NULL;“My Frame Window”);
2。5。2 子窗口类
子窗口类 CChildFrame 主要用在多文档(MDI )结构中,在单文档中只存在主窗口
(
CMainFrame ),不存在子窗口的概念。CChildFrame 派生于类 CMDIChildWnd,用于在 MDI
主框架窗口中显示打开的各个文档,每个文档及其视图都有一个 MDI 子框架窗口,子框架窗
口包含在MDI 主框架窗口中 。子框架窗口看起来类似一般的框架边框窗口,但它是包含在主
框架窗口中,而不是位于桌面上,并且被主窗口所裁剪。而且 MDI 子窗口没有自己的菜单,
它与主 MDI 框架窗口共享菜单 。框架自动更改 MDI 框架的菜单,用于代表当前活动的 MDI
子窗口。为了为应用创建有用的 MDI 子窗口,需要从 CMDIChildWnd 派生类,为派生类增
添成员变量,从而为应用存储指定的数据。实现消息处理的成员函数,并在派生类中实现消
息映射,以便于指出当消息传递给窗口后,将按照什么方式处理消息。
构造 MDI 子窗口主要有下面 3 种途径:
o 使用 Create()函数直接构造;
o 使用 LoadFrame()函数直接构造;
o 通过文档模板直接构造。
技巧:如何改变 MDI 窗口框架的颜色?
MDI 框架的客户区被另一个窗口的框架所覆盖,为了改变客户区的背景色,需要重画这个
客户窗口。为了做到这点
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 文学名著
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 魔法玄幻
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 魔法玄幻
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 都市言情
- 最新章:第28章