// lpRect 为截取的区域
// by lymking@hotmail.com
HBITMAP CopyScrToBitmap(LPRECT lpRect)
{HDC hScrDC=0, hMemDC;
HBITMAP hBitmap, hOldBitmap;
//int nX,nY,xX2,nY2;
// bitmap width&height
int nWidth, nHeight;
// screen resolution
int xScrn, yScrn;
// makesure the rectangle not NULL
if (IsRectEmpty(lpRect))
{
return NULL;
}
// create desktop screen dc
hScrDC = GetDesktopWindow()->GetDC()->m_hDC;/*CreateDC(_T("DISPLAY"), NULL, NULL, NULL);*/
int iOK =1;
if (hScrDC == NULL)
{
iOK = 0;
}
// create mem dc
hMemDC = CreateCompatibleDC(hScrDC);
// get resolutions
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
if(lpRect->left < 0)
lpRect->left = 0;
if (lpRect->top < 0)
lpRect->top = 0;
// 屏幕
nWidth = (lpRect->right - lpRect->left);
nHeight = (lpRect->bottom - lpRect->top);
// create bitmap
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// select new bitmap
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// copy scr dc to mem dc
BitBlt(hMemDC, 0,0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);
// get bitmap handle
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
// clean
DeleteDC(hScrDC);
DeleteDC(hMemDC);
return hBitmap;
}
评论