hur.cn - 华软网

 热门搜索

在MDI文档里面,点击打开其中一个文档,触发什么事件呢?

  作者:未知    来源:网络    更新时间:2011/9/28
在MDI文档里面,已经打开了3个文档,我选择其中一个文档,触发哪个时间比较好处理呢?OnActivateView好像每次重画的时候会做一次,这个事件处理不了我选择的是哪个文档
---华软 网友回答---
注意里面的参数!使用参数可以判定是本身的文档还是新文档!
---华软网友回复---
virtual void OnActivateView( BOOL bActivate, CView* pActivateView, CView* pDeactiveView );

参数: bActivate 指明该视图是要被激活还是要结束激活状态。 
           pActivateView 指向要激活的视图的指针。 
           pDeactiveView 指向要结束激活状态的视图对象的指针。

当视图被激活为活动视图,或由活动转为非活动时,调用该函数通知视图。基类的实现只是设置该视图为焦点。代码如下:

  void CView::OnActivateView(BOOL bActivate, CView* pActivateView, CView*)

  {

  UNUSED(pActivateView); // unused in release builds

  if (bActivate) // 当前状态为活动吗

  {

  ASSERT(pActivateView == this);

  // 如果其父窗口也是活动的,则设置焦点。(在MDI中,其父框架可能是非活动的)

  if (IsTopParentActive())

  SetFocus();

  }

  }

说明:
当视图被激活或结束激活状态的时候,框架调用这个函数。这个函数的缺省实现将焦点设置到要激活的视图中。如果你希望在视图被激活或结束激活状态的时候进行特殊处理,那么应当重载这个函数。例如,如果你希望提供特别的视觉效果,使活动的视图与非活动的视图能有区别,你应当检查bActivate的值,并根据结果相应地更新视图的外观。
如果应用程序的主框架窗口被激活,而它的活动视图没有发生变化,那么pActivateView和pDeactiveView参数指向同一个视图——例如,焦点是从另一个应用程序传送到这个应用程序,而不是在应用程序内部从一个视图传送到另一个视图或是在MDI的子窗口之间传递。

拷贝过来的,你看一下!
---华软网友回复---
在CMDIChildWnd继承类的WM_MDIACTIVATE消息
该消息默认有三个参数
C++">
afx_msg void OnMDIActivate( BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd );

bActivate TRUE 文档激活 FALSE 非激活
pActivateWnd 激活的文档指针
pDeactivateWnd 非激活的文档指针
按你的要求处理下即可。


---华软网友回复---
处理 CMDIChildWnd继承类的WM_MDIACTIVATE消息
---华软网友回复---
奇怪了,怎么我用OnActivateView 里面的pActivateView 和pDeactiveView 全部都是等于this指针,根本没法判断打开的是哪个文档。是怎么回事呢?
---华软网友回复---
3楼是对的,如果你是一个文档对应多个视图,用我的方法
你现在是一个文档一个视图的多文档,那么,用WM_MDIACTIVATE消息!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。