MFC单文档多视图分割

MFC单文档多视图分割
MFC单文档多视图分割

MFC视图分割有两种方法,一种动态分割,一种静态分割。但是动态分割中,对于单文档只能对应于同一个类窗口,这里不适用所以不做过多研究,重点看静态分割的方法。

MFC中封装了CSplitterWnd类可用于视图的分割。

首先在CMainFrame类中添加CSplitterWnd的对象,然后重写CMainFrame 类的OnCreateClient函数,在该函数中进行视图的分割。

在OnCreateCinent函数中,先定义CRect rect,调用函数Getclient(&rect)用来获取主视图窗格的大小,然后调用CSplitterWnd的成员函数CreateStatic 函数来对视图进行分割,函数原型如下,

BOOL CreateStatic(

CWnd* pParentWnd, //父框架视图对象

int nRows, //行数

int nCols, //列数

DWORD dwStyle = WS_CHILD | WS_VISIBLE, //风格,可直接用默认

UINT nID = AFX_IDW_PANE_FIRST //此窗口的子窗口ID。如果这个分隔器窗口不是嵌套在另一个分隔器窗口中的,则这个ID可以是AFX_IDW_PANE_FIRSH。);

父框架视图对象为this表示第一次分割,这时只需定义要分割的行数和列数即可。如果已经产生了第一次分割,需要对子窗口进行再分割,则这时候pParentWnd为第一次用于分割的CSplitterWnd的对象指针,再新定义CSplitterWnd对象用于第二次分割,这时nID是要被分割的窗口ID,

m_wndSplitter1.IdFromRowCol(1, 0)。

在分割完窗口后,对分割完成的视图创建窗格,此时调用CSplitterWnd的CreateView函数,函数原型如下,

virtual BOOL CreateView(

int row, //要被创建的视图行

int col, //要被创建的视图列

CRuntimeClass* pViewClass, // RUNTIME_CLASS(窗格的类名)

SIZE sizeInit, //指定窗格的大小CSize(rect.Width()/3,

rect.Height()/2)

CCreateContext* pContext //pContext

);

窗格的类要事先定义完成。至此视图分割完成。但有时候大小不是我们想要的,这时后可以响应WM_SIZE消息的函数OnSize来实时改变窗格的大小,如下图所

示。

同时,我们也可以让视图的框架根据屏幕的分辨率自动最大化显示,响应CMainFrame的OnGetMinMaxInfo函数,如下图,同时在PreCreateWindow函数中初

始化cs.cx=0,cs.cy=0。

vc 6.0打造单文档界面与多文档界面的编程

vc++6.0打造单文档界面与多文档界面的编程 VC++6中,可以利用MFC向导分别创建单文档和多文档界面的应用程序。有了这两种类型的应用程序,您就可以实现简单的记事本,写字本和WORD的功能了。 以下介绍一个在文档中输出一段文字,点击菜单项,输入文字内容按OK按钮后可以更改输出的文字。 1.首先,点击MFC向导,选择多文档视图类型,新建一个名为MdiDemo的工程。 2.新建一个对话框。上面放置一个Static控件和一个Edit控件,按CTRL+W,将Edit控件改成m_Caption. 3.新建一个类与对话框对应,如CDlgDemo类。 4.在菜单中,增加一项Demo,并增加菜单项Test.按 CTRL+W,并双击后,在消息的上面选择Doc,下面选择Command,双击就产生了对应的事件处理函数。 5.在MdiDemoDoc.cpp类中输入以下: // DlgDemo.cpp : implementation file // #include "stdafx.h" #include "MdiDemo.h" #include "DlgDemo.h" #ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDlgDemo dialog CDlgDemo::CDlgDemo(CWnd* pParent /*=NULL*/) : CDialog(CDlgDemo::IDD, pParent) { //{{AFX_DATA_INIT(CDlgDemo) m_Caption = _T(""); //}}AFX_DATA_INIT } void CDlgDemo::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgDemo) DDX_Text(pDX, IDC_EDIT1, m_Caption); //}}AFX_DATA_MAP }

单文档和多文档窗口使用方法解析

