在 MFC OnButtonClick 函数中调用 winuser.h 中的 GetDesktopWindow() 函数而不是 CWnd::GetDesktopWindow()

Calling GetDesktopWindow() function in winuser.h instead of CWnd::GetDesktopWindow() in an MFC OnButtonClick function

为了我自己的教育,我正在研究一些在线示例的代码片段。

在这些示例的前面,有这些行:

HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);

为方便起见,我在基于对话框的演示 MFC 项目中添加了一个新按钮,我希望测试的代码已写入 ::OnBnClickedRuntest() 函数。

这在过去运行良好,我以这种方式研究、修改和测试了各种其他代码片段。但是,对于这些行,我得到一个 E0144 编译时错误:

a value of type "CWnd *" cannot be used to initialize an entity of type "HWND"

我认为我 运行 遇到了某种 name-matching/visibility 问题。正如我希望调用在 winuser.h 中定义的 GetDesktopWindow()GetDC(),但显然 CWnd class 也有具有完全相同名称和不同 return 类型。

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 方法?

对函数使用范围解析运算符:

::GetDesktopWindow();
::GetDC();