您的位置:首页 > 其它

截取屏幕图

2015-07-04 17:40 253 查看
void CtestDlg::OnBnClickedBtnOk()
{
HWND hwnd = ::GetDesktopWindow();
RECT rect;
::GetClientRect(hwnd,&rect);

CClientDC *pDC=new CClientDC(this);
CBitmap Bitmap;
HBITMAP hBitmap=CopyScreenToBitmap(&rect);
Bitmap.Attach(hBitmap);
CDC DCCompatible;
DCCompatible.CreateCompatibleDC(pDC);
DCCompatible.SelectObject(&Bitmap);
BITMAP bmInfo;
Bitmap.GetObject(sizeof(bmInfo),&bmInfo);
pDC->BitBlt(0,0,bmInfo.bmWidth,bmInfo.bmHeight, &DCCompatible, 0,0,SRCCOPY);
delete pDC;
}

HBITMAP CtestDlg::CopyScreenToBitmap(LPRECT lpRect)
{
if (IsRectEmpty(lpRect))
return NULL;

//为屏幕创建设备描述表
HDC hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
//为屏幕设备描述表创建兼容的内存设备描述表
HDC hMemDC = CreateCompatibleDC(hScrDC);

// 获得选定区域坐标
int nX=lpRect->left;
int nY=lpRect->top;
int nX2=lpRect->right;
int nY2=lpRect->bottom;

// 获得屏幕分辨率
int xScrn=GetDeviceCaps(hScrDC, HORZRES);
int yScrn=GetDeviceCaps(hScrDC, VERTRES);

//确保选定区域是可见的
if(nX<0) nX= 0;
if(nY<0) nY= 0;
if(nX2>xScrn) nX2 = xScrn;
if(nY2>yScrn) nY2 = yScrn;

// 位图宽度和高度
int nWidth = nX2 - nX;
int nHeight = nY2 - nY;

//创建一个与屏幕设备描述表兼容的位图
HBITMAP hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
//把新位图选到内存设备描述表中
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);

//把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);
//得到屏幕位图的句柄
hBitmap=(HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: