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