六.MFC架构程序单文档视图架构:单文档视图架构特点:
只能管理一个文档(只有一个文档类对象)
单文档视图架构使用:
文章插图
实现:
#include <afxwin.h>#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{public: 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;
执行过程:文章插图
文章插图
伪代码:
OnFileNew( )//函数内部this为&theApp{m_pDocManager->OnFileNew()//函数内部this为文档管理类对象地址{CDocTemplate* pTemplate = m_templateList.GetHead();//取出单文档模板类对象地址pTemplate->OpenDocumentFile()//函数内部this为单文档模板类对象地址{OpenDocumentFile(..)//函数内部this为单文档模板类对象地址{pDocument = CreateNewDocument()//函数内部this为单文档模板类对象地址{CDocument* pDocument = m_pDocClass->CreateObject();//动态创建文档类对象,并返回对象地址AddDocument(pDocument)//函数内部this为单文档模板类对象地址{m_pOnlyDoc = pDocument;}}pFrame = CreateNewFrame(pDocument..)//函数内部this为单文档模板类对象地址{CCreateContext context;...context.m_pCurrentDoc = pDocument;//文档类对象地址context.m_pNewViewClass = m_pViewClass;//RUNTIME_CLASS(CMyView)CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();//动态创建框架类对象,并返回对象地址pFrame->LoadFrame(...., &context);//创建框架窗口//后续过程看前一天的伪代码}}}}}
关于类向导的使用:类向导可以帮助我们在已有的框架创建基础上再进一步帮我们生成代码 。
选择: 位置 ->类向导
文章插图
再这个里面可以选择要添加的项目,添加到的文件,添加的内容,框架会帮我们生成规范化的内容,我们只需要实现具体细节 。
多文档视图架构:特点:
可以管理多个文档 (可以有多个文档类对象)
多文档视图架构使用:
文章插图
执行过程:
文章插图
文章插图
代码:
#include <afxwin.h>#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 CMyChild : public CMDIChildWnd{ DECLARE_DYNCREATE( CMyChild )};IMPLEMENT_DYNCREATE( CMyChild, CMDIChildWnd )class CMyFrameWnd : public CMDIFrameWnd{ //自己造主框架窗口类的对象};class CMyWinApp : public CWinApp{//自己造应用程序类的对象public: virtual BOOL InitInstance( );};BOOL CMyWinApp::InitInstance( ){ CMyFrameWnd* pFrame = new CMyFrameWnd; pFrame->LoadFrame( IDR_MENU1 ); m_pMainWnd = pFrame; pFrame->ShowWindow( SW_SHOW ); pFrame->UpdateWindow( ); CMultiDocTemplate* pTemplate = new CMultiDocTemplate( IDR_MENU2,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CMyChild),RUNTIME_CLASS(CMyView)); AddDocTemplate( pTemplate ); OnFileNew( );//创建文档类对象,创建子框架类对象,创建子框架窗口,创建视图类对象,创建视图窗口,文档类对象和视图类对象关联 OnFileNew( );//创建文档类对象,创建子框架类对象,创建子框架窗口,创建视图类对象,创建视图窗口,文档类对象和视图类对象关联 OnFileNew( );//创建文档类对象,创建子框架类对象,创建子框架窗口,创建视图类对象,创建视图窗口,文档类对象和视图类对象关联 return TRUE;}CMyWinApp theApp;
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 论文笔记 - SIMILAR: Submodular Information Measures Based Active Learning In Realistic Scenarios
- 上 学习ASP.NET Core Blazor编程系列十——路由
- JVM学习笔记——类加载和字节码技术篇
- shardingsphere-jdbc 水平分表学习记录
- 再推荐几个适合小孩子的英语学习网站
- Agda学习笔记1
- 萌新版 xss学习笔记
- 1 JAVA语言学习-面向对象
- MyBatis笔记03------XXXMapper.xml文件解析
- 一百二十 salesforce零基础学习快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