发现一些奇怪的问题.在我的MFC应用程序中,我试图将CWnd指针强制转换为CEdit.我通过GetFocus函数检索CWnd指针.当我这样做时dynamic_cast<CEdit*>(pWnd),它返回0.它可以是什么?
首先,MFC库不是在启用RTTI的情况下编译的,因此dynamic_cast无论如何都无法工作.
其次,CWnd*返回的CWnd::FromHandle是现存的CWnd,或者如果没有,则是一个围绕着的轻量级包装HWND.如果返回flyweight包装器CEdit,即使底层HWND引用了编辑控件,它也不会是a .
CEdit如果你已经创建了一个CEdit来保存,你将只获得一个HWND.
如果您想知道CWnd*您获得的是已存在的对象,请使用CWnd::FromHandlePermanent
要获得一个CEdit*你需要显式创建一个,然后调用Attach将它附加到HWND.
或者,如果你想作弊,CEdit没有数据成员或虚函数并直接继承,CWnd所以你可以使用(理论上不安全)static_cast,因为它具有完全相同的内存布局.
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |