最新单文档与多文档PPT课件.ppt
《最新单文档与多文档PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新单文档与多文档PPT课件.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、211.1 概述概述 911.1.4 SDI程序的消息传递过程程序的消息传递过程 当用户选择了菜单项,当用户选择了菜单项,单击了快捷键或工具条单击了快捷键或工具条按钮,系统就会发送按钮,系统就会发送WM_COMMAND消息。框消息。框架窗口实际上是大多数架窗口实际上是大多数WM_COMMAND消息的接消息的接受者,但受者,但WM_COMMAND消息还可以在视图、文消息还可以在视图、文档,甚至应用程序类中档,甚至应用程序类中被处理。被处理。1011.2 Doc/View框架的主要成员框架的主要成员 Doc/View框架虽然可以调用成百上千个不框架虽然可以调用成百上千个不同的类,但是核心类只有五个
2、同的类,但是核心类只有五个: :CWinAppCDocumentCViewCDocTemplateCFrameWnd 1111.2.1 CWinApp 类类 CWinApp类代表主程序,类代表主程序,CWinApp本身是不可见的,本身是不可见的,它负责维护进程的启动、终止、消息循环、命令行参数、它负责维护进程的启动、终止、消息循环、命令行参数、资源管理资源管理 成员成员描述描述m_pszAppNamem_pszAppName应用程序名应用程序名M_lpCmdLineM_lpCmdLine命令行参数命令行参数M_pMainWndM_pMainWnd应用程序主窗口指针应用程序主窗口指针M_pszE
3、xeNameM_pszExeName可执行文件名可执行文件名M_pszProfileNameM_pszProfileName配置配置INIINI文件名文件名M_pszRegistrKeyM_pszRegistrKey配置注册表主键值配置注册表主键值LoadCursorLoadCursor加载光标资源加载光标资源LoadIconLoadIcon加载图标资源加载图标资源部分部分主要主要成员成员1211.2.2 CDocument类类 CDocument 的一般方法 方法方法 说明说明 GetTitle(GetTitle() ) 获得文档标题获得文档标题 SetTitle(SetTitle() )
4、设置文档标题设置文档标题 GetPathName()GetPathName() 获得文档数据文件的路径字符串获得文档数据文件的路径字符串 SetPathName()SetPathName() 设置文档数据文件的路径字符串设置文档数据文件的路径字符串 GetDocTemplate()GetDocTemplate() 获得指向描述文档类型的文档模板的指针获得指向描述文档类型的文档模板的指针 AddView()AddView() 对与文档相关联的视图列表添加指定的视图对与文档相关联的视图列表添加指定的视图 RemoveView()RemoveView() 从文档视图列表中删除视图从文档视图列表中删除
5、视图 UpdateAllViews()UpdateAllViews() 通知所有视图,文档己被通知所有视图,文档己被修改,应重画修改,应重画 DisconnectViews()DisconnectViews() 使文档与视图相分离使文档与视图相分离 GetFile()GetFile() 获得指向获得指向 CFileCFile 类型的指针类型的指针 13CDocument 的的虚虚拟拟方方法法方方法法说说明明O On nN Ne ew wD Do oc cu um me en nt t( () )由由 M MF FC C 调调用用来来建建立立文文档档O On nO Op pe en nD Do
6、oc cu um me en nt t( () )由由 M MF FC C 调调用用来来打打开开文文档档O On nS Sa av ve eD Do oc cu um me en nt t( () )由由 M MF FC C 调调用用来来保保存存文文档档O On nC Cl lo os se eD Do oc cu um me en nt t( () )由由 M MF FC C 调调用用来来关关闭闭文文档档C Ca an nC Cl lo os se eF Fr ra am me e( () )确确定定观观察察文文档档的的框框架架窗窗口口是是否否被被允允许许关关闭闭D De el le et
7、te eC Co on nt te en nt ts s( () )在在未未撤撤消消文文档档对对象象时时删删除除文文档档数数据据R Re el le ea as se eF Fi il le e( () )释释放放文文件件以以允允许许其其它它应应用用程程序序使使用用S Sa av ve eM Mo od di if fi ie ed d( () )查查询询文文档档的的修修改改状状态态并并存存储储修修改改的的文文档档I Is sM Mo od di if fi ie ed d( () )确确定定文文档档从从它它最最后后一一次次存存储储后后是是否否被被修修订订过过S Se et tM Mo od
8、di if fi ie ed dF Fl la ag g( () )设设置置文文档档从从它它最最后后一一次次存存储储后后是是否否被被修修订订过过的的布布尔尔值值G Ge et tF Fi ir rs st tV Vi ie ew wP Po os si it ti io on n( () )获获得得视视图图列列表表头头的的位位置置G Ge et tN Ne ex xt tV Vi ie ew w( () )获获得得视视图图列列表表的的下下一一个个视视图图最常用的是最常用的是SetModifiedFlag()和和UpdateAllViews()。文档内容被修改。文档内容被修改后,一般要调用后,一
9、般要调用SetModifiedFlag()来设定一个标志。来设定一个标志。UpdateAllView()刷新所有和文档关联的视图。实际上该函数调用各个视图类的刷新所有和文档关联的视图。实际上该函数调用各个视图类的OnUpdate()函数。这样做可以保证各个视图之间的同步。函数。这样做可以保证各个视图之间的同步。14 用户可通过函数用户可通过函数GetFirstViewPosition()和和GetNextView()得到和文得到和文档关联的视图的指针,代码如下:档关联的视图的指针,代码如下:POSITION pos = GetFirstViewPosition(); /得到视图列表头的位置得到
10、视图列表头的位置While(pos != NULL) CView *pView = GetNextView(pos);/获得视图列表中的视图指针获得视图列表中的视图指针CDocument类在现在流行的类在现在流行的MVC(Modal、View、Control)设计模)设计模式中相当于其中的式中相当于其中的Modal,表示抽象数据模型。,表示抽象数据模型。文档最主要的功能如下:文档最主要的功能如下:l 打开保存文档打开保存文档l 维护文档相关的视图列表维护文档相关的视图列表l 维护文档修改标志维护文档修改标志l 通过电子邮件发送文档通过电子邮件发送文档 用户修改文档数据时,调用用户修改文档数据时
11、,调用SetModifiedFlag方法来标志数据被更方法来标志数据被更改过。当程序关闭该文档关联的最后一个视图的时候,文档会自改过。当程序关闭该文档关联的最后一个视图的时候,文档会自动提示你保存修改。动提示你保存修改。 15从从CDocument类派生新的文档类的一般过程如下:类派生新的文档类的一般过程如下:为每一个文档类型从为每一个文档类型从CDocument类派生一个相应的文档类。类派生一个相应的文档类。为文档类添加成员变量,这些变量主要用来保存文档的数据,为文档类添加成员变量,这些变量主要用来保存文档的数据,并使其它的对象并使其它的对象(如视图对象如视图对象)可以访问这些成员变量,从而
12、实可以访问这些成员变量,从而实现文档和视图的相互搭配使用。现文档和视图的相互搭配使用。重载重载Serialize成员函数,实现文档数据的串行化。成员函数,实现文档数据的串行化。 无论是保存文档或是打开文档,应用程序都是通过无论是保存文档或是打开文档,应用程序都是通过调用文档类的调用文档类的Serialize串行化成员函数来完成操作的。串行化成员函数来完成操作的。因此,在大多数情况下,我们都需要重载因此,在大多数情况下,我们都需要重载Serialize成员成员函数。函数。Serialize成员函数带有一个成员函数带有一个CArchive类型的参数,类型的参数,这是一个与所打开的文件相关联的对象。
13、一般情况下,这是一个与所打开的文件相关联的对象。一般情况下,总是使用总是使用CArchive对象来保存和打开文档。对象来保存和打开文档。 16 CArchive对象是单向的,只用于保存或对象是单向的,只用于保存或读取两者之一,不能通过同一个读取两者之一,不能通过同一个CArchive对象既保存又读取文档。对象既保存又读取文档。 在框架创建在框架创建CArchive对象时,已根据用对象时,已根据用户选择的是户选择的是 “保存保存” ( “另存为另存为” )还是还是 “打开打开” 来设置了来设置了CArchive对象的类型,对象的类型,我们可以使用我们可以使用CArchive类的成员函数类的成员函
14、数IsStoring来检索当前来检索当前CArchive对象的类型,对象的类型,从而得知用户所期望的操作是保存还是从而得知用户所期望的操作是保存还是读取,执行不同的操作。读取,执行不同的操作。 1711.2.3 CView类类 视图类视图类(CView)是从是从CWnd类下派生的类下派生的 视图类具有视图类具有CWnd的所有功的所有功能如:创建、移动、显示和能如:创建、移动、显示和隐藏窗口等。隐藏窗口等。CView类可以类可以接收任何接收任何Windows消息,而消息,而CDocument类则不行类则不行 IsSelected():确定文档是否被选中确定文档是否被选中OnScroll():当用
15、户滚动时,当用户滚动时,CView的响应的响应OnInitialUpdate():在类第一次构造后由在类第一次构造后由MFC调用调用OnDraw():由由MFC调用发出文档到设备描述表调用发出文档到设备描述表OnUpdate():由由MFC调用对文档的修改进行响应调用对文档的修改进行响应OnPrepareDC():在调用在调用OnDraw()前允许修改设备描述表由前允许修改设备描述表由MFC调用调用CView主要主要虚拟方法虚拟方法 18 CView类中最常用的是类中最常用的是OnDraw函数,该函数函数,该函数在屏幕发生变化或因为焦点的变化需要重绘在屏幕发生变化或因为焦点的变化需要重绘时调用
16、,没有该函数,就不可能在程序的切时调用,没有该函数,就不可能在程序的切换后保证屏幕的正确显示。换后保证屏幕的正确显示。 注意注意: 尽量不要在尽量不要在OnDraw之外的函数调用绘之外的函数调用绘图方法,那些方法不会在视图需要重新绘制图方法,那些方法不会在视图需要重新绘制的时候被自动调用。的时候被自动调用。 若想在数据更新的时强制视图更新,可调用若想在数据更新的时强制视图更新,可调用Invalidate方法和方法和UpdateWindow方法来实现。方法来实现。 19CEditView:简单的文本编辑器,类似:简单的文本编辑器,类似NotepadCListView:基于列表的视图,类似文件夹浏
17、览:基于列表的视图,类似文件夹浏览CTreeView:基于树状控件的视图,类似文件浏览左侧的树状结构:基于树状控件的视图,类似文件浏览左侧的树状结构CRichEditView:支持多种字体、:支持多种字体、OLE和和RTF格式的高级编辑器格式的高级编辑器CScrollView:支持滚动条的视图:支持滚动条的视图CFormView:窗体视图,支持在上边使用对话框控件:窗体视图,支持在上边使用对话框控件CRecordView:连接到:连接到ODBC数据库的视图数据库的视图CDaoRecordView:连接到:连接到DAO数据库的视图数据库的视图CView的子类的子类2011.2.4 CDocTem
18、plate类类 文档模板类在应用程序中有着非常重要的文档模板类在应用程序中有着非常重要的作用,是它将原本独立的文档、视图和框作用,是它将原本独立的文档、视图和框架窗口对象联系在一起架窗口对象联系在一起 文档模板类负文档模板类负责具体的关联责具体的关联文档、视图、文档、视图、框架的创建框架的创建 21 在在VC+中,文档对象、与文档对象相关联的视图对象中,文档对象、与文档对象相关联的视图对象以及为视图对象提供显示的框架窗口都是由文档模板创以及为视图对象提供显示的框架窗口都是由文档模板创建的。建的。 每一种文档类型都有一种文档模板与之相对应,文档模每一种文档类型都有一种文档模板与之相对应,文档模板
19、负责创建和管理该文档类型的所有文档。板负责创建和管理该文档类型的所有文档。文档模板的构造函数的原型如下:文档模板的构造函数的原型如下:CDocTemplate(UINT nIDResource, /与文档一同使用的各种资源的资源标识符与文档一同使用的各种资源的资源标识符CRuntimeClass* pDocClass,/ 指向文档派生文档类的对象的指针指向文档派生文档类的对象的指针CRuntimeClass* pFrameClass, /框架类的派生框架类的对象指针框架类的派生框架类的对象指针CRuntimeClass* pViewClass /指向指向CView的派生视图类的对象指针的派生视
20、图类的对象指针 ) 在在SDISDI应用程序中只有一个文档模板对象,应用程序中只有一个文档模板对象,而而MDIMDI应用程序需要针对不同类型的文档定应用程序需要针对不同类型的文档定义不同的文档模板对象。义不同的文档模板对象。22当前位置当前位置被访问的位置被访问的位置访问方法访问方法文档文档视图视图GetFirstViewPositionGetNextView文档文档模板模板GetDocTemplate视图视图文档文档GetDocument视图视图框架框架GetParentFrame框架框架视图视图GetActiveView框架框架文档文档GetActiveDocumentMDI主框架主框架
21、MDI子框架子框架MDIGetActiveMDI子框架子框架 MDI主框架主框架GetParentFrame任何位置任何位置应用程序应用程序AfxGetApp任何位置任何位置主框架主框架AfxGetMainWndDoc/View结构的五个基本成员经结构的五个基本成员经常需要互相访问,假设某个视图常需要互相访问,假设某个视图想要获得文档,或某个框架需要想要获得文档,或某个框架需要获得活动视图,可以通过此表提获得活动视图,可以通过此表提供的方法进行解决供的方法进行解决 2311.2.5 CFrameWnd类类 CFrameWnd类在类在Doc/View结构中起着结构中起着举足轻重的作用。举足轻重的
22、作用。 框架窗口维护了很多幕后的工作,框架窗口维护了很多幕后的工作,例如工具条、菜单、状态条的显示、更例如工具条、菜单、状态条的显示、更新,视图的位置和显示,其它可停靠空新,视图的位置和显示,其它可停靠空间的停靠和动态尺寸调整。许多默认为间的停靠和动态尺寸调整。许多默认为MFC应用程序应该具备的基本功能都是应用程序应该具备的基本功能都是CframeWnd类在完成类在完成 2411.3文档操作中的一些重要概念文档操作中的一些重要概念 串行化处理串行化处理文档文档操作操作文档的消息映射文档的消息映射文档消息传递文档消息传递文件打开文件打开文件保存文件保存2511.3.1 串行化处理串行化处理 串行
23、化:串行化:将对象写入字节流和从字节流恢复对将对象写入字节流和从字节流恢复对象的操作象的操作 串行化除了可以使用文件保存对象之外,串行化除了可以使用文件保存对象之外,还可以通过网络、串口传输对象,还可以通过网络、串口传输对象,因此使因此使用字节流用字节流。串行化代码如下:。串行化代码如下:void CMDIDoc:Serialize(CArchive& ar) if (ar.IsStoring() / TODO: add storing code here else / TODO: add loading code here 26 使用串行化的好处是不需要重载文件打使用串行化的好处是不需要重载
24、文件打开、文件保存之类的方法,开、文件保存之类的方法,MFC框架会自动完框架会自动完成这些任务,并自动调用文档类的成这些任务,并自动调用文档类的Serialize方方法来完成串行化过程。法来完成串行化过程。 如果文档的抽象数据只有一个字符串,如果文档的抽象数据只有一个字符串,那么你只需要在那么你只需要在Serialize中添加相应语句就可中添加相应语句就可以完成串行化过程。以完成串行化过程。 如果不使用如果不使用MFC提供的串行化框架,那么提供的串行化框架,那么就需要重载一些函数,来获取文件名,然后就需要重载一些函数,来获取文件名,然后自己来读写文件完成对象的串行化。自己来读写文件完成对象的串
25、行化。27在进行串行化处在进行串行化处理时,通常是通理时,通常是通过过CArchive(档案档案)类来完成的类来完成的成员成员描述描述WriteString写入字符串写入字符串ReadString读取字符串读取字符串ReadClass读取类信息读取类信息WriteClass写入类信息写入类信息Close关闭档案关闭档案GetObjectSchema读取对象版本号读取对象版本号SetObjectSchema设置对象版本号设置对象版本号M_pDocument使用该档案的文档使用该档案的文档Read读取字节内容读取字节内容Write写入字节内容写入字节内容GetFile获取底层的获取底层的CFile
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 文档 PPT 课件
限制150内