- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
发现了一些奇怪的问题。在我的 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/
根据 msdn ,当我用 CWnd::FromHandle 得到 CWnd* 时, The pointer may be temporary and should not be stored for
我在一个高度多线程的应用程序上遇到了无数次崩溃。 阅读这些 MSDN page , technical note和 this article on TLS ,我已经了解 CWnd 对象被映射到 Thr
我有一个动态创建的 CWnd 窗口,标题栏区域和任务栏的图标似乎是随机选择的。 要设置图标,我调用: // Set the icon for this dialog. The framework d
我的应用程序具有基于 ATL 的 GUI(CWnd、CDialog、...),它由多个页面(CDialog)组成。其中一个页面是空的,但它有一个占位符框架 (CWnd),可随对话框调整大小。一切都构建
H, 我有一个旧的 MFC 应用程序,它有一个继承自 CWnd 的类。我正在与原作者交谈,他说 Cwnd::Create() 创建了一个新线程。但是,我在 MSDN 文档中找不到对此的任何引用 htt
我正在尝试调用 CWnd 类的函数 GetParent()。每次都会抛出异常。我正在从工作线程调用该函数。 这是导致异常的行:CWnd* parent = this->GetParent(); 我也试
我有一个显示图像的自定义控件。当图像超过可显示大小时,它会显示滚动条。出于某种原因,我想知道是否显示水平或垂直滚动条。我在 CWnd 类中找不到任何直接函数。 我找到了 GetScrollBarI
我编写了一个 MFC 应用程序,需要一个不会将输入焦点从另一个窗口移开的按钮。 不幸的是,当用户用鼠标单击按钮时,删除 WS_TABSTOP 样式没有帮助。当我阻止 WM_LBUTTONDOWN 时,
我目前大量使用这样的代码来确定控件在窗口客户区内的位置: CRect rect; GetDlgItem(IDC_CONTROL_ID)->GetWindowRect(&rect); ScreenToC
如何获取 CWnd* 的高度和宽度? CWnd 窗口是否正确?为什么不是命令: CWnd* parent = this->GetParent(); // C++ command parent->Get
背景 MFC CWnd::SetTimer调用 WinAPI 的 SetTimer简单地。 _AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEve
我有一个 CWnd 类名 mywindow 的成员 我想给它添加一个滚动条。 我该怎么做? 我已经尝试做: mywindow.EnableScrollBarCtrl(SB_BOTH,TRUE); 它显
我有一个对话框,CFormView,其中包含一些按钮和一个面板,其中包含 Tabcontrol、单选按钮、文本输入字段等。 因此,在我的面板 CWnd 上,我创建了如下输入字段: pEdit = ne
(最后一行有一个 TL;DR) 我正在实现一个处理程序来关闭在软件应用程序中打开的选定窗口。这是一个粗略的代码: void CDlg_Dummy_Dialog::OnCloseWindows() {
我正在编写一个带有多个控件的 MFC 对话框。我目前有一个 CWnd,它位于 dialog 的右半部分。单击编辑按钮后,子 CWnd 会调整大小以占据对话框的较大部分。 但是,现在当我尝试调整窗口大小
如果我有一个带有按钮控件的 MFC 对话框,有没有办法使用按钮的 ID(例如 IDC_BUTTON_YES)为该控件构造 HWND 或 CWND? 最佳答案 是的,可以使用MFC对话框的GetDlgI
所以我有一个 MFC 应用程序,当我们执行某些操作时它会闪烁。所以我想我应该设置 SetRedraw(false) 并在函数结束时将其设置为 true。 该应用程序不再刷新,但如果我在 SetRedr
我是一个 C++ 新手,所以请多多包涵。 位于函数内的这行代码: CWnd* pWnd = CWnd::FindWindow("Shell_TrayWnd", ""); CWnd 显示为“未定义”。我
我正在处理我们的 32 位 MFC VC2010 应用程序中出现的偶发生产问题。该应用程序在 Windows Server 2008 R2 Standard SP1 64 位上运行。 此问题是由于无法
我有一个派生自 CWnd 的自定义类,我想从工作线程向其发布消息。我正在使用 PostMessage 函数来实现这一点。 PostMessage 的第一个参数是我的类的 HWND 类型句柄,接下来是我
我是一名优秀的程序员,十分优秀!