单文档和多文档窗口使用方法解析 一.实验目的 掌握利用开发平台创建单文档和多文档窗口方法 掌握在窗口中输出文字、图形的方法及 MFC 中相关类的使用 二.实验要求 1 创建一个单文档窗口,在文档类定义一个整型变量,其取值范围从 0 ~ 1000 循环,在视图的中间显示该数字,当用户点击窗口的不同区域时,变量值按不同的增量增加并显示。 提示:在修改数据后,使用 Invalidate() 函数引起 MFC 对 OnDraw() 的调用,这样就可以用修改后的数据进行画图了。关于对文档类的访问,见本实验的技术支持。 2 创建一个单文档窗口,鼠标在窗口上单击后在鼠标的位置显示一正方形,点击 20 次后清窗口,新的点击将不再增加新的正方形,而是将已输入的正方形在原位置显示,当然,在每20 单击后要重新清窗口。(要求用 MFC 的通用类保存单击的信息,如 CList 类) 知识点:画线 当单击鼠标左键时,就可以获得一个点,即线条的起点。接着按住鼠标左键并拖动一段距离后松开鼠标,此时也可以获得一个点,即线条的终点。也就是说,我们需要捕获两个消息,一个是鼠标左键按下消息(WM_LBUTTONDOWN),在该消息响应函数中可以获得将要绘制的线条的起点;另一个是鼠标左键弹起来的消息(WM_LBUTTONUP),在该消息响应函数中可以获得将要绘制的线条的终点。有了这两个点就可以绘制出一条线。 利用SDK全局函数实现画线功能 为了进行绘图操作,必须获得一个设备描述表(DC),因此,首先定义一个HDC类型的变量:hdc,接着调用全局函数GetDC获得当前窗口的设备描述表。因为CWnd类有一个成员变量(m_hWnd),而CView类派生于CWnd类,因此该类也有这样的一个成员变用于保存窗口句柄,而GetDC函数可以直接把这个成员变量作为参数来使用。 利用MFC的CDC类实现画线功能 该类提供一个数据成员m_hDC类用来保存与CDC相关的DC句柄。其道理与CWnd 类提供成员变量m_hWnd保存与窗口相关的窗口句柄是一样的。 CDC* pDC = GetDC(); pDC->MoveTo(m_ptOriginal); pDC->LineTo(point); ReleaseDC(pDC);

MFC多文档多视图编程

深入了解MFC中的文挡/视结构 李泽宇金刚熊联欢姜军 (华中理工大学图象识别与人工智能研究所) Visual C++ 5.0 以其功能强大、用户界面友好而倍受程序员们的青睐。但是,在当前的Microsoft 基本类库4.2 版本中,大约有将近200 个类,数千个函数,加之Microsoft 公司隐藏了一些技术细节,使得人们深入学习MFC变得十分困难。 MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用、单文档应用(SDI)和多文档应用(MDI)。前两者的结构较简单,本文不再赘叙。笔者拟从MFC中的文档/视结构入手,分析一些函数的流程,并解决编制MDI 应用程序过程中的一些常见问题。 (一)、了解文档/视结构 MFC应用程序模型历经多年以有了相当大的发展。有一个时期,它只是个使用应用程序对象和主窗口对象的简单模型。在这个模型中,应用程序的数据作为成员变量保持在框架窗口类中,在框架窗口的客户区中,该数据被提交显示器。随着MFC2。0的问世,一种应用程序结构的新方式----MFC文档/视结构出现了。在这种结构中,CFrameWnd繁重的任务被委派给几个不同类,实现了数据存储和显示的分离。一般情况下,采用文档/视结构的应用程序至少应由以下对象组成: 。应用程序是一个CwinApp派生对象,它充当全部应用程序的容器。应用程序沿消息映射网络分配消息给它的所有子程序。 。框架窗口是一CfrmeWnd派生对象。 。文档是一个CDocument派生对象,它存储应用程序的数据,并把这些信息提供给应用程序的其余部分。 。视窗是Cview派生对象,它与其父框架窗口用户区对齐。视窗接受用户对应用程序的输入并显示相关联的文档数据。 通常,应用程序数据存在于简单模型中的框架窗口中。在文档/视方式中,该数据移入称为document 的独立数据对象。当然,文档不一定是文字,文档是可以表现应用程序使用的数据集的抽象术语。而用户输入处理及图形输出功能从框架窗口转向视图。单独的视窗完全遮蔽框架窗口的客户区,这意味着即使程序员直接绘画至框架窗口的客户区,视图仍遮蔽绘画,在屏幕上不出现任何信息。所以输出必须通过视图。框架窗口仅仅是个视图容器。 CDocument类对文档的建立及归档提供支持并提供应用程序用于控制其数据的接口。MDI应用程序可以处理多个类型的文档,每个类型的文档拥有一个相关联的文档模板对象。文档对象驻留在场景后面,提供由视图对象显示的信息。文档至少有一个相关联的视图。视图只能与一个文档相关联。 在文档/视方式中,对象的建立是由文档模板来管理的,它是CDocTemplate派生对象,建立并维护框架窗口,文档及视。 MFC调用命令处理程序以响应发生在应用程序中的事件。命令发送的优先级是: 活动的视图->框架窗口->文档->应用程序->默认窗口过程(DefWindowsProc) 总之,在文档/视方式中,文档和视是分离的,即:文档用于保存数据,而视是用来显示这些数据。文档模板维护它们之间的关西。这种文档/视结构在开发大型软件项目时特别有用。

