我目前正在使用以下代码行截取窗口:
UpdateWindow(hwnd);
HDC window_dc = GetDC(hwnd);
HDC res = CreateCompatibleDC(window_dc);
RECT r;
GetClientRect(hwnd, &r);
HBITMAP bmp = CreateCompatibleBitmap(window_dc, r.right - r.left, r.bottom - r.top);
SelectObject(res, bmp);
PrintWindow(hwnd, res, PW_CLIENTONLY);
DeleteObject(bmp);
ReleaseDC(hwnd, window_dc);
现在有办法,只截图我的HWND的特定区域?我意识到,在某些应用程序中,当窗口稍微大一点时,截图会花费更长的时间。所以我想如果我只能截取重要的帧,我就能真正提高速度。
编辑:它需要适用于后台的窗口,例如。与其他窗户重叠。
答案 0 :(得分:1)
你可以这样试试:
bool ScreenShot(HWND hwnd, int x, int y, int w, int h, LPCSTR file){
HDC source = GetDC(hwnd);
HDC memory = CreateCompatibleDC(source);
HBITMAP bitmap = CreateCompatibleBitmap(source, w, h);
HBITMAP bitmapOld = (HBITMAP)SelectObject(memory, hBitmap);
BitBlt(memory, 0, 0, w, h, source, x, y, SRCCOPY);
hBitmap = (HBITMAP)SelectObject(memory, bitmapOld);
DeleteDC(source);
DeleteDC(memory);
HPALETTE pal = NULL;
if(saveBitmap(file, bitmap, pal)) return true;
return false;
}