六、MFC文档类(单文档和多文档)

一、单文档视图架构程序

1、单文档视图架构使用

(1)参与架构的类

        CFrameWnd / CWinApp / CView / CDocument

(2)使用到的类

        CDocTemplate(文档模板类)

                CSingleDocTemplate(单文档模板类)

        CDocManager(文档管理类)

(3)参与架构的四个类,除了应用程序类,其余单个类均支持动态创建机制

2、创建项目

(1)创建项目(MFCSdi)

(2)编写程序

#include 
#include "resource.h"

class CMyDoc:public CDocument
{
	DECLARE_DYNCREATE(CMyDoc)
};
IMPLEMENT_DYNCREATE(CMyDoc, CDocument)


class CMyView:public CView
{
	DECLARE_DYNCREATE(CMyView)
public:
	virtual void OnDraw(CDC* pDC);
};
IMPLEMENT_DYNCREATE(CMyView, CView)

void CMyView::OnDraw(CDC* pDC)
{
	pDC->TextOut(100, 100, "视图窗口");
}

class CMyFrameWnd:public CFrameWnd
{
	DECLARE_DYNCREATE(CMyFrameWnd)
};
IMPLEMENT_DYNCREATE(CMyFrameWnd, CFrameWnd)




class CMyWinApp:public CWinApp
{
	virtual BOOL InitInstance();
};

BOOL CMyWinApp::InitInstance()
{
	CSingleDocTemplate* pTemplate = new CSingleDocTemplate(IDR_MENU1,
											RUNTIME_CLASS(CMyDoc),
											RUNTIME_CLASS(CMyFrameWnd),
											RUNTIME_CLASS(CMyView));
	AddDocTemplate(pTemplate);
	OnFileNew();
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}

CMyWinApp theApp;

(3)创建资源(.rc文件)与菜单

(4)创建字符串资源,创建(AFX_IDS_UNTITLED),否则程序无法运行

六、MFC文档类(单文档和多文档)_第1张图片

 六、MFC文档类(单文档和多文档)_第2张图片

3、执行过程

//单文档模板类构造
CSignleDocTemplate* pTmplate
    m_pOnlyDoc    //唯一的文档类对象地址
    m_pDocClass      // RUNTIME_CLASS(CMyDoc)
    m_pFrameClass    // RUNTIME_CLASS(CMyFrameWnd)
    m_pViewClass     // RUNTIME_CLASS(CMyView)

//AddDocTemplate(pTmplate)
theApp
    m_pDocManager=new CDocManager    //文档管理类
        m_templateList.AddTail(pTmplate)    //模板列表,保存单文档模板类

//OnFileNew()
OnFileNew()
{
    m_pDocManager->OnFileNew()    //文档管理类
    {
        CDocTemplate* pTemplate = m_templateList.GetHead();//取出单文档模板类对象地址
    pTemplate->OpenDocumentFile()//函数内部this为单文档模板类对象地址
    {
      OpenDocumentFile(..)//函数内部this为单文档模板类对象地址
      {
        pDocument = CreateNewDocument()//函数内部this为单文档模板类对象地址
        {
          CDocument* pDocument = m_pDocClass->CreateObject();
                               //动态创建文档类对象,并返回对象地址
          AddDocument(pDocument)//函数内部this为单

你可能感兴趣的:(Windows-MFC,mfc)