MFC第七天

一 MFC文档类
1.1 创建过程
     MFC的对象和窗口是同一个概念?
     两个不是同一个概念。一个对象创建出来并不代表窗口就有了,只有调用了创建窗口函数,才有了窗口,m_hWnd才有了值。
  1.1.1调用Frame的LoadFrame函数,创建Frame窗口
  1.1.2在Frame的OnCreate函数中,创建视图对象和窗口
  1.1.3在View的OnCreate函数中,将视图的地址保存到文档中,文档成员变量m_viewList(视图指针的链表);将文档的地址保存到视图中,视图成员变量m_pDocument(文档类的指针)
     结论:一个文档可以对应多个视图,一个文档的数据可以被多个视图以不同的方式显示。一个视图只能对应一个文档。一个视图只能显示一个文档的数据。
  1.2 对象之间的关系
    CWinApp
        |->m_pMainWnd(CFrameWnd)
            |->m_pViewActive(CView)
                |->m_pDocument(CDocument)
                     |->m_viewList(CView)
    1.3命令消息的响应顺序
    View->Document->Frame->App
  
  
 二  单文档视图程序
      1.单文档视图程序
              在某一个时刻只能管理一个文档。
       2.相关类
          CWinApp/CFrameWnd/CView/CDocument
         2.2文档模板类
                CDocTemplate--父类是CCmdTarget,抽象类。分两种,
                      CSingleDocTemplate--单文档模板类
                      CMultiDocTemplate---多文档模板类
      2.3单文档视图程序的使用
            我们是用Win32程序改成MFC来写的,如果运行出来问题,可以改成在动态库下运行。这样便不会出现问题了。或者你可以先把以前生成的工程文件删除,然后再重新生成就没有问题了。
 ///
 // MFCBase.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "MFCBase.h"
#include "resource.h"
class CMyDoc:public CDocument{
DECLARE_DYNCREATE(CMyDoc)       //动态创建宏
};
IMPLEMENT_DYNCREATE(CMyDoc,CDocument);
class CMyView:public CEditView{
DECLARE_DYNCREATE(CMyView)      //动态创建 
};
IMPLEMENT_DYNCREATE(CMyView,CEditView)


class CMainFrame:public CFrameWnd{
DECLARE_DYNCREATE(CMainFrame)   //动态创建宏


};
IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd) //和运行时类信息仅一字之差


class CMyWinApp:public CWinApp{
public:
virtual BOOL InitInstance();
};
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance(){
    //创建单文档模板
    CSingleDocTemplate *pTempt=new CSingleDocTemplate(IDR_MENU1,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CMyView));
//添加到应用程序中
AddDocTemplate(pTempt);
//新建文档
OnFileNew();
//显示和更新框架窗口
m_pMainWnd->ShowWindow(SW_NORMAL);
m_pMainWnd->UpdateWindow();
return true;
}
 ///          
 (AddDocTemplate函数)把新创建的一个文档模板存到一个文档模板链表当中
  CWinApp
       |->CDocManager *m_pDocManager(文档模板管理类)
                |->m_templateList(文档模板指针的链表)
                       |->CSingleDocTemplate(单文档模板对象)
                             
  (OnFileNew函数的执行过程即单文档的执行过程)
  3.2.1   使用m_pDocManager获取文档模板
  3.2.2   使用文档模板的运行时类信息m_pDocClass->CreateObject();
             CRuntimeClass::CreateObject()//根据函数指针创建对象
             {
             pObject=(*m_pfnCreatObject)();
             }
             return new CMyDoc;//文档对象就被创建了
  3.2.3  使用文档模板的m_pFrameClass创建Frame对象和窗口
  3.2.4  在Frame的OnCreate函数中,创建视图对象和窗口
  3.2.5  在View的OnCreate函数中,文档与视图相互保存对方的地址
 ///
 多文档视图程序
 1  多文档视图应用程序
       同时可以管理多个文档
  2相关类
       CWinApp/CMDIFrameWnd/CMDIChildWnd/CView/CDocument
        CMultiDocTemplate
  3.使用
  4.创建过程
  4.1创建主框架窗口
  4.2OnFileView(与单文档的创建过程类似)
 
  1.运行时类信息->动态创建->文档视驾构程序
  2.在向导生成的应用程序之上做一些例子
       
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值