Windows编程与MFC#4单⽂档应⽤程序(1)整理⾃VC++程序设计课程课件
使⽤VC++的应⽤程序向导MFC AppWizard可以开发:
Single document(单⽂档)
Multiple document(多⽂档)
Dialog bad(基于对话框)
单⽂档(Single Document Interface,SDI)应⽤程序是指程序运⾏后出现标准的Windows界⾯,并且同⼀时间只能打开⼀个⽂档的应⽤程序。
Windows界⾯由框架(包括菜单栏、⼯具栏、状态栏)和客户区组成。
【例1】利⽤MFC AppWizard[exe]向导⽣成⼀个SDI单⽂档应⽤程序。
【编程步骤】
(1)点菜单栏File->New->Project,弹出New Project对话框,我们可以选择⼯程类型。在Project name框中输⼊项⽬名称,本例为
天猫魔盒遥控器App15。
(2)设置完成后,单击OK按钮,出现MFC AppWizard-Step 1对话框。在该对话框中选择Single document项,向导将会创建⼀个单⽂档应⽤程序框架。
在本例中,以下的各个步骤使⽤向导提供的默认选项即可。
日本小说家
利⽤MFC AppWizard[exe]向导创建应⽤程序App15的框架后,⽤户⽆须添加任何代码,就可以对程序进⾏编译、连接,⽣成⼀个应⽤程序并且运⾏。运⾏结果如下图所⽰。
MFC应⽤程序框架实质上是⼀个标准的Windows应⽤程序,它具有标准的窗⼝、菜单栏和⼯具栏。
MFC AppWizard[exe]向导为⼀般的SDI应⽤程序⽣成了五个核⼼类,它们分别是:
应⽤程序类CApp15App
框架窗⼝类CMainFrame
⽂档类CApp15Doc
视图类CApp15View
⽂档模板类CSingleDocTemplate
⼀般应⽤程序框架中所有类的名字由MFC AppWizard[exe]向导根据⼀定的规则⾃动命名,但⽤户可以在向导的第6步改变类名和有关类的⽂件名。
除了框架窗⼝类CMainFrame和⽂档模板类CSingleDocTemplate,应⽤程序框架中类的命名⼀般遵照如下规则:
Class Name = C + ProjectName + ClassType
应⽤程序框架是⽣成⼀般的应⽤程序所必需的各种组件的集成,是类库的⼀种超集。应⽤程序框架可以调⽤成百上千个不同的类,但是核⼼类只有上述五个。
它们的MFC基类分别是:应⽤程序类CWinApp、框架窗⼝类CFrameWnd、⽂档类CDocument、视图类CView以及⽂档模板类CDocTemplate。
(1)应⽤程序类CApp15App
CApp15App类是MFC的CWinApp类的派⽣类。它的主要功能有:
应⽤程序的初始化
程序的启动
程序运⾏结束时的清理⼯作
应⽤程序对象theApp是⼀个唯⼀的全局变量,它的主要功能是通过调⽤WinMain()主函数启动程序的运⾏。
(2)框架窗⼝类CMainFrame
CMainFrame类是MFC的CFrameWnd类的派⽣类。它主要负责创建标题栏、菜单栏、⼯具栏和状态栏。对于不同的SDI应⽤程序,框架窗⼝类名均为CMainFrame。
CMainFrame类中声明了框架窗⼝中的菜单m_wndMenuBar、⼯具栏m_wndToolBar、状态栏m_wndStatusBar等成员变量和若⼲成员函数。
(3)⽂档类CApp15Doc
类CApp15Doc是MFC的CDocument类的派⽣类,它⽤于管理和维护数据,包括应⽤程序数据的保存和装载,即实现⽂档的序列化。
(4)视图类CApp15View
班级宣誓词
类CApp15View是MFC的CView类的派⽣类,它主要负责客户区⽂档数据的显⽰,以及如何进⾏⼈机交互。
(5)⽂档模板类CSingleDocTemplate
框架窗⼝对象、⽂档对象、视图对象如何联系在⼀起为⼀个应⽤程序服务呢?
⽂档、视图、框架类和所涉及的资源形成了⼀种固定的联系,这种固定的联系就称为⽂档模板。也就是说,⽂档模板描述了相对应每⼀种类型⽂档的视图和窗⼝的风格类型。
上述五个SDI应⽤程序核⼼类的MFC基类的类层次关系如图所⽰。
⽂档/视图结构
⼀般的应⽤开发都会涉及到数据处理。为了统⼀和简化数据处理,基于MFC的应⽤程序通常采⽤⽂档/视图结构。
在MFC⽂档/视图结构中,有关数据处理的⼯作可以分为数据的处理和数据的显⽰两个部分。
⽂档负责数据的处理、数据的维护以及数据的存储;
视图则负责数据的显⽰和数据的编辑,客户区消息的响应和处理等⼯作,即充当了⽂档与⽤户之间的交互界⾯。
⽂档(document)是MFC应⽤程序中所处理数据的集合,包括⽂本、图形、图像和表格等类型。
视图(view)是⽂档在应⽤程序窗⼝中的⼀个映像。视图就如⼀个观景器,⽤户通过视图看到⽂档,通过视图修改⽂档。
⼀个视图是⼀个没有边框的窗⼝,它位于主框架窗⼝中的客户区。视图是⽂档对外显⽰的窗⼝,但它并不能完全独⽴,它必须依存在⼀个框架窗⼝内。
⽂档、视图、框架类和所涉及的资源形成了⼀种固定的联系,这种固定的联系就称为⽂档模板。也就是说,⽂档模板描述了对应每⼀种类型⽂档的视图和窗⼝的风格类型。
当打开某种类型的⽂件时,应⽤程序必须确定哪⼀种⽂档模板⽤于解释这种⽂件。在初始化程序时,必须⾸先注册⽂档模板,以便程序利⽤这个模板来完成主框架窗⼝、视图、⽂档对象的创建和资源的装⼊。
BOOL CMyTextOutApp::InitInstance()
{
…
CSingleDocTemplate* pDocTemplate;//声明⽂档模板指针
替人垂泪到天明
pDocTemplate =new CSingleDocTemplate(//创建⽂档模板对象
IDR_MAINFRAME,//⽂档模板使⽤的资源ID
网红男神RUNTIME_CLASS(CApp15Doc),//创建⽂档对象
RUNTIME_CLASS(CMainFrame),// 创建主SDI框架窗⼝对象作为一名教师
RUNTIME_CLASS(CApp15View));//创建视图对象
AddDocTemplate(pDocTemplate);//将⽂档模板加⼊⽂档模板链表
…
}
在客户区显⽰⽂本
以【例1】的单⽂档应⽤程序App15为基础,添加代码实现⽂本输出。
程序运⾏后在视图窗⼝显⽰⽂本串“这是第⼀个单⽂档应⽤程序!”。
极的笔顺【编程步骤】
(1)本例需要在视图类的成员函数OnDraw()中添加显⽰⽂本的代码来实现屏幕输出。
30万韩币打开类视图窗⼝,找到CApp15View类,展开该类,双击其成员函数OnDraw(),在编辑窗⼝出现该成员函数代码,在指定位置⼿⼯添加如下代码。