HBITMAP GetWindowBitmap(HWND hWnd)
{
HBITMAP hBitmap = NULL;
HDC hDc = GetDC(hWnd);
if (hDc)
{
HDC hMemDc = CreateCompatibleDC(hDc);
if (hMemDc)
{
BITMAPINFO BitMapInfo;
DWORD *lpBitmapBits;
int nWidth = GetDeviceCaps(hDc, HORZRES);
int nHeight = GetDeviceCaps(hDc, VERTRES);
ZeroMemory(&BitMapInfo.bmiHeader, sizeof(BITMAPINFOHEADER));
BitMapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BitMapInfo.bmiHeader.biWidth = nWidth;
BitMapInfo.bmiHeader.biHeight = nHeight;
BitMapInfo.bmiHeader.biPlanes = 1;
BitMapInfo.bmiHeader.biCompression = BI_RGB;
BitMapInfo.bmiHeader.biBitCount = 32;
hBitmap = CreateDIBSection(hMemDc, &BitMapInfo, DIB_RGB_COLORS, (VOID**)&lpBitmapBits, NULL, 0);
if (hBitmap)
{
HGDIOBJ hOrgObj;
BOOL bSuccess;
hOrgObj = SelectObject(hMemDc, hBitmap);
bSuccess = BitBlt(hMemDc, 0, 0, nWidth, nHeight, hDc, 0, 0, SRCCOPY);
SelectObject(hMemDc, hOrgObj);
if (!bSuccess)
{
DeleteObject(hBitmap);
hBitmap = NULL;
}
}
DeleteDC(hMemDc);
}
ReleaseDC(hWnd, hDc);
}
return hBitmap;
}
使用完之后需要DeleteObject