我很困惑,试图检索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

09-13 09:54