单文档与多视的实现方法

单文档与多视的实现方法

ID:19338466

大小:32.50 KB

页数:7页

时间:2018-10-01

单文档与多视的实现方法_第1页
单文档与多视的实现方法_第2页
单文档与多视的实现方法_第3页
单文档与多视的实现方法_第4页
单文档与多视的实现方法_第5页
资源描述:

《单文档与多视的实现方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单文档与多视的实现方法一、单文档与多视  Windows程序一般分为以下几种风格:多文档、单文档、基于对话框的。Word一类多文档程序和计算器一类基于对话框的程序不在本文介绍之列。单文档又分为单视的和多视的。一般情况下,单文档仅需要单视就够了,如画笔等。但也有一些情况下,单文档需要多视支持,比如同时观察文档的不同部分,同时从不同的角度观察同一文档等。  在MFC的框架下,文档对象(CDocument)维持了一个保存其所有视的列表,并提供了增加与删除视的函数,以及当文档内容改变时通知其所有视的方法。通过多文档框架的窗口复制机制和单文档框架的分割窗口

2、机制是实现单文档多视的主要方法。但这些标准方法在有的情况下并不够用,为此笔者摸索出另外两种实用的方法,在实践中使用效果良好。  二、三种标准的单文档与多视情况  1.视对象基于同一视类,每个视位于MDI的一个独立子文档框架中。  用户可以通过“窗口新窗口”菜单,为同一文档的视再创建一个窗口,通过新创建的窗口,可以编辑和观察文档的另一部分,同一文档各个视图之间自动实现同步,用户修改一个视的内容,在另外的视中也自动更新。  MFC框架通过复制原来的子框架窗口和其中的视来实现上面的功能,并且是完全自动的。  2.视对象基于同一视类,所有视位于同一文档

3、框架中。  分割窗口将单文档窗口的视区分割成几个独立的视,框架从同一视类创建多个视对象。Word的子窗口即属于这种类型。  3.视对象基于不同的视类,所有的视位于同一文档框架中。  多个视共享同一文档框架,但从不同的视类创建,每个视可以为文档提供不同的观察和编辑方法。比如一个视用图形观察文档,而另一个视用文本编辑文档中对象的属性。这种情况也适应于用不同的视来观察文档的不同部分。这种类型的实现方法是通过重载OnCreateClient函数实现。下面的例子实现了图中的分割窗口。  BOOLCMainFrame::OnCreateClient(LPCR

4、EATESTRUCT,CCreateContext*pContext)  {  RECTrect;  //先分割为1X2的形式  m_wndSplitter1.CreateStatic(this,1,2,WS_CHILD

5、WS_VISIBLE);  m_wndSplitter1.SetColumnInfo(0,300,0);//设置第一列的宽度  //将第一列进一步分割为2X1的形式  m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD

6、WS_VISIBLE,  m_wndSplitt

7、er1.IdFromRowCol(0,0));  //创建各个视  m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CviewView1),CSize(0,0),pContext);  m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CviewView2),CSize(0,0),pContext);  m_wndSplitter2.CreateView(1,0,  RUNTIME_CLASS(CviewView3),CSize(0,0),pContext);  ...

8、...  }  在实践中,笔者发现这三种方式有时都不适用。比如以下的两种情况:需要在不同的时间分别观察同一文档的不同部分,而文档分割成不同部分的数量较多,这样就不宜用分割窗口来实现,而需要在同一框架中切换不同的视;另一种情况可以说是上面提到的第三种情况和此处第一种情况的组合,即在单文档框架中包含有多个由分割窗口分割的区域,而某(或某些)分割区域中包含有多个不同的视,仅有其中的一个视显示出来。与第三种情况类似,其它分割区域中具有不同的视,但它们同时显示出来。因为在实现方法上有所不同,所以这里分为两种情况来讨论,这也是这篇文章要介绍的重点。  三、单

9、文档单框架窗口中的多视  下面的例子演示了第一种情况下,具有两个视的简单实现方法。必需考虑如下的问题:非活动的视是否继续连接到文档。当视连接到文档时,它从文档接收OnUpdate通知消息,使其保持与文档内容同步。但这样做将增加计算机的开销,同时也会增加程序开发的任务。另一方法是当非活动的视重新变成活动时,再进行与文档的同步工作。例子中采用后一种方法。  BOOLCMainFrame::OnViewChange(UINTnCmdID)  {  CView*pViewAdd;  CView*pViewRemove;  CDocument*pDoc=G

10、etActiveDocument();  UINTnCmdID;  nCmdID=LOWORD(GetCurrentMessage()-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。