2011-02-11 80 views
0

我們有我們的應用程序,它捕獲窗口的圖像,並將其保存爲PNG文件,並將其複製到剪貼板(C++ API代碼)裏面的一些代碼。窗口的最頂部獲取圖像捕獲切斷在Windows 7

完美地工作在Windows XP上。它也適用於Windows 7,除了它看起來像圖像的頂部幾個像素線已被切掉,就好像被捕獲的區域不包括窗口的頂部幾行一樣。然而,我們的代碼清晰地從圖像的頂部複製,如下所示。

enter image description here

(在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); 

回答

0

我曾經讀過的矩型座標切斷底部像素,但從來沒有聽說過的最高像素的......可能有一些API調用的地方,以獲得窗飾的大小還是什麼都沒有。

GetDCEx可能會有所幫助。