1)单文档界面(SDI)
2)多文档界面(MDI)
3)基于对话框的应用程序
SDI的应用程序只有一个窗口,比如记事本,MDI的应用程序每次可以读写多个文件或文档,可同时对多个文档进行 *** 作,可以有多个子窗口,比如word。使用appwizard创建单文档和多文档界面的应用程序的过程几乎是一样的。
两者的区别在于:
1)在创建SDI界面的应用程序时,不生成CChildFrame类,CMainFrame类的基类为CFrameWnd。
2)在创建MDI界面的应用程序时,CMainFrame类的基类为CMDIFrameWnd。
由于每个文档可以有多个视图,但每个视图只能对应于一个确定的文档。视图是文档的不同的表现形式,比如,一个*.html语言的文件,在浏览器里和在记事本里打开的表现形式是不同的,但它们 *** 作的是同一个文档,这就是一个文档对应两个视图。
多文档程序需要解决的问题仅仅是多个文档的数据管理方法的问题。
多文档程序,最初的文档模板只支持主窗口,但每次打开一个新文档时都调用CDocument的函数OnNewDocument,建立一个由CMDIChildWnd派生的新的MDI子窗口,这些窗口中保存着各种已经打开的文档,所有的细节都由MFC库处理。
2.文档视图结构
在文档/视图结构中,文档对数据进行管理和维护,数据保存在文档类的成员变量中。
文档类通过串行化的过程将数据保存到磁盘文件或者数据库,文档类还可以处理来自菜单、工具栏按钮和快捷键的WM_COMMAND消息,除WM_COMMAND消息外,文档不能处理其它的的windows消息。
由此看出命令消息可以被多种对象处理,这些对象除窗口和视图外,还可以是文档、文档模板或者是应用程序本身,这点与Windows消息和控件通知消息不同,因为Windows消息和控件通知消息只能被窗口和视图处理。
视图在文档和用户之间起中介作用,它可以接受用户的输入并接受用户的修改。修改是通过调用文档和视图的接口将修改的信息反馈给文档类,实际的数据更新仍然是由文档来完成的。
视图可以直接或者间接的访问文档类中的成员变量,它从文档类中而不是从存储介质中将文档中的数据读出来,然后在屏幕上显示文档的数据。
3.文档视图结构的工作机制
视图通过GetDocument成员函数获得指向相关联的文档对象的指针。通过该指针调用文档类的成员函数来从文档中读取数据。视图把数据显示拆燃在计算机屏幕上,用户通过与视图的交互来查看数据并对数据进行修改。视图通过相关联的文档类的成员函数将正御兆经过举租修改的数据传递给文档对象。文档对象获得修改过后的数据后,对其进行必要的修改,最后保存到永久介质中,比如磁盘。
4.文档类
CDocument父类是CCmdTarget,CCmdTarget的父类是CObject。
CDocument的一般方法
GetTitle() 获得文档的标题
SetTitle() 设置文档的标题
GetPathName() 获得文档数据文件的路径字符串
GetPathName() 设置文档数据文件的路径字符串
GetDocTemplate() 获得指向描述文档类型的文档模板的指针
AddView() 对与文档相关联的视图列表添加指定的视图
RemoveView() 从文档视图列表中删除视图
UpdateAllViews() 通知所有视图,文档已经被修改,它们应该被重画
DisconnectViews() 使文档与视图分离
GetFile() 获得指向CFile类型的指针
CDocument的虚拟方法
OnNewDocument() 由MFC调用来建立文档
OnOpenDocument() 由MFC调用来打开文档
OnSaveDocument() 由MFC调用来保存文档
OnCloseDocument() 由MFC调用来关闭文档
CanCloseFrame() 确认观察文档的观察窗口是否被允许关闭
DeleteContents() 在为撤销文档对象时删除文档数据
ReleaseFile() 释放文件已允许其它应用程序使用
SaveModified() 查询文档的修改状态并存储修改的文档
Ismodified() 确认文档从它最后一次存储后是否被修改过
SetModifiedFlag() 设置文档从它最后一次储存后是否被修订过的布尔值
GetFirstViewPosition() 获得视图表头的位置
GetNextView() 获得视图列表的下一个视图
CDocument类的派生类构造的基本步骤,一般来说,从CDocument类派生自己的文档类所需的典型步骤为:
1)为每一个文档类从CDocument类(当然也可以是其它CDocument类的派生类)派生一个相应的文档类。
2)为文档类添加成员变量,这些成员变量用来保存文档的数据,其它对象(如与文档相关联的视图)直接或间接的访问这些成员变量来读取或更新文档的数据。
3)重载Serialize成员函数,实现文档类型的串行化。
1、选中要添加变量的文本框,然后在工具栏中选择“型游属性编辑器”。2、在属性编辑器中,选择“世毕文本”选项卡,找到“文本内容”属性,并在其中输入或编辑想要添加变量的文本内容。
3、在文本内容中需要添加变量的位置,用双大括号“{{}}”将变量名括起来,例如:“我的姓名是{{name}}”。
4、然后,在同一属性编辑器中,选择“变量”选项卡。
5、在“变量”选项卡中,点击“添加”按钮,输入变量名和变量值。例如,变量名为“name”,变量值为“张三”。
6、在文本框中,变量会显示为“{{name}}”。
7、最后,在程序中,在设置变量搜租芹的代码中,将变量值设置为需要的值即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)