gpt4 book ai didi

c++ - 在 MFC 中将 CWnd 指针转换为 CEdit 指针

转载 作者:行者123 更新时间:2023-11-30 01:26:26 26 4
gpt4 key购买 nike

发现了一些奇怪的问题。在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com