VC单文档多视图工程中,在任何地方访问某一指定视图类的方法

此处讨论的是单文档、多视图的VC工程。

我们知道,在多视图工程中,要获取某一个指定视图类的指针(进而对它里面的控件等进行操作),我们可以通过这样的办法:

从文档类取得视图类的指针:
CDocument类提供了两个函数用于视图类的定位:

 GetFirstViewPosition()和GetNextView()
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变.GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用引用调动的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定义一个POSITION结构变量来辅助操作):

     CView
*  pView;
  POSITION pos
= GetFirstViewPosition();
  pView
= GetNextView(pos);

这样,便可到了C
* View类的指针pView.执行完成几句后,变量pos = NULL,因为没有下一个视图类,自然也没有下一个视图类的POSITION.但是之几条语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某个类的实例时,可用IsKindOf()成员函数时行检查。

如:
     pView
-> IsKindOf(RUNTIME_CLASS(CView));

即可检查pView所指是否是CView类。

但是我们也注意到:上述办法的前提条件是你先要得到文档类的指针。在视图类中,获取文档类指针的方法非常简单,但是想在程序的任何地方,例如点击一个菜单弹出的对话框中(指的是:在对话框类的实现文件里)获取文档类的指针,就要多加点东西了:

首先,我们为文档类添加一个静态函数:

public :
         
static  CXXXDoc *  GetDoc();        // 其中CXXXDoc就是你的文档类的类名

这个静态函数的实现是:

CXXXDoc *  CXXXDoc::GetDoc()
{
      CFrameWnd
*  pFrame  =  (CFrameWnd * )(AfxGetApp() -> m_pMainWnd);   
      
return  (CXXXDoc * )pFrame -> GetActiveDocument();   
}

然后,我们就可以在任何你需要获取某一指定视图类指针的地方,例如上面所说的对话框类中:

CXXXDoc *  pDoc  =  CXXXDoc::GetDoc();

再用上面所说的“从文档类取得视图类的指针”的办法,来获取你想要的视图类指针了。得到了指针后,你就可以对视图中的控件等进行操作了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值