CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

一个关于UpdateAllViews的问题

楼主hanbig(把握你的梦)2004-08-04 10:56:36 在 VC/MFC / 界面 提问

我有一个窗口,是用win32写的,自己处理消息,现在我要装入一个别人写的mfc的  
  view,我首先loadlibrary,然后调用dll中一个函数,它会把它创建的view   attach  
  到我的窗口,这样就可以了,当然可能有多个view   attach过拉。现在有一个问题,它的view如果调用UpdateAllViews之类的函数会发生什么情况?  
  我的窗口会收到消息吗?其它view的窗口会收到消息吗? 问题点数:20、回复次数:6Top

1 楼syy64(太平洋)回复于 2004-08-04 18:46:39 得分 0

view窗口类只能用在文档、视这种结构中,单独不能用。Top

2 楼wwwllg(野蛮人)回复于 2004-08-04 18:54:50 得分 10

view窗口类只能用在文档、视这种结构中,单独不能用。  
   
  view也是普通窗口,可以在任何需要的地方用。  
   
  UpdateAllViews之类的函数会发生什么情况?  
   
  如果他没有特别处理,和其他的view没区别  
  Top

3 楼hanbig(把握你的梦)回复于 2004-08-05 10:15:07 得分 0

wwwllg说得对,在哪都能用,我现在就是对mfc内部的处理不太清楚,  
  只知道调了updateallviews之后,它内部调用了每个view的updateview  
  可是,mfc是怎么知道有哪些窗口是它所谓的views中的一个呢?  
  另外updateview会发送那些消息,wm   paint?其它?Top

4 楼syy64(太平洋)回复于 2004-08-05 18:05:38 得分 0

不信你试试。Top

5 楼hanbig(把握你的梦)回复于 2004-08-06 12:53:36 得分 0

view我已经装进去了没有问题,Top

6 楼lixiaosan(小三)回复于 2004-08-06 13:23:11 得分 10

一般来说用户的输入/输出基本都是通过视进行,但一些例外的情况下可能需要和框架直接发生作用,而在多视的情况下如何在视之间传递数据。  
   
  在使用菜单时大家会发现当一个菜单没有进行映射处理时为禁止状态,在多视的情况下菜单的状态和处理映射是和当前活动视相联系的,这样MFC可以保证视能正确的接收到各种消息,但有时候也会产生不便。有一个解决办法就是在框架中对消息进行处理,这样也可以保证当前文档可以通过框架得到当前消息。  
   
  在用户进行输入后如何使视的状态得到更新?这个问题在一个文档对应一个视图时是不存在的,但是现在有一个文档对应了两个视图,当在一个视上进行了输入时如何保证另一个视也得到通知呢?MFC的做法是利用文档来处理的,因为文档管理着当前和它联系的视,由它来通知各个视是最合适的。让我们同时看两个函数:    
   
  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   ()会被调用,你可以通过重载该函数来进行清理工作。  
   
  在单文档结构中上面两点尤其重要,因为软件运行文档对象和视对象只会被产生并删除一次。所以应该将上面两点和C++对象构造和构析分清楚。  
   
  最后将一下文档模板(DocTemplate)的作用,文档模板分为两类单文档模板和多文档模板,分别由CSingleDocTemplate和CMultiDocTemplate表示,模板的作用在于记录文档,视,框架之间的对应关系。还有一点就是模板可以记录应用程序可以打开的文件的类型,当打开文件时会根据文档模板中的信息选择正确的文档和视。模板是一个比较抽想的概念,一般来说是不需要我们直接进行操作的。  
   
  当使用者通过视修改了数据时,应该调用GetDocument()->SetModifiedFlag(TRUE)通知文档数据已经被更新,这样在关闭文档时会自动询问用户是否保存数据。  
  Top

相关问题

  • UpdateAllViews
  • UpdateAllViews()的问题?
  • 各位关于UpdateAllViews()
  • 一个UpdateAllViews()的问题
  • 二级线程调用pDoc->UpdateAllViews(NULL)?
  • 谁能详细讲一下UpdateAllViews()的用法。
  • 为什么我用UpdateAllViews(NULL)不能更新所有的视图?
  • 询问:UpdateAllViews(CView *pSender,LPARAM lHint,CObject *pHint)中如何确定参数lHint?
  • 为什么UpdateAllViews会出现ASSERT宏错误呢?在线等,谢谢~~~~~~~~
  • CDocument::UpdateAllViews中,我只能跟踪到 invalidate,不知是在什么地方发送消息 WM_PAINT 从而重画窗口?

关键词

  • 文档
  • 模板
  • 函数
  • view
  • 视图
  • 框架
  • 消息
  • 结构
  • 数据
  • 调用

得分解答快速导航

  • 帖主:hanbig
  • wwwllg
  • lixiaosan

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo