CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

从文档类获得视图类指针的一点疑惑

楼主archy(archy)2001-09-27 11:51:19 在 VC/MFC / 基础类 提问

资料上说从文档类获得视图类指针是这样的  
   
  CView*   CTestDoc::GetVieww(CRuntimeClass*   pClass)  
          {       CView*   pView;  
                  POSITION   pos=GetFirstViewPosition();  
                  while(pos!=NULL)  
          {  
                          pView=GetNextView(pos);  
                          if(pView->IsKindOf(pClass))  
                                    break;  
          }  
                  if(!pView->IsKindOf(pClass))  
                          return     NULL;  
                  return   pView;}  
         
  使用该函数应遵循如下格式(以取得CTestView指针为例):  
  CTestView*   pTestView=GetView(RUNTIME_CLASS(CTestView));  
  RUNTIME_CLASS是一个宏,可以简单地理解它的作用:将类的名字转化为CRuntimeClass为指针。  
   
  可我认为为什么函数的形参要是CRuntimeClass*呢?这样调用时候还需加RUNTIME_CLASS,  
  形参直接用CView*不就可以了吗?调用时直接GetView(CTestView)。不知我的浅见对不对,谢谢。 问题点数:40、回复次数:9Top

1 楼rediori(江枫)回复于 2001-09-27 12:15:17 得分 5

不是定是cview,   是个cformview呢  
  或者是个ceditview   或者是你派生的类Top

2 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-09-27 12:25:43 得分 0

  if(pView->IsKindOf(pClass))  
  该函数用判断得到的pView是否为指定类的派生类,如果不是的话,返回的指针要强行转换指针的后,使用时可能会出现错误。按照你的理解,将无法判断该对象是否可以转换成你要的类对象。使用时肯定会有隐患的。Top

3 楼archy(archy)回复于 2001-09-27 13:28:29 得分 0

可是CVIEW是所有view的基类呀,不会有问题吧Top

4 楼jiangsheng(蒋晟.Net[MVP])回复于 2001-09-27 14:19:51 得分 10

要判断是否是某种View的对象,只能用这种View的RUNTIME_CLASS。Top

5 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-09-27 14:42:23 得分 0

虽然为基类,但未必是某种派生类,你需要用的是派生类的功能,就应该判断该对象是否为该该类的派生类,否则强制类型转换才不会出现隐患Top

6 楼archy(archy)回复于 2001-09-27 20:17:39 得分 0

小子愚笨,谁能举个例子说得再清楚一点呢?  
  此体再加20分Top

7 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-09-28 09:09:30 得分 25

例如:CEditView派生于CView;  
  CView*   pView   =   new   CView;  
  如果这样调用  
  (CEditView*)pView->Member();(改成员为CEditView的成员函数就有可能出错)  
  只有当  
  CView*   pView   =   new   CEditView;时或者为CEditView的派生类时调用才能成功。也是就是该对象是不是CEditView的对象(派生类对象也是CEditView的对象)。  
  你的问题中传递参数CRuntimeClass,就是用来判断得到对象是不是指定的类对象,如果不判断,你在转换时就可能有隐患Top

8 楼archy(archy)回复于 2001-09-30 20:13:38 得分 0

我的老师说“假设一个view由CtestView类产生,而另外一个view由CtestView2类产生,在这种情况下,如果使用你的方法,如果我要查找由CtestView2类产生出的View,你该如何进行呢?”  
         
    可我认为,无论是何view类,其基类必定是CView,所以按照此函数,必定(若存在)可获得一个指向欲查找的派生类对象(如CEditView)的基类pView指针。不知您认为怎样?  
   
  谢谢Top

9 楼bighead(bighead1997)回复于 2001-09-30 20:56:55 得分 0

为什么要得到view类呢?Top

相关问题

  • 文档中有几个视图,如何确定我要找的视图指针?
  • 如何获得当前文档视图的CDC指针
  • 在多文档里如何得到ChildFrame里的视图指针?
  • 文档/视图
  • 在多文档程序中如何从一个视图中得到另一个视图的指针-100分
  • 怎么样在文档类中获得视图类的指针???急急急
  • 如何在对话框中获得当前视图或文档的指针?
  • 单文档多视图中如何在MyTreeView中获得MyListView的指针?
  • 在文档视图结构中如何得到主帧窗口的指针?
  • 如何在新建视图类中获得文档类的指针

关键词

  • 指针
  • 函数
  • 转换
  • runtime
  • view
  • 派生
  • ceditview
  • pview
  • cview
  • 类

得分解答快速导航

  • 帖主:archy
  • rediori
  • jiangsheng
  • jiangping_zhu

相关链接

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

广告也精彩

反馈

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