⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_用vc进行屏幕截取编程.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 2 页
字号:
   //为屏幕设备描述表创建兼容的内存设备描述表
   hMemDC = CreateCompatibleDC(hScrDC);
   // 获得选定区域坐标
   nX = lpRect- >left;
   nY = lpRect- >top;
   nX2 = lpRect- >right;
   nY2 = lpRect- >bottom;
   // 获得屏幕分辨率
   xScrn = GetDeviceCaps(hScrDC, HORZRES);
   yScrn = GetDeviceCaps(hScrDC, VERTRES);
   //确保选定区域是可见的
   if (nX 〈0)
      nX = 0;
   if (nY 〈  0)
      nY = 0;
   if (nX2 > xScrn)
      nX2 = xScrn;
   if (nY2 > yScrn)
      nY2 = yScrn;
   nWidth = nX2 - nX;
   nHeight = nY2 - nY;
   // 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap
 (hScrDC, nWidth, nHeight);
   // 把新位图选到内存设备描述表中
   hOldBitmap = SelectObject(hMemDC, hBitmap);
   // 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight,
 hScrDC, nX, nY, SRCCOPY);
   //得到屏幕位图的句柄
   hBitmap = SelectObject(hMemDC, hOldBitmap);
   //清除 
   DeleteDC(hScrDC);
   DeleteDC(hMemDC);
   // 返回位图句柄
   return hBitmap;
}
   
得到屏幕位图句柄以后,我们
可以把屏幕内容粘贴到剪贴板上.
    if (OpenClipboard(hWnd)) 
     //hWnd为程序窗口句柄
      {
        //清空剪贴板
        EmptyClipboard();
        //把屏幕内容粘贴到剪贴板上,
        hBitmap 为刚才的屏幕位图句柄
        SetClipboardData(CF_BITMAP, hBitmap);
        //关闭剪贴板
        CloseClipboard();
      }
   我们也可以把屏幕内容以位图格式存到磁盘文件上.
      
