利用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()
}
如果要实现屏幕的时候响应,可以在上面的抓屏响应函数中添加定时器来完成
然后我们在类视图的头文件中添加成员变量
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()
}
如果要实现屏幕的时候响应,可以在上面的抓屏响应函数中添加定时器来完成
相关文章推荐
- 利用vc抓取屏幕图像
- 利用Adorner制作用于图像裁切的选择框
- MFC 抓取窗口或屏幕位图 并保存
- VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)
- MFC界面--利用CHtmlView和HTML制作新风格的界面(包括CView和Dialog)
- 利用Canvas API制作图像滤镜
- 利用Delphi的Tbitmap控件抓取屏幕图象
- 利用MFC的Picture控件显示和处理图像
- MFC利用双缓冲实现屏幕无闪烁刷新
- 利用MFC和opencv读取视频显示图像方法
- PowerShell定时抓取屏幕图像
- 利用CBitmap将图像快速显示到屏幕上
- MFC中将控件保存成图片 && MFC中利用GDI+在控件上绘图,把图像保存成图片
- 利用双缓冲解决屏幕图像闪烁问题
- MFC入门指导—图像滚动刷新并克服屏幕闪烁
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- 抓取屏幕图像及光标的程序分析
- 利用CBitmap将图像快速显示到屏幕上
- OpenCV学习 利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- 利用MFC中的picture control 控件显示图像