在MFC中将CWnd指针强制转换为CEdit指针

时间:2012-05-04 07:59:11

标签: c++ mfc

发现了一些奇怪的问题。在我的MFC应用程序中,我试图将CWnd指针强制转换为CEdit。我通过GetFocus函数检索CWnd指针。当我做dynamic_cast<CEdit*>(pWnd)时,它返回0.它可以是什么?

1 个答案:

答案 0 :(得分:5)

首先,MFC库未在启用RTTI的情况下编译,因此无论如何dynamic_cast都无法正常工作。

其次,CWnd*返回的CWnd::FromHandle是现存的CWnd,如果没有,则是HWND周围的flyweight包装。如果返回flyweight包装器,则它不会是CEdit,即使基础HWND引用了编辑控件。

如果您已创建CEdit来保留CEdit,则只会获得HWND

如果您想知道所获得的CWnd*是针对已存在的对象,请使用CWnd::FromHandlePermanent

要获得CEdit*您需要明确创建一个,请调用Attach将其附加到HWND

或者,如果你想作弊,CEdit没有数据成员或虚函数,并直接从CWnd继承,所以你可以使用(理论上不安全)static_cast,因为它有完全相同的内存布局。