`
netcome
  • 浏览: 465324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在VC中如何实现抓取整个屏幕图象

阅读更多

在谈程序之前,先介绍一下位图的基本结构

       256色以及更低色的位图,一般由三部分组成,一是位图信息头,定义了位图的大小等信息,二是颜色表,说明了位图中各个象素点红,绿,蓝三原色各个分量的值,三是位图的象素数据块,定义了位图中每个象素点的数据,它与第二条的颜色信息一起构成了图形的最终显示.

       而对于大于256色的位图,一般由两部分组成,一是位图信息头,而是位图的象素快, 他定义了每个象素点的数据以及各个象素点的红,绿,蓝三原色分量.

       有了这些之后,开始写程序实践一下吧

       首先新建一个基于单文档界面的MFC应用程序,在编辑菜单项下建一个IDM_EDIT_SCREEN的子项,名为抓取屏幕,为它添加消息响应函数(在视图类中),然后在视类中定义两个私有的成员变量

   HDC m_hDcCompatible          //用来保存兼容DC设备上下文
      HBITMAP m_hBitmap;              //用来保存位图句柄
void CTestView::OnEditScreen()
{
      HDC    hdc = ::GetDC();
      m_hDcCompatible = ::CreateCompatible(hdc);     //创建兼容设备上下文DC
      m_hBitmap = ::CreateCompatibleBitmap(hdc,GetDevice(hdc,HORZRES),GetDeviceCaps(hdc,VERTRES));
      ::SelectObject(m_hDcCompatible,m_hBitmap);//将兼容位图选入兼容设备中
      ::BitBlt(m_hdcCompatible,0,0,GetDeviceCaps(dc,HORZRES),
   GetDeviceCaps(dc,HORZRES),dc,0,0,SRCCOPY);//将位图数据拷贝到兼容设备中
   HCURSOR hCursor=GetCursor();
 POINT ptCursor;
 GetCursorPos(&ptCursor);
    //获取光标的图标数据
 ICONINFO IconInfo;
 if (GetIconInfo(hCursor, &IconInfo))
 {
  ptCursor.x -= ((int) IconInfo.xHotspot);
  ptCursor.y -= ((int) IconInfo.yHotspot);
  if (IconInfo.hbmMask != NULL)
   DeleteObject(IconInfo.hbmMask);
  if (IconInfo.hbmColor != NULL)
   DeleteObject(IconInfo.hbmColor);
 }
 //在兼容设备描述表上画出该光标
 DrawIconEx(
  m_hdcCompatible,         // handle to device context
  ptCursor.x, ptCursor.y,
  hCursor,         // handle to icon to draw
  0,0,          // width of the icon
     0,           // index of frame in animated cursor
  NULL,          // handle to background brush
  DI_NORMAL | DI_COMPAT      // icon-drawing flags
  );
 //使窗口无效,调用OnDraw重画窗口
 ::ReleaseDC(m_hWnd,dc);
 Invalidate();
}
 

然后在ONDRAW中输出图形

void CGrabScreenView::OnDraw(CDC* pDC)
{
 CGrabScreenDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 SelectObject(pDC->m_hDC,m_hBmScreen);
 BitBlt(pDC->m_hDC,0,0,GetSystemMetrics(SM_CXSCREEN),
   GetSystemMetrics(SM_CXSCREEN),m_hdcCompatible,0,0,SRCCOPY);

}
 


分享到:
评论

相关推荐

    VC-basic-2.rar_C++_图像 区域_屏幕图像

    本文将给出VC++6.0下实现抓取整个屏幕图像及光标区域的具体步骤及程序代码。

    VC/MFC抓屏

    VC/MFC 抓取屏幕、按指定长宽抓取、抓取后的图像以jpg保存在D盘

    VC 抓图、截屏模块源码.rar

    VC 抓图、截屏模块源码,作者:徐景周,功能:可以轻易抓取屏幕上任意你想要抓取的活动窗口,按F3键将选中图像复制到系统剪切板中。  操作方法:点击按钮后开始抓取图像,用鼠标选中您要抓取的图像范围后(鼠标会...

    VC/MFC 抓屏

    VC/MFC做的抓屏,并把抓取的图片保存为JPG图像,可以给各位做个参考

    远程屏幕抓取

    用vC6.0 语言编写的,C/S 结构,用于远程抓取指定IP电脑屏幕内容源代码。

    抓取窗口图形到剪贴板 vc6 0源码

    打开mouse下工程,编译运行,点击开始抓图,然后移动鼠标到要抓图的窗口,点击鼠标中键抓图到剪贴板. 本程序是在贺成士的"一个简单的鼠标钩子程序"基础上做的.

    VC开发MFC局域网屏幕监控系统完美版

    该模块主要用于抓取屏幕信息,进行数据压缩,然后划分数据报,向服务器端发送数据,并等待服务器发来的确认信息。  服务器端模块 该模块主要用于接收客户端发送的数据报,然后向客户端发送确认信息,接着组合数据...

    vc实例精通源码,windows基本控件的使用Demo

    08_CaptureVideo 在VC中实现视频采集及截图功能。 第17章(\ Chapter17) 示例描述:本章介绍VC6在ActiveX方面的应用技术。 01_MyActiveX 创建ActiveX控件。 02_MyActiveX2 为ActiveX控件增加属性和方法。...

    VC++截图、抓屏程序

    内容索引:VC/C++源码,图形处理,抓屏,截图,屏幕捕获 VC++截图程序,可以抓取当前屏幕,完成按下键盘的“PringScreenSysRq“键的...不同的是,这个程序还可以在抓取框中滚动抓取来的屏幕,可将其直接保存为BMP位图文件。

Global site tag (gtag.js) - Google Analytics