在 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();
为了我自己的教育,我正在研究一些在线示例的代码片段。
在这些示例的前面,有这些行:
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();