现在的位置: 首页 > 综合 > 正文

FrameWnd,View和Docment的手工创建

2013年04月02日 ⁄ 综合 ⁄ 共 914字 ⁄ 字号 评论关闭

以下为MDI下,FrameWnd,View和Docment的手工创建的过程,首先,框架在InitInstance中把主框架创建出来了,并把需要的文档模板用成员变量保存了起来,用户点击主框架中的新建菜单:

 1.修改消息映射表中对ID_FILE_NEW的响应为本类的OnFileNew(默认是父类的OnFileNew)

2.建立OnFileNew消息函数,下面的操作都在OnFileNew中进行

3.在成员变量中选择一个需要的文档模板对象,调用其CreateDocMent方法

5.设置建立好的Docment的标题

6.调用文档模板的CreateNewFrame方法

7.此后框架自动做如下操作:CreateNewFrame调用ChildFrame的Create,发送WM_CREATE方法,触发响应函数OnCreate,OnCreate调用OnCreateClient,OnCreateClient调用CreateView,把view和创建出来。

8.用创建出来的Frame调用InitialUpdateFrame,于是整个FrameWnd,View和Docment显示了出来。

附:

1.SDI也可以加入多个文档模板(CSingleDocTemplate),只是一次只有一份处于打开状态而已,每新建一个,会关闭上一个打开的文档已经存在的。

CSingleDocTemplate只维护一份文档:CDocment *m_pOnlyDoc

CMutiDocTemplate中需要维护多份文档:CPtrList m_docList

2.ChildFrame是由一个子窗口(clientframe)和包围子窗口的边框组成的,clientframe才是view的父窗口,

OnCreateClient中调用CreateView把视图创建了出来,可以重载它,来分割多视图。

3.所有CWnd在create时都通过钩子把窗口过程变成了AfxWindowProc,所有MFC共享一个窗口过程,在

AfxWindowProc中统一进行消息路由,调用各个窗口的WndProc,WndProc

  调用OnMsgCmd,其中一系列case语句在Message Map中调用匹配的消息处理函数

抱歉!评论已关闭.