0
我們有我們的應用程序,它捕獲窗口的圖像,並將其保存爲PNG文件,並將其複製到剪貼板(C++ API代碼)裏面的一些代碼。窗口的最頂部獲取圖像捕獲切斷在Windows 7
完美地工作在Windows XP上。它也適用於Windows 7,除了它看起來像圖像的頂部幾個像素線已被切掉,就好像被捕獲的區域不包括窗口的頂部幾行一樣。然而,我們的代碼清晰地從圖像的頂部複製,如下所示。
(在Windows XP中,你看到右手邊,加上全X窗口的上邊框)在Windows 7
這是某些航空或其他顯示效果,還是有一種方式來彌補這一點?或者可能在我們的代碼中的東西可能導致此?
當然,我們可以判斷的窗口區域,並從客戶端窗口捕捉它,並捕獲了幾行高,但怎麼可能行,這似乎武斷。
必須有一些根本缺陷或發出這裏?
我們的代碼大致如下:
RECT wndRect;
GetWindowRect(hwnd, &wndRect);
int Width = wndRect.right - wndRect.left;
int Height = wndRect.bottom - wndRect.top;
BYTE *pBits = 0;
BITMAPINFO bmpinfo = {sizeof(BITMAPINFO)};
bmpinfo.bmiHeader.biWidth = Width;
bmpinfo.bmiHeader.biHeight = Height;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = 24;
bmpinfo.bmiHeader.biCompression = BI_RGB;
HBITMAP hBmp = CreateDIBSection(NULL, &bmpinfo, DIB_RGB_COLORS, (void**)&pBits, NULL, 0);
HDC hWndDC = GetWindowDC(hwnd);
HDC hDC = CreateCompatibleDC(hWndDC);
HBITMAP hOldBmp = (HBITMAP)SelectObject(hDC, hBmp);
BitBlt(hDC, 0, 0, Width, Height, hWndDC, 0, 0, SRCCOPY);