int SaveBitmapToFile(HBITMAP hBitmap , 
	LPSTR lpFileName) //hBitmap 为刚才的屏幕位图句柄
{    	 //lpFileName 为位图文件名
	HDC            hDC;         
  	 //设备描述表
      int            iBits;      
 	//当前显示分辨率下每个像素所占字节数
	WORD            wBitCount;   
   	//位图中每个像素所占字节数
      //定义调色板大小, 位图中像素字节大小 ,
      位图文件大小 , 写入文件字节数
	DWORD           dwPaletteSize=0,
				dwBmBitsSize,
				 dwDIBSize, dwWritten;
	BITMAP          Bitmap;        
	//位图属性结构
	BITMAPFILEHEADER   bmfHdr;        
	//位图文件头结构
      BITMAPINFOHEADER   bi;            
	//位图信息头结构 
	LPBITMAPINFOHEADER lpbi;          
	//指向位图信息头结构
      HANDLE          fh, hDib, hPal,hOldPal=NULL;
	//定义文件,分配内存句柄,调色板句柄
  
   //计算位图文件每个像素所占字节数
   hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * 
GetDeviceCaps(hDC, PLANES);
   DeleteDC(hDC);
   if (iBits 〈 = 1)
      wBitCount = 1;
   else if (iBits 〈 = 4)
      wBitCount = 4;
   else if (iBits 〈  = 8)
      wBitCount = 8;
   else if (iBits 〈 = 24)
      wBitCount = 24;
   //计算调色板大小
   if (wBitCount 〈 = 8)
      dwPaletteSize = (1 〈 〈   wBitCount) *
      sizeof(RGBQUAD);
   
   //设置位图信息头结构
   GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
   bi.biSize            = sizeof(BITMAPINFOHEADER);
   bi.biWidth           = Bitmap.bmWidth;
   bi.biHeight          = Bitmap.bmHeight;
   bi.biPlanes          = 1;
   bi.biBitCount         = wBitCount;
   bi.biCompression      = BI_RGB;
   bi.biSizeImage        = 0;
   bi.biXPelsPerMeter     = 0;
   bi.biYPelsPerMeter     = 0;
   bi.biClrUsed         = 0;
   bi.biClrImportant      = 0;

   dwBmBitsSize = ((Bitmap.bmWidth *
    wBitCount+31)/32)* 4
	 *Bitmap.bmHeight ;
   //为位图内容分配内存
   hDib  = GlobalAlloc(GHND,dwBmBitsSize+
	dwPaletteSize+sizeof(BITMAPINFOHEADER));
   lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
   *lpbi = bi;
   // 处理调色板   
   hPal = GetStockObject(DEFAULT_PALETTE);
   if (hPal)
   {
      hDC  = GetDC(NULL);
      hOldPal = SelectPalette(hDC, hPal, FALSE);
      RealizePalette(hDC);
   }
   // 获取该调色板下新的像素值
   GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
	 (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
    +dwPaletteSize,
	 (BITMAPINFOHEADER *)
    lpbi, DIB_RGB_COLORS);
   //恢复调色板   
   if (hOldPal)
   {
      SelectPalette(hDC, hOldPal, TRUE);
      RealizePalette(hDC);
      ReleaseDC(NULL, hDC);
   }
   //创建位图文件    
fh = CreateFile(lpFileName, GENERIC_WRITE, 
0, NULL, CREATE_ALWAYS,
         FILE_ATTRIBUTE_NORMAL | FILE_
         FLAG_SEQUENTIAL_SCAN, NULL);
   if (fh == INVALID_HANDLE_VALUE)
      return FALSE;
   // 设置位图文件头
   bmfHdr.bfType = 0x4D42;  // "BM"
dwDIBSize    = sizeof(BITMAPFILEHEADER) 
           + sizeof(BITMAPINFOHEADER)
	        + dwPaletteSize + dwBmBitsSize;  
   bmfHdr.bfSize = dwDIBSize;
   bmfHdr.bfReserved1 = 0;
   bmfHdr.bfReserved2 = 0;
   bmfHdr.bfOffBits = (DWORD)sizeof
   (BITMAPFILEHEADER) 
      + (DWORD)sizeof(BITMAPINFOHEADER)
     + dwPaletteSize;
   // 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof
(BITMAPFILEHEADER), &dwWritten, NULL);
   // 写入位图文件其余内容
   WriteFile(fh, (LPSTR)lpbi, dwDIBSize, 
   &dwWritten, NULL);
   //清除   
   GlobalUnlock(hDib);
   GlobalFree(hDib);
   CloseHandle(fh);
}
</PRE>
            <SCRIPT language=JavaScript1.2 src=""></SCRIPT>
            <BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0 
width=770>
  <TBODY>
  <TR bgColor=#006699>
    <TD align=middle bgColor=#006699 id=white><FONT 
    color=#ffffff>对该文的评论</FONT></TD>
    <TD align=middle>
      <SCRIPT src="CSDN_文档中心_用VC进行屏幕截取编程.files/readnum.htm"></SCRIPT>
    </TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_用VC进行屏幕截取编程.files/ico_pencil.gif" width=16> 
      </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; Kevin_zhong <I>(2000-12-23 10:06:42)</I> 
    </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>不错的代码,谢谢! 
<BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TH bgColor=#006699 id=white><FONT 
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD>你没有登陆,无法发表评论。 请先<A 
      href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=2090">登陆</A> 
      <A 
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>

<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
  <TBODY>
  <TR align=middle>
    <TD height=10 vAlign=bottom><A 
      href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A 
      href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A 
      href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A 
      href="http://www.csdn.net/english">English</A> </TD>
    <TD align=middle rowSpan=3><A 
      href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG 
      border=0 height=48 src="CSDN_文档中心_用VC进行屏幕截取编程.files/biaoshi.gif" 
      width=40></A></TD></TR>
  <TR align=middle>
    <TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
  <TR align=middle>
    <TD vAlign=top><FONT face=Verdana>Copyright &copy; CSDN.net, Inc. All rights 
      reserved</FONT></TD></TR>
  <TR>
    <TD height=15></TD>
    <TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -