【发布时间】:2021-11-14 04:01:56
【问题描述】:
为了我自己的学习,我正在玩一些在线示例的代码sn-ps。
在这些示例的开头,有以下几行:
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
为方便起见,我在基于对话框的演示 MFC 项目中添加了一个新按钮,并且我希望测试的代码被写入 ::OnBnClickedRuntest() 函数。
这在过去运行良好,我以这种方式研究、修改和测试了各种其他代码 sn-ps。但是,对于这些行,我收到 E0144 编译时错误:
“CWnd *”类型的值不能用于初始化“HWND”类型的实体
我认为我遇到了某种名称匹配/可见性问题。我希望调用winuser.h 中定义的GetDesktopWindow() 和GetDC(),但显然CWnd 类也具有这些完全相同的名称和不同的返回类型的方法。
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdesktopwindow
https://docs.microsoft.com/en-us/cpp/mfc/reference/cwnd-class?view=msvc-160#getdesktopwindow
显然,我的测试代码被放置在 MFC 对话框的 OnButtonClicked 函数中,GetDesktopWindow() 和 GetDC() 更喜欢调用 CWnd::GetDesktopWindow() 和 CWnd::GetDC() 方法,而不是预期的 winuser.h 函数。
如何向编译器说明我想使用 winuser.h 同名函数而不是 CWnd 方法?
【问题讨论】:
-
在 MFC 中你可以使用
CClientDC dc(GetDesktopWindow());。CClientDC致电GetDC/ReleaseDC。但是使用解析运算符调用核心函数也很有用。
标签: c++ visual-studio visual-c++ mfc