深入浅出MFC学习笔记(第7章:简单而完整的MFC骨干程序)

来源:互联网 发布:做微信小视频的软件 编辑:程序博客网 时间:2024/05/12 16:15

                            第七章简单而完整的MFC骨干程序。

    这一章主要是剖析有AppWizard产生的完整的MFC骨干程序。

    首先要熟记MFC类层次结构,这是理解MFC构建的前提。

    MFC层次结构图:文档视图结构是MFC进化为应用程序框架的灵魂,在MFCCDocument负责处理数据,它只是个空壳,我们可以重写Serialze函数,派生符合我们需求的类。与CDocument相辅相成的是CView类,它是负责数据得显示的类,同时它还负责程序与使用者之间的交互。使用者对数据的修改都需要依赖CView类的响应。

    有关文件读写的操作是由CDocument中的Serilize虚函数负责的。有关显示的操作是在CView中的OnDraw虚函数中处理的。当我们派生自己的两个类CMyDocCMyView,只要把所有精力花在CMyDoc::SerializeCMyView::OnDraw身上就可以了。

    先介绍Document Template,在文档视图结构中,虽然CView负责显示,但是它的外围必须有一个外框窗口作为舞台。也可以说Document TemplateView窗口的一个容器,数据,数据的显示,以及容纳数据显示的窗口,它们是一体的。缺一不可。

程序每打开一个文件就应该产生三个对象:

1CDocument对象。

2CView对象。

3:外框窗口CMDIChildWnd对象。

这些对象是由Document Template对象进行管理

如:CMultiDocTemplate *pDocTemplate=new CMultiDocTemplate (   IDR_SCRIBTYPE,

   RUNTIME_CLASS(CMyDoc),

   RUNTIME_CLASS(CChildFrame),

   RUNTIME_CLASS(CMyView)

);

  AddDocTemplate(pDocTemplate);

    如果程序支持不同的文件格式,就需要不同的CMultiDocTemplate 。它的第一个参数,表示此文件类型所使用的资源,如ICONMENU和字符串资源。字符串资源用以完整描述文件类型。这可以在程序中获得,通过调用CDocTemplate::GetDocString

    RUNTIME_CLASS是一个宏,返回传递来的类中的CRuntimeClass静态对象。因此,每当使用者打开一份文件,Document template就能根据此创建三个对象,打开并显示相应文件。

因此在CMyWinAppInitInstance中首先new了一个CMultiDocTemplate 对象,它用于管理DocumentviewFrame窗口。

LoadFrame用于产生主窗口并加载菜单,同时制定窗口标题、文件标题、扩展名等。LoadFrame内部将调用Create,后者将调用CreateWindowEx,触发WM_CREATE消息。

   一份Document可以映射给多个View显示,使用者对Document的任何操作都必须通过Document Frame窗口,消息随后传到CView

  构建主窗口有两个步骤,首先new一个CMDIFrameWnd对象,然后调用其LoadFrame函数,在此函数内会调用Create函数

原创粉丝点击