在 MFC 中将 CWnd 指针强制转换为 CEdit 指针
Casting CWnd pointer to CEdit pointer in MFC
发现了一些奇怪的问题。在我的 MFC 应用程序中,我正在尝试将 CWnd 指针投射到 CEdit 一个。我通过GetFocus函数检索CWnd指针。当我做dynamic_cast<CEdit*>(pWnd)
时,它返回 0。能是什么?
首先,MFC 库不是在启用 RTTI 的情况下编译的,因此无论如何dynamic_cast
都不起作用。
其次,CWnd::FromHandle
返回的CWnd*
要么是现存的CWnd
,要么如果没有,则围绕HWND
的蝇量级包装。如果返回蝇量级包装器,即使基础HWND
引用编辑控件,它也不会是CEdit
。
只有当您已经创建了一个CEdit
来保存HWND
时,您才会获得CEdit
。
如果您想知道您获得的CWnd*
是针对已存在的对象,请使用CWnd::FromHandlePermanent
要获取CEdit*
您需要显式创建一个,然后调用 Attach
将其附加到HWND
。
或者,如果你想作弊,CEdit
没有数据成员或虚函数,而是直接从CWnd
继承,所以你可以使用(理论上不安全的)static_cast
,因为它具有完全相同的内存布局。
相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针