MFC单文档多视图分割

MFC视图分割有两种方法,一种动态分割,一种静态分割。但是动态分割中,对于单文档只能对应于同一个类窗口,这里不适用所以不做过多研究,重点看静态分割的方法。 MFC中封装了CSplitterWnd类可用于视图的分割。 首先在CMainFrame类中添加CSplitterWnd的对象,然后重写CMainFrame 类的OnCreateClient函数,在该函数中进行视图的分割。 在OnCreateCinent函数中,先定义CRect rect,调用函数Getclient(&rect)用来获取主视图窗格的大小,然后调用CSplitterWnd的成员函数CreateStatic 函数来对视图进行分割,函数原型如下, BOOL CreateStatic( CWnd* pParentWnd, //父框架视图对象 int nRows, //行数 int nCols, //列数 DWORD dwStyle = WS_CHILD | WS_VISIBLE, //风格,可直接用默认 UINT nID = AFX_IDW_PANE_FIRST //此窗口的子窗口ID。如果这个分隔器窗口不是嵌套在另一个分隔器窗口中的,则这个ID可以是AFX_IDW_PANE_FIRSH。); 父框架视图对象为this表示第一次分割,这时只需定义要分割的行数和列数即可。如果已经产生了第一次分割,需要对子窗口进行再分割,则这时候pParentWnd为第一次用于分割的CSplitterWnd的对象指针,再新定义CSplitterWnd对象用于第二次分割,这时nID是要被分割的窗口ID, m_wndSplitter1.IdFromRowCol(1, 0)。 在分割完窗口后,对分割完成的视图创建窗格,此时调用CSplitterWnd的CreateView函数,函数原型如下, virtual BOOL CreateView( int row, //要被创建的视图行 int col, //要被创建的视图列 CRuntimeClass* pViewClass, // RUNTIME_CLASS(窗格的类名) SIZE sizeInit, //指定窗格的大小CSize(rect.Width()/3, rect.Height()/2) CCreateContext* pContext //pContext );

单文档多视图

相信这就是vc的弊病吧!项目作了很久发现应该用多视图,可是刚开始建立工程的时 候考虑不周阿,没办法,只能从网上搜了,竟搜到了一个不错的函数可以解决这个问题:void CMainFrame::SwitchToView(int nForm) { //CDocument* pDoc = GetActiveDocument(); CView *pOldActiveView=GetActiveView(); //保存旧视图 CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图 if(pNewActiveView==NULL) { switch(nForm) //这些ID是对话框的标志符,但也可以用其他的标志 { case IDD_PLANT_VIEW : pNewActiveView=(CView*)new CPlantView; break; case IDD_HSUB_VIEW : pNewActiveView=(CView*)new CHSubView; break; } CCreateContext context; //将文挡和视图相连 context.m_pCurrentDoc=pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,WS_BORDER|WS_CHILD,CFrameWnd::rectDefault,this,nForm, &context); pNewActiveView->OnInitialUpdate(); } SetActiveView(pNewActiveView); //改变活动的视图 pNewActiveView->ShowWindow(SW_SHOWMAXIMIZED); //显示新的视图 pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图 pNewActiveView->GetDocument()-SetTitle(\"。。。。\"); if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CHSubView)) pOldActiveView->SetDlgCtrlID(IDD_HSUB_VIEW); else if(pOldActiveView-GetRuntimeClass() ==RUNTIME_CLASS(CPlantView)) pOldActiveView-SetDlgCtrlID(IDD_PLANT_VIEW); pNewActiveView-SetDlgCtrlID(AFX_IDW_PANE_FIRST); delete pOldActiveView; //删除旧视图 RecalcLayout(); //调整框架窗口 }; 这个函数很好用大家可以参考一下。其中IDD_HSUB_VIEW 等都是新建立的FormView,也就是继承了CFormView类的新类。注意将各个新类中的构造函数改成public,才能用此函数不出错。 由于最近做的一个程序用到了单文档多视图切换,所以把它总结一下。内容如下:

基于单文档的(MFC)窗口分割

基于单文档的窗口分割 简介部分是对于MFC应用程序的介绍,在博客上看到的,觉得受益匪浅,所以写到这里。不需要的朋友可以从第二部分程序设计开始看起。

目录 基于单文档的窗口分割 (1) 简介 (3) MFC应用程序类型简介 (3) 单文档与多视图 (5) 单文档多视图程序设计 (6) Step1:创建单文档的MFC程序 (6) Step2:声明相关的变量。 (6) Step3:重载OnCreateClient()函数,进行窗口的分割 (7) Step4:设置行列初始值 (9) 附:代码 (10)

简介 MFC应用程序类型简介 在Microsoft VC++ 6.0中,基于MFC的应用程序一般分为以下几种: 多文档界面(MDI) 单文档界面(SDI) 基于对话框的应用程序。 图1-1 应用程序类型 其中单文档又可分为单视图的和多视图的。

图1-2 单文档单视图 图1-3 单文档多视图 一般情况下,单文档仅需要单视图就够了,如Windows自带的记事本、画图程序等等,但

在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度观察同一文档等。 在MFC的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了增加视图(AddView)与删除视图(RemoveView)函数,以及当文档内容改变时通知其所有视图的方法(UpdateAllViews)。 1-4 类视图 通过多文档框架的窗口复制机制和单文档框架的分割窗口机制是实现单文档多视图的主要方法。单文档与多视图 一般地,单文档与多视图有三种情况: 1)在多文档界面MDI中,每个视图位于MDI的一个独立子文档框架中,视图对象基于同一个视图类。用户可以通过“窗口|新窗口”菜单,为同一文档的视图再创建一个窗口,通过新创建的窗口,可以编辑和观察文档的另一部分,同一文档各个视图之间自动实现同步,用户修改一个视图的内容,在另外的视图中也自动更新。 MFC框架通过复制原来的子框架窗口和其中的视图来实现上面的功能,并且是完全自动的。 2)视图对象基于同一视图类,所有视图位于同一文档框架中。 分割窗口将单文档窗口的视图区分割成几个独立的视图,框架从同一视图类创建多个视图对象。Word的子窗口即属于这种类型。 3)视图对象基于不同的视图类,所有的视图位于同一文档框架中。 多个视图共享同一文档框架,但从不同的视图类创建,每个视图可以为文档提供不同的观察和编辑方法。比如在一个窗口里观察文档的不同部分,或者是在一个窗口里用不用类型的视图观察同一个文档。这种类型的实现方法是通过重载框架类CMainFrame的成员函数OnCreateClient实现,用户可以根据不同需要将窗口分为垂直或水平的多个分割窗口。

