如何在派生视图类中实现CView :: OnUpdate

时间:2012-05-17 10:51:58

标签: c++ mfc

OnUpdate的第3个参数是指向CObject的指针。必须在实现其自己的OnUpdate的视图类中下调指针。检查演员表是否成功的最佳方法是什么?使用CObject::IsKindOfdynamic_cast?可以在MFC项目中使用RTTI吗?

3 个答案:

答案 0 :(得分:1)

如果您使用向导创建了视图,那么它会在您的视图类的头文件中放置一个DECLARE_DYNCREATE。如果您手动创建它,我会确保它在视图的头文件的类定义中有一个DECLARE_DYNCREATE(或者至少DECLARE_DYNAMIC或DECLARE_SERIAL - DECLARE_SERIAL对于视图类来说通常是过度的。)

然后,当你想要向下转换使用DYNAMIC_DOWNCAST宏并在返回时测试非NULL。

CView * pView = DYNAMIC_DOWNCAST(CView,pObject); //是一种用法

不要听建议不使用MFC宏,因为它不可移植......如果你正在编写一个CView派生类,它已经不可移植了 - 除非你使用像Wind / U这样的工具包,然后DYNAMIC_DOWNCAST也可以移植。

答案 1 :(得分:0)

CObject::IsKindOf()仅在使用DECLARE_DYNAMICDECLARE_DYNCREATEDECLARE_SERIALCView声明它们)声明类时才有效但不需要RTTI支持

虽然dynamic_cast适用于RTTI支持,但它包含一些开销,可执行文件大小略有增加,check this ..

答案 2 :(得分:0)

我在工作中使用dynamic_cast并没有问题。 检查演员表演很容易: CDerivedView * pView = dynamic_cast(pViewObj); if(!pView){ASSERT(0);返回; }

此外,我们尝试不使用MFC的宏,因为它们是不可移植的 - 例如MFC本身。 我认为,好的程序绝不能依赖于它已被使用的库。