文档视框架之间相互作用

Hala928

Hala928

2016-02-19 12:20

下面图老师小编跟大家分享一个简单易学的文档视框架之间相互作用教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

一般来说用户的输入/输出基本都是通过视进行,但一些例外的情况下可能需要和框架直接发生作用,而在多视的情况下如何在视之间传递数据。

在使用菜单时大家会发现当一个菜单没有进行映射处理时为禁止状态,在多视的情况下菜单的状态和处理映射是和当前活动视相联系的,这样MFC可以保证视能正确的接收到各种消息,但有时候也会产生不便。有一个解决办法就是在框架中对消息进行处理,这样也可以保证当前文档可以通过框架得到当前消息。

在用户进行输入后如何使视的状态得到更新?这个问题在一个文档对应一个视图时是不存在的,但是现在有一个文档对应了两个视图,当在一个视上进行了输入时如何保证另一个视也得到通知呢?MFC的做法是利用文档来处理的,因为文档管理着当前和它联系的视,由它来通知各个视是最合适的。让我们同时看两个函数:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

void CView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint )

void CDocument::UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL )

当文档的UpdateAllViews被调用时和此文档相关的所有视的OnUpdate都会被调用,而参数lHint和pHint都会被传递。这样一来发生改变视就可以通知其他的兄弟了。那么还有一个问题:如何在OnUpdate中知道是那个视图发生了改变呢,这就可以利用pHint参数,只要调用者将this指针赋值给参数就可以了,当然完全可以利用该参数传递更复杂的结构。

视的初始化,当一个文档被打开或是新建一个文档时视图的CView::OnInitialUpdate()会被调用,你可以通过重载该函数对视进行初始化,并在结束前调用父类的OnInitialUpdate,因为这样可以保证OnUpdate会被调用。

文档中内容的清除,当文档被关闭时(比如退出或是新建前上一个文档清除)void CDocument::DeleteContents ()会被调用,你可以通过重载该函数来进行清理工作。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

在单文档结构中上面两点尤其重要,因为软件运行文档对象和视对象只会被产生并删除一次。所以应该将上面两点和C++对象构造和构析分清楚。

最后将一下文档模板(DocTemplate)的作用,文档模板分为两类单文档模板和多文档模板,分别由CSingleDocTemplate和CMultiDocTemplate表示,模板的作用在于记录文档,视,框架之间的对应关系。还有一点就是模板可以记录应用程序可以打开的文件的类型,当打开文件时会根据文档模板中的信息选择正确的文档和视。模板是一个比较抽想的概念,一般来说是不需要我们直接进行操作的。

当使用者通过视修改了数据时,应该调用GetDocument()-SetModifiedFlag(TRUE)通知文档数据已经被更新,这样在关闭文档时会自动询问用户是否保存数据。

展开更多 50%)
分享

猜你喜欢

文档视框架之间相互作用

编程语言 网络编程
文档视框架之间相互作用

湿疹是怎么引起的 内外因相互作用结果

育儿知识
湿疹是怎么引起的 内外因相互作用结果

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

气血津液相互之间的关系

中医保健 中医养生 中草药
气血津液相互之间的关系

场景之间相互跳转的实现方法

flash教程
场景之间相互跳转的实现方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

五行之间的相互关系

中医保健 中医养生 中草药
五行之间的相互关系

convert实现不同单位之间的相互转换

电脑入门
convert实现不同单位之间的相互转换

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

prototype 1.5 & scriptaculous 1.6.1 学习笔记

prototype 1.5 & scriptaculous 1.6.1 学习笔记

在对话框中进行数据交换和数据检查

在对话框中进行数据交换和数据检查
下拉加载更多内容 ↓