Ошибка GetWindowRect в зависимости от того, где находится окно - PullRequest
0 голосов
/ 15 октября 2019

В своем коде я пытался сделать снимок экрана с окном. Для этого я (частично) использовал:

RECT rc;
GetWindowRect(hwnd, &rc);

Затем я проверил эти значения следующим образом:

cout << rc.left << " " << rc.top << " " << rc.bottom << " " << rc.right << endl;

И затем сделал снимок экрана и посчитал фактические пиксели. При этом я заметил, что все значения, которые он предоставляет, неверны. Кроме того, ошибка для этих значений колеблется в зависимости от того, где находится рассматриваемое окно (hwnd). Кроме того, BitBlt может быть несовместимым.

В моих тестах я обнаружил, что когда окно было близко (0, 0), GetWindowRect был ближе к точному. Однако по мере приближения к центру экрана он становится выше на 100 пикселей. Чтобы сделать это еще более странным, на другом компьютере, на котором я это тестировал, оказалось, что GetWindowRect соответствует небольшой рамке вокруг окна.

Вот полный код:

HWND hwnd = currHnd;
RECT rc;

GetWindowRect(hwnd, &rc);
cout << rc.left << " " << rc.top << " " << rc.bottom << " " << rc.right << endl;

HDC hdcscreen = GetDC(0);
HDC hdc = CreateCompatibleDC(hdcscreen);

int height =  200;//(rc.bottom - rc.top);// - 9;
int width =  200;// (rc.right - rc.left);// - 14;

HBITMAP hbmp = CreateCompatibleBitmap(hdcscreen, width, height);
SelectObject(hdc, hbmp);

BitBlt(hdc, 0, 0, width, height, hdcscreen, rc.left, rc.top, SRCCOPY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...