深入MFC设计

更新时间:2023-12-13 20:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第八章 Document-View深入探讨

实现思路:

这个很重要的说:

Document――MVC结构中的M 什么是Document,它有什么用呢??

这里的Document其实就是资料。

在MFC中的Document

CDocument可以接受的消息

注意,从这里可以看出,凡是继承自CCmdTarget的类都可以接收来自菜单或工具栏的WM_COMMAND消息。但是它并不继承自CWnd类,因此没有办法接收窗口消息!! 在MFC里CDocument类的作用是

中的第一,第五条

View――MVC结构中的V 什么是view,它有什么用??

View负责描述和显示Document中的资料。

在MFC中的View

CView可以接受的消息

Document Frame(View Frame)

Frame的作用:针对不同的View或Document提供接口。

Document Template――MVC架构中的C

CDocTemplate管理CDocument/CView/CFrameWnd

注意这里,

这里的LoadFrame函数的最后一个参数是一个CCreateContext类对象,它的一些成员变量:

这里的第一个成员变量代表了View类,其实它还只是一个CRuntimeClass类的指针。第二个参数代表了CDocTemplate类,即CMultiDocTemplate类对象。

第五步 View类的产生,在CFrameWnd类的OnCreate函数里开始创建View类对象

上面动态产生了Frame和Document, 下面是View的产生:

File/New与File/Open消息的总结

MFC中的Collections Classes

不同的Collections Classes,有不同的特性,我们应该根据不同的情况来进行选用,选用的一些原则如下:

MFC中的Collection Classes有三类,选用原则如下:

Template-Based Classes

MFC的collection classes里头有一些是template-based,对于类型检验的功夫做得比较好, MFC中的Template-Based Classes有下面两类:

使用方法:

注意:需要包含afxtempl.h!!

Scribble Step1的View:资料重绘与编辑

具体实现:

View的重绘动作:GetDocument和OnDraw

View与使用者的交谈(鼠标消息处理实例)

可以利用ClassWizard的辅佐加CScribbleView的三个成员函数OnLButtonDown,OnLButtonUp,OnMouseMove 可以利用WizardBar的辅佐代替ClassWizard来修改Message Map。

Serialize:对象的文件读写

储存和恢复对象的过程在MFC中就称为serialization。负责这件重要任务的,是MFC CObject类别中的一个名为Serialize的虚拟函数,文件的“读”,“写”动作均透过它。

Serialization以外的文件读写动作:

台面上的Serialize动作

台面下的Serialize写档奥秘

对照着前面的倾印吗,我们进行下面的探索。

让我们从使用者按下“Save As”菜单项目开始,追踪程序的进行。

“Save As”――》消息映射表――》CDocument::OnFileSaveAs――》 CDocument ::DoSave――》

AfxGetApp()->DoPromptFileName(newname…) OnSaveDocument(newname) ――》CDocument::OnSaveDocument――》CArchive saveArchive(pFile, CArchive::store | ..) Serialize(saveArchive) ――》CScribbleDoc::Serialize(CArchive &ar)

本文来源:https://www.bwwdw.com/article/lpe5.html

Top