发现了一些奇怪的问题。在我的 MFC 应用程序中,我试图将 CWnd 指针转换为 CEdit 之一。我通过 GetFocus 函数检索 CWnd 指针。当我在做 dynamic_cast<CEdit*>(pWnd)
, 它返回 0。它可以是什么?
最佳答案
首先,MFC 库不是在启用 RTTI 的情况下编译的,因此 dynamic_cast
无论如何都不会工作。
其次,CWnd::FromHandle
返回的 CWnd*
要么是现存的 CWnd
,要么是享元包装器围绕一个 HWND
。如果返回享元包装器,它将不是 CEdit
,即使底层 HWND
引用编辑控件也是如此。
如果您已经创建了一个 CEdit
来保存 HWND
,您将只会得到一个 CEdit
。
如果您想知道您获得的 CWnd*
是针对一个已经存在的对象,请使用 CWnd::FromHandlePermanent
要获得 CEdit*
,您需要显式创建一个,然后调用 Attach
将其附加到 HWND
。
或者,如果您想作弊,CEdit
没有数据成员或虚函数,而是直接从 CWnd
继承,因此您可以使用(理论上不安全的)static_cast
,因为它具有完全相同的内存布局。
关于c++ - 在 MFC 中将 CWnd 指针转换为 CEdit 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444940/