Доступ к значениям MONITORINFOEX в Visual C ++ - PullRequest
0 голосов
/ 13 ноября 2018

Я озадачен, пытаясь получить значения 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 ++ показывает.

Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 13 ноября 2018

В коде, который вы показали, вы пытаетесь определить struct s, которые являются частью WinAPI самостоятельно.Не делай этого, в этом нет необходимости.Вместо этого включите соответствующие файлы заголовков.

Простой пример:

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...