一 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.在向导生成的应用程序之上做一些例子
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.在向导生成的应用程序之上做一些例子