Witam,
Piszę program lupa. Robię screenshoty otwartym oknom i składam w jeden obraz który potem zoomuje. Oto funkcja, która robi screena konkretnego okna:
HBITMAP engine_winapi::screenshot(HWND hwnd)
{
HDC hdcWindow;
HDC hdcMemDC = NULL;
HBITMAP hbmScreen = NULL;
HBITMAP hbmOld = NULL;
hdcWindow = GetDC(hwnd);
hdcMemDC = CreateCompatibleDC(hdcWindow);
RECT rcClient;
GetClientRect(hwnd, &rcClient);
hbmScreen = CreateCompatibleBitmap(hdcWindow, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top);
hbmOld = (HBITMAP)SelectObject(hdcMemDC,hbmScreen);
BitBlt(hdcMemDC,
0,0,
rcClient.right-rcClient.left, rcClient.bottom-rcClient.top,
hdcWindow,
0,0,
SRCCOPY);
ReleaseDC( hwnd, hdcWindow );
SelectObject( hdcMemDC, hbmOld );
DeleteDC( hdcMemDC );
return hbmScreen;
}
Problem w tym, że nie działa przeźroczystość np. w win 7 pasek z tytułem okna jest czarny.
Z góry dzięki za pomoc.