使用VC++实现单文档多视图的一种方法

使用VC++实现单文档多视的程序框架 91550部队指控中心池晓春赵鹤群 摘要:本文分析了在对同一数据源使用多种形式显示的情况下,采用单文档多视的程序框架开发显示软件的原因,介绍了单文档多视框架(SDMV)的实现方法,并在Windows 2000环境下,使用Visual C++ 6.0创建开发单文档多视框架的示例程序。 关键词:单文档多视(SDMV)视图切换 1选择SDMV程序框架的原因 程序员使用Visual C++ 6.0开发软件时,为了缩短开发时间和工作量,通常借助AppWizard生成基于MFC的SDI或MDI应用程序框架。但是要实现对同一数据源使用多种形式显示的功能,使用SDI或MDI的框架进行软件开发都有各自的缺陷,不能较好的满足软件需求,这是因为: 使用SDI框架的应用程序具有单一文档和单一视图,即程序运行时只能够生成一个文档类对象和一个视图类对象,虽然满足使用同一数据的要求,但是由于只有一个视图窗口,无法实现以多种形式显示试验数据。 使用MDI框架的应用程序具有多窗口的特点,可以使用多个子窗口来实现对不同数据源的浏览,但它的视图和文档一一对应,即视图+文档构成一个子窗口。由于各个子窗口之间数据相互独立,如果要保持数据同步更新就需要采用特殊的技术,所以对于用户在程序各个窗口之间对同一数据源进行不同形式的浏览,用这种方式实现起来既费时又费力。 由于SDI和MDI这两种Windows标准应用程序框架不能满足软件开发的需要,就特别需要一种被称为“单文档多视”的应用程序框架。顾名思义,该框架用单一的文档类来统一管理应用程序的所有数据,同时用多个视图以多种显示形式(如:表格、曲线、趋势图)等来显示这些数据。程序在任何时刻都可以用同一个窗口,通过切换视图的方法以不同的形式显示同一数据。可以看出,使用SDMV程序框架开发数据显示软件,就能够更好的满足用户的需求。 2SDMV程序框架的实现方法 SDMV程序框架的本质是文档-视图结构,它针对同一数据源使用不同的形式在多个视图中显示。如果数据发生改变,所有和数据相关的视图中的显示内容也会随之改变来反映数据的变化。针对这种特点,可以考虑通过改造SDI框架来实现SDMV框架,借助VC ++提供的AppWizard生成SDI应用程序框架,可以在很大程度上减少工作量,

