dynamic_cast<CEdit*>(pWnd)
时,它返回0.它可以是什么?
答案 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
,因为它有完全相同的内存布局。