MFC文档类CDocument
来源:互联网 发布:艾儿长靴淘宝店铺 编辑:程序博客网 时间:2024/04/30 18:55
概述
一个最基本的文档视图框架程序组成部分:View(显示数据);Document(管理数据)父类是CCmdTarget,提供文档数据的管理;Frame(作为容器)提供各种业务支持。
文档的使用创建过程:
1.调用Frame的LoadFrame()函数,创建Frame窗口
2.在Frame的WM_CREATE消息中,创建View对象以及窗口
3.在View的WM_CREATE消息中,将Document的地址保存到View中,将View的地址保存到Document中
关系:CWinApp->m_pMainWnd(CFrameWnd)->m_pViewActive(CView)->m_pDocument(CDocument)->m_viewList(CView的List)
命令消息:1.添加消息映射 2.处理顺序CFrameWnd::OnCmdMsg View->Document->Frame->App
实例
// MFCDoc.cpp : 定义应用程序的类行为。 #include "stdafx.h" #include "Resource.h" class CMyData:public CCmdTarget{DECLARE_MESSAGE_MAP()protected: afx_msg void OnTest();};BEGIN_MESSAGE_MAP(CMyData,CCmdTarget)ON_COMMAND(ID_TEST,OnTest)END_MESSAGE_MAP() void CMyData::OnTest() { AfxMessageBox(L"CMyData::OnTest"); } class CMyDoc:public CDocument { public: CMyDoc(); virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); CString mStrData; CMyData mMyData; DECLARE_MESSAGE_MAP() protected: afx_msg void OnTest(); };BEGIN_MESSAGE_MAP(CMyDoc,CDocument)ON_COMMAND(ID_TEST,OnTest)END_MESSAGE_MAP()CMyDoc::CMyDoc(){mStrData="Hello CDocment";}BOOL CMyDoc::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){if (mMyData.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo)){return TRUE;}return CDocument::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);}void CMyDoc::OnTest(){AfxMessageBox(L"CMyDoc::OnTest");}class CDocView:public CEditView{DECLARE_DYNCREATE(CDocView)DECLARE_MESSAGE_MAP()public:virtual void OnInitialUpdate();protected: afx_msg void OnTest();};BEGIN_MESSAGE_MAP(CDocView,CEditView)ON_COMMAND(ID_TEST,OnTest)END_MESSAGE_MAP()IMPLEMENT_DYNCREATE(CDocView,CEditView)void CDocView::OnInitialUpdate(){//获取文档CMyDoc* pDoc=(CMyDoc*)GetDocument();SetWindowText(pDoc->mStrData);}void CDocView::OnTest(){AfxMessageBox(L"CDocView::OnTest");}class CMainFrame:public CFrameWnd{DECLARE_MESSAGE_MAP()public: afx_msg void OnTest();};BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_COMMAND(ID_TEST,OnTest)END_MESSAGE_MAP()void CMainFrame::OnTest(){AfxMessageBox(L"CMainFrame::OnTest");}class MFCDocApp:public CWinApp{public:virtual BOOL InitInstance();};BOOL MFCDocApp::InitInstance(){CMainFrame* pFrame=new CMainFrame;CCreateContext cxt;cxt.m_pNewViewClass=RUNTIME_CLASS(CDocView);cxt.m_pCurrentDoc=new CMyDoc;pFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW,NULL,&cxt);pFrame->InitialUpdateFrame(NULL,TRUE); m_pMainWnd=pFrame;m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;}MFCDocApp theApp;
运行结果:
单文档视图程序
单文档视图程序:同时只能管理一个文档;CWinApp/CFrameWnd/CView/CDocument;CSingleDocTemplate-单文档;
#include "stdafx.h"#include "Resource.h"class CSdiDoc:public CDocument{DECLARE_DYNCREATE(CSdiDoc)};IMPLEMENT_DYNCREATE(CSdiDoc,CDocument)class CSdiView:public CEditView{DECLARE_DYNCREATE(CSdiView)};IMPLEMENT_DYNCREATE(CSdiView,CEditView)class CMainFrame:public CFrameWnd{DECLARE_DYNCREATE(CMainFrame)};IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)class CSdiApp:public CWinApp{public:virtual BOOL InitInstance();};BOOL CSdiApp::InitInstance(){//创建文档模板CSingleDocTemplate * pTemplate=new CSingleDocTemplate(IDR_MAINFRM,RUNTIME_CLASS(CSdiDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CSdiView)); //将模板添加到应用程序中AddDocTemplate(pTemplate);//创建新文档OnFileNew();//显示并更新主框架窗口m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;}CSdiApp theApp;
关闭时:
- MFC文档类CDocument
- [MFC]CDocument文档类简介
- CDocument文档类
- CDocument文档类
- CDocument文档类
- MFC单文档工程的使用小结(CDocument, CView, CMainFrame)
- MFC中有三种文件操作的类 CFile ,CArchive,CDocument
- CDocument类的使用
- CDocument
- CDocument
- CDocument
- 对MFC中CDocument::UpdateAllViews的理解
- 手写MFC---- 第二节 IMPLEMENT_DYNCREATE (mydoc,CDocument)
- 对MFC中CDocument::UpdateAllViews的理解
- 文档类CDocument子框架类CFrameWnd及视图类CView的关系及相互调用
- MFC CDocument子类中的Serialize(CArchive& ar)方法,在打开文档时调用一次之后,再点击“打开”菜不被调用,解决。
- 文档类CDocument,子框架类CFrameWnd及视图类CView的关系及怎样相互调用
- 文档类CDocument、子框架类CFrameWnd及视图类CView的关系及如何相互调用
- GDB调试
- Spring中的Quartz配置 Spring 定时器 java定时器
- url 中文
- XML面试题
- osg性能数据的收集流程
- MFC文档类CDocument
- 供应商信息导入
- 配置Xcode版本控制SVN详细步骤
- Jquery的$命名冲突:
- Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- /lib64/libc.so.6: version `GLIBC_2.7' not found (required by rar)
- Ruby Syntax
- 在CHtmlView中判断页面加载完成
- HBase性能调优