单文档视图结构的ActiveX控件

单文档/视图结构的ActiveX控件 单文档/视图模式是MFC编程里比较强大的一种编程模式,如果ActiveX控件能够用这种模式的话,将可以做出非常强大的Web在线应用。 下面我们就介绍一种把单文档/视图模式的程序改造成ActiveX控件的方法。 做起来很难,但是完成了会很有成就感,本方法来源于15Seconds。在VC6.0和https://www.360docs.net/doc/3b9698235.html,下都已证明可行。我用这个方法做了一个Web上的在线服装设计软件,Client 端支持NT4.0,客户公司有上千台NT4.0。据美国同事说在投标中击败了Altium公司(电路设计软件Protel的开发商)的方案,哈。 需要要两个文件: 1.ActivDoc.cpp // ActivDoc.cpp : implementation file // #include "stdafx.h" #include "ActivDoc.h" CActiveXDocTemplate::CActiveXDocTemplate(CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass) : CSingleDocTemplate(IDR_NOTUSED, pDocClass, pFrameClass, pViewClass) { ASSERT(pFrameClass); } CFrameWnd* CActiveXDocTemplate::CreateDocViewFrame(CWnd* pParen tWnd) { CWaitCursor cursor; TRY { ASSERT(pParentWnd && IsWindow(*pParentWnd)); ASSERT_KINDOF(CActiveXDocControl, pParentWnd); m_pParentWnd = pParentWnd; m_pFrameWnd = NULL; // OpenDocumentFile is a virtual method (implemented in

VC项目开发之单文档多视图实现

多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。2)通过一个文档关联多个视图,窗口显示整个视图。第二种实现较第一种复杂,这里给出详细的实现方法。 Step 1:使用VC 6.0新建一个Project,命名为:MultiView。除选择单文档属性外,一切使用“默认”方式。于是你可以获得五个类:CMainFrame,CMultiViewApp,CMultiViewDoc,CMultiViewView,和CAboutDlg; Step 2:新建一个新的视图View,添加一个新的MFC Class(Insert->New Class),基类为CView(或者CView的派生子类,如CEditView等)。类的名字为CAnotherView,这就是新的视图;并为CAnotherView添加GetDocument的实现: CMultiViewDoc* CAnotherView::GetDocument() { return (CMultiViewDoc*)m_pDocument; } Step 3:在CMultiViewApp添加成员变量记录这两个视图: private: CView* m_pFirstView; CView* m_pAnotherView; 给程序菜单IDR_MAINFRAME添加一个菜单项目“视图”,该菜单项有两个子菜单“视图一”和“视图二”,添加相应函数(void CMultiViewApp::OnShowFirstview()和 void CMultiViewApp::OnShowSecondview()); Step 4:创建新的视图:在BOOL CMultiViewApp::InitInstance()中添加代码: ……. //创建一个新的视图 CView* m_pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); m_pFirstView = m_pActiveView;

