您的位置:首页 > 编程语言 > C语言/C++

利用MFC制作屏幕抓取图像

2014-12-07 13:14 381 查看
首先给出我们的本次实例的demo



然后我们在类视图的头文件中添加成员变量

BOOL bTakeScreen;  //判断是否点击
HBITMAP m_hbmp;  //位图句柄

然后为抓图中整屏添加消息响应函数   代码如下

void CChildView::On32771()

{
// TODO:  在此添加命令处理程序代码

bTakeScreen = TRUE;
m_hbmp = TakeScreen();
Invalidate();

}

TakeScreen函数的代码如下:

HBITMAP CChildView::TakeScreen(){
HWND hwnd = ::GetDesktopWindow();
HDC hScreenDC = ::GetDC(hwnd);
HDC memdc = ::CreateCompatibleDC(hScreenDC);
RECT rect;

::GetWindowRect(hwnd , &rect);

SIZE screensize;
screensize.cx = rect.right - rect.left;
screensize.cy = rect.bottom - rect.top;

HBITMAP bitmap = ::CreateCompatibleBitmap(hScreenDC, screensize.cx, screensize.cy);
HGDIOBJ hOldBmp = ::SelectObject(memdc, bitmap);
::BitBlt(memdc, 0, 0, screensize.cx, screensize.cy, hScreenDC, rect.left, rect.top, SRCCOPY);

::SelectObject(memdc, hOldBmp);
::DeleteObject(memdc);
::ReleaseDC(hwnd, hScreenDC);

return bitmap;

}

  然后在WM_PAINT消息响应函数中添加代码

void CChildView::OnPaint() 

{
CPaintDC dc(this); // 用于绘制的设备上下文

// TODO:  在此处添加消息处理程序代码

if (bTakeScreen){
CBitmap *pbitmap;
pbitmap = CBitmap::FromHandle(m_hbmp);
CDC memdc;
memdc.CreateCompatibleDC(&dc);

CBitmap *pOldBitmap = memdc.SelectObject(pbitmap);
BITMAP bmp;
pbitmap->GetBitmap(&bmp);
dc.BitBlt(10, 10, bmp.bmWidth, bmp.bmHeight, &memdc, 0, 0, SRCCOPY);

memdc.SelectObject(pOldBitmap);

}

// 不要为绘制消息而调用 CWnd::OnPaint()

}

如果要实现屏幕的时候响应,可以在上面的抓屏响应函数中添加定时器来完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC c++