VC++实现屏幕截取编程.pdf

上传人:qwe****56 文档编号:70021313 上传时间:2023-01-14 格式:PDF 页数:5 大小:119.76KB
返回 下载 相关 举报
VC++实现屏幕截取编程.pdf_第1页
第1页 / 共5页
VC++实现屏幕截取编程.pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《VC++实现屏幕截取编程.pdf》由会员分享,可在线阅读,更多相关《VC++实现屏幕截取编程.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.ComVC+VC+VC+VC+实现屏幕截取编程实现屏幕截取编程该文档由国内顶级该文档由国内顶级 ITIT 视频网络编程教育平台整理发布视频网络编程教育平台整理发布屏幕截取是令人比较感兴趣的事情.虽然现在有不少应用程序如 HYPERSNAP 等可以用来截取你所喜欢的屏幕画面,但是如果能把这个功能加到自己的程序中,就更能利用它强大的作用.-下面用 VC 来逐步介绍在 Windows95下的实现过程.首先我们要确定屏幕截取的区域,用LPRECT结构来定义.

2、可以截取一个窗口,或整个屏幕.以下代码把选定的屏幕区域拷贝到位图中.HBITMAP CopyScreenToBitmap(LPRECT lpRect)/lpRect 代表选定区域HDC hScrDC,hMemDC;/屏幕和内存设备描述表HBITMAP hBitmap,hOldBitmap;/位图句柄int nX,nY,nX2,nY2;/选定区域坐标int nWidth,nHeight;/位图宽度和高度int xScrn,yScrn;/屏幕分辨率/确保选定区域不为空矩形if(IsRectEmpty(lpRect)return NULL;/为屏幕创建设备描述表hScrDC=CreateDC(DIS

3、PLAY,NULL,NULL,NULL);/为屏幕设备描述表创建兼容的内存设备描述表hMemDC=CreateCompatibleDC(hScrDC);/获得选定区域坐标nX=lpRect-left;nY=lpRect-top;nX2=lpRect-right;nY2=lpRect-bottom;/获得屏幕分辨率xScrn=GetDeviceCaps(hScrDC,HORZRES);yScrn=GetDeviceCaps(hScrDC,VERTRES);浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSi

4、n.Com/确保选定区域是可见的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,hSc

5、rDC,nX,nY,SRCCOPY);/得到屏幕位图的句柄hBitmap=SelectObject(hMemDC,hOldBitmap);/清除DeleteDC(hScrDC);DeleteDC(hMemDC);/返回位图句柄return hBitmap;得到屏幕位图句柄以后,我们可以把屏幕内容粘贴到剪贴板上.if(OpenClipboard(hWnd)/hWnd 为程序窗口句柄/清空剪贴板EmptyClipboard();/把屏幕内容粘贴到剪贴板上,hBitmap 为刚才的屏幕位图句柄SetClipboardData(CF_BITMAP,hBitmap);/关闭剪贴板CloseClipboa

6、rd();我们也可以把屏幕内容以位图格式存到磁盘文件上.int SaveBitmapToFile(HBITMAP hBitmap,LPSTR lpFileName)/hBitmap 为刚才的屏幕位图句柄浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com/lpFileName 为位图文件名HDC hDC;/设备描述表int iBits;/当前显示分辨率下每个像素所占字节数WORD wBitCount;/位图中每个像素所占字节数/定义调色板大小,位图中像素字节大小,位图文件大小,写入文件字节数DW

7、ORD 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,BITS

8、PIXEL)*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=siz

9、eof(BITMAPINFOHEADER);bi.biWidth=Bitmap.bmWidth;bi.biHeight=Bitmap.bmHeight;浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Combi.biPlanes=1;bi.biBitCount=wBitCount;bi.biCompression=BI_RGB;bi.biSizeImage=0;bi.biXPelsPerMeter=0;bi.biYPelsPerMeter=0;bi.biClrUsed=0;bi.biClrImpo

10、rtant=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

11、,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(lpFileN

12、ame,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMALFILE_FLAG_SEQUENTIAL_SCAN,NULL);if(fh=INVALID_HANDLE_VALUE)return FALSE;/设置位图文件头浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.Com浪曦网-国内顶级 IT 视频网络编程教育平台 Www.LangSin.CombmfHdr.bfType=0 x4D42;/BMdwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)

13、+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);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