В своем коде я пытался сделать снимок экрана с окном. Для этого я (частично) использовал:
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);