WinAPI / GDI: почему снимок больших окон включает панель задач? - PullRequest
1 голос
/ 11 июля 2010

Я использую GDI +, чтобы сделать снимок окна, код:

CComBSTR bstrfname (fname); 

HDC hdc = CreateCompatibleDC (hDC); 
HBITMAP hbmp = CreateCompatibleBitmap (hDC, CFG_WIDTH, CFG_HEIGHT); 
HBITMAP hbmp0 = (HBITMAP)SelectObject (hdc, hbmp); 
BitBlt (hdc, 0, 0, CFG_WIDTH, CFG_HEIGHT, hDC, 0, 0, SRCCOPY); 

Gdiplus::Bitmap *bmp = new Gdiplus::Bitmap (hbmp, NULL); 
CLSID encoderClsid; GetEncoderClsid (L"image/png", &encoderClsid); 
bmp->Save (bstrfname, &encoderClsid, NULL); 
delete bmp; 

SelectObject (hdc, hbmp0); 
DeleteObject (hbmp); 
DeleteDC (hdc); 

, где hDC установлен ранее с:

hWnd=CreateWindowEx(...); hDC=GetDC(hWnd); 

, это прекрасно работает для маленьких окон, но одинЯ пробую окна больше экрана.

т.е. панель задач тоже сохраняется.что дает?

1 Ответ

3 голосов
/ 11 июля 2010

Это нормально, снимок экрана, подобный этому, дает вам именно то, на что вы смотрите на мониторе.Включая панель задач.Вам нужно будет ограничить область, которую вы захватываете, до границ окна, которое вы хотите захватить.Используйте GetWindowRect () и соответственно отрегулируйте размер растрового изображения и аргументов, передаваемых BitBlt ().

PrintWindow может работать, только если целевое окно реализует сообщения WM_PRINT и WM_PRINTCLIENT.Легко реализовать, но часто упускается из виду.

...