MFC单文档实现多视图

一.介绍: 多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式: 1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。 2)通过一个文档关联多个视图,窗口显示整个视图。第二种实现较第一种复杂,这里给出详细的实现方法。 二.实现步骤: Step 1:使用VC 6.0新建一个Project,命名为:MultiView。除选择单文档属性外,一切使用“默认”方式。于是你可以获得五个类:CMainFrame ,CMultiViewApp,CMultiViewDoc,CMultiViewView,和CAboutDlg; Step 2:新建一个新的视图View,添加一个新的MFC Class(Insert->New Class),基类为CView(或者CView的派生子类,如CEditView等)。类的名字为CAnotherView,这就是新的视图;并为CAnotherView添加GetDocument 的实现: CMultiViewDoc* CAnotherView::GetDocument() { return (CMultiViewDoc*)m_pDocument; } Step 3:在CMultiViewApp添加成员变量记录这两个视图: private: CView* m_pFirstView; CView* m_pAnotherView; 给程序菜单IDR_MAINFRAME添加一个菜单项目“视图”,该菜单项有两个子菜单“视图一”和“视图二”,添加相应函数:voidCMultiViewApp:: OnShowFirstview()和void CMultiViewApp:: OnShowSecondview() Step 4:创建新的视图:在BOOL CMultiViewApp::InitInstance()中添加代码:

第10讲 单文档与多文档

第11章单文档与多文档本章主要介绍Visual C++中的文档/视图结构的工作机制

11.1 概述

11.1.1单文档界面与多文档界面 VC的MFC库支持三种不同的应用程序单文档界面(SDI) 多文档界面(MDI) 基于对话框的应用程序 SDI的应用程序 只有一个窗口 MDI的应用程序每次 可以读写多个文件或 文档,可同时对多个 文档进行操作,可以 有多个子窗口 主 要 差 别 在创建SDI界面的应用程序时,不生成 CChildFrame类,CMainFrame类的基类 为CFrameWnd 在创建MDI界面的应用程序时, CMainFrame类的基类为 使用AppWizard创建SDI和MDI界面的应用程序的过程几乎完全一样

视图是文档的不同表现形式,一个*.html 语言的文件,在浏览器里和在记事本中打 开的表现形式是不同的但它们操作的是同 一个文件这就是一个文档对应两视图 由于每一个文档可以有多个视图,但 每个视图只能对应于一个确定的文档 多文档程序需要解决的问题仅仅是多 个文档的数据管理方法的问题 多文档程序,最初的文档模板只支持主窗口,但每次打开一个新文档时都调用CDocument的函数OnNewDocument,建立一个由CMDIChildWnd派生的新的MDI子窗口,这些窗口

11.1.2 文档/视图结构在文档/视图结构中 对数据进行管理和维 护,数据保存在文档 类的成员变量中文档类通过串行化 的过程将数据保存 到磁盘文件或数据库中 文档类还可处理来自如菜单、工具栏按钮和加 速键的WM_COMMAND 消息 除WM_COMMAND 外,文档不能处理其它的Windows 消息 由此我们可以看出,命令消息可以被多种对象处理,这些对象除了窗口和视图外,还可以是文档、文档模板或应用程序本身这一点与Windows 消息和控件通知消息不同,因为Windows 消息和控通过调用文档和视图的接口将修 在文档和用户之 间起中介作用视图可以直接或间接 的访问文档类中的成 员变量,它从文档类 中(而不是从存储介质 中)将文档中的数据取 出来,然后在屏幕上 它可以接收用户的输入,并接受用户的修改

相关文档
最新文档