Niruko
Сообщений: 4
Оценки: 0
Присоединился: 2011-06-30 20:03:36.936666
|
То что мне нужно я нашел здесь: http://forum.xakep.ru/m_805642/tm.htm Но! Почему то у меня не работает вот эта функция:
HBITMAP GetWindowImage(HWND hWnd)
{
HDC hDCMem = CreateCompatibleDC(NULL);
RECT rect;
GetWindowRect(hWnd, & rect);
HBITMAP hBmp = NULL;
HDC hDC = GetDC(hWnd);
hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);
ReleaseDC(hWnd, hDC);
HGDIOBJ hOld = SelectObject(hDCMem, hBmp);
SendMessage(hWnd, WM_PRINT, (WPARAM) hDCMem, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED);
SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);
return hBmp;
}
Результатом работы этой функции является черный прямоугольник, совпадающий по размерам с окном, которое я хочу отрисовать в bitmap. Немного исправив, получил кусок скриншота (опять же с размерами этого окна):
HBITMAP GetWindowImage(HWND hWnd)
{
ShowWindow(hWnd,SW_NORMAL);
HDC hDCMem = CreateCompatibleDC(NULL);
RECT rect;
GetWindowRect(hWnd, &rect);
HBITMAP hBmp = NULL;
HDC hDC = GetDC(hWnd);
hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);
HGDIOBJ hOld = SelectObject(hDCMem, hBmp);
BitBlt(hDCMem,0,0,rect.right - rect.left,rect.bottom - rect.top,hDC,0,0,SRCCOPY);
ReleaseDC(hWnd, hDC);
SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);
return hBmp;
}
Конечно я могу развернуть нужное мне окно, чуть-чуть подождать (пока оно развернется) и сделать скрин той части экрана на которой оно находится. Но зачем, если есть возможность сразу отрисовать окно в bitmap.
|