我很困惑,试图检索MONITORINFOEX值。我试过了:
typedef struct tagMONITORINFO {
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
} MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX {
CHAR szDevice[CCHDEVICENAME];
MONITORINFO tagMONITORINFO;
} MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));
无济于事。我将最后一行修改为:
GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));
再次,没有运气。我得到有关GetMonitorInfo的第二个参数的编译器消息。
也许我最近对C ++的经验不足。
在此先感谢您提供的任何帮助。
最佳答案
在显示的代码中,您尝试自己定义WinAPI内的struct
。不要那样做,没有必要。而是包括适当的头文件。
简单样本:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
{
// just a cheap way to get a handle
auto monitor{ MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) };
MONITORINFOEXW miex{ sizeof miex }; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex)) {
std::cerr << "GetMonitorInfo() failed :(\n\n";
return EXIT_FAILURE;
}
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << '\n';
}
样本输出:
\\.\DISPLAY1: 2560 x 1440