用gdi 实现屏幕截图功能

本文介绍了如何在C++中利用GDI实现屏幕截图功能。通过获取桌面DC,创建内存DC和内存位图,使用BitBlt或StretchBlt将桌面内容复制到内存DC,从而实现截图并避免屏幕闪烁。提供了在C++ Builder和MFC环境下实现该功能的代码示例链接。
摘要由CSDN通过智能技术生成

    最近在工作中要实现一个截图的功能,由于之前没接触过这类东西,搜索了大部分资料,终于完成了,总结下;

    首先,所谓的桌面截图其实并不是在真正的桌面上截图,只是把当前屏幕的图片复制的自己创建的对话框中,作为对话框的背景,然后在自己的对话框中截图,好了废话不多说了,说说实现了;

   1  要获取到桌面的截图,首先要获取到桌面的DC,得到桌面dc后,根据桌面dc,创建一个内存兼容的内存dc和内存位图bmp,然后把bmp选入当前内存dc,最后调用BitBlt把桌面dc复制到内存dc中(创建内存dc是为了双缓冲,防止屏幕闪烁)。

    

   HDC dcScreen;
   HBITMAP  m_bmpScreen;
   HBITMAP hOldBitmap;
   HDC  m_dcMem;
   dcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);    //创建屏幕设备dc
   m_size.cx =  GetDeviceCaps(dcScreen, HORZRES);
   m_size.cy= GetDeviceCaps(dcScreen, VERTRES);

   m_dcMem = CreateCompatibleDC(dcScreen); //创建与设备dc兼容的内存dc
   m_bmpScreen = CreateCompatibleBitmap(dcScreen, m_size.cx,m_size.cy);//创建于屏幕dc兼容的位图

   hOldBitmap = (HBITMAP)SelectObject(m_dcMem,m_bmpScreen);
   BitBlt(m_dcMem, 0, 0,m_size.cx, m_size.cy,dcScreen, 0, 0, SRCCOPY);
  
2 在对话框的OnPaint函数中,把内存dc复制到对话框dc中,这样对话框就有桌面的图片了

 StretchBlt(dc,0,0,m_size.cx, m_size.cy,

				m_dcMem,
				0,0,m_size.cx, m_size.cy,
				SRCCOPY);
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值