单文档程序中,在mainframe中访问视图或文档中的成员的误区.欢迎各位指正.

ghyd 2005-05-08 11:56:33
在mainframe中想要访问视图或者文档,有些人会使用"getactiveview()",其实,这样是错误的!
所谓的使用"getactiveview()"获得视图指针,是错误的,这个函数,只能获得"CView*"类型的指针,而不是你想要得到的你自己派生出来的视图的指针,也有些人通过强制将"CView*"类型指针转化为你自己派生的视图类的指针,这样做是非常危险的,有的时候,凑巧能通过编译,(即使通过,程序也是潜藏着出错的可能.并且,如果你向你自己的视图类中多加一些变量或者函数,使得你的类的成员的保存位置发生变化,这个时候,基本上就会出错,基本上是"访问违规"错误.)但大部分时候是无法通过编译的,一般的出错提示就是"某某变量(或函数)不是某某类的成员".
其实,原因很简单,getactiveview()返回的是基类指针,你用基类指针是得不到派生类的成员的. 有的人进行了强制转换,这种转换在语法上是可以通过编译的,但是,c++是严重不提倡这样做的!因为你这是用派生类指针访问基类对象,偶尔会成功,但大部分时间会出错!

...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlzxlich 2005-05-09
  • 打赏
  • 举报
回复
CMyView* CMainFrame::GetMyView()
{
CMyView* pView =STATIC_DOWNCAST(CMyView,this->GetActiveFrame()->GetActiveView());
return pView;
}
参照上面做就可以了。
anlywei 2005-05-09
  • 打赏
  • 举报
回复
学习ING
liuduofu 2005-05-09
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/69/69301.shtm

看看这个。
littlepig_2002 2005-05-09
  • 打赏
  • 举报
回复
唉, 没办法呀, M$把底层的东西捂的严严的, 谁也不知道他是怎么实现的. 而M$的帮助又少之又少.

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