发现了一些奇怪的问题。在我的 MFC 应用程序中,我试图将 CWnd 指针转换为 CEdit 之一。我通过 GetFocus 函数检索 CWnd 指针。当我在做的时候dynamic_cast<CEdit*>(pWnd)
,它返回 0。它会是什么?
问问题
2444 次
1 回答
6
首先,MFC 库不是在启用 RTTI 的情况下编译的,所以dynamic_cast
无论如何都不会工作。
其次,CWnd*
返回的CWnd::FromHandle
要么是现存的CWnd
,或者如果没有,则为围绕 a 的享元包装器HWND
。CEdit
如果返回享元包装器,即使底层HWND
引用编辑控件,它也不会是 a 。
如果您CEdit
已经创建了一个CEdit
来保存HWND
.
如果你想知道CWnd*
你得到的是一个已经存在的对象,使用CWnd::FromHandlePermanent
要获得一个CEdit*
,您需要显式创建一个,然后调用Attach
以将其附加到HWND
.
或者,如果您想作弊,CEdit
没有数据成员或虚函数并且直接继承自,CWnd
因此您可以使用 a (理论上是不安全的) static_cast
,因为它具有完全相同的内存布局。
于 2012-05-04T10:38:28.447 回答