兼容CDC保存整个屏幕程序以及从此引申的思考.doc

兼容CDC保存整个屏幕程序以及从此引申的思考.doc

ID:50583999

大小:70.50 KB

页数:4页

时间:2020-03-12

兼容CDC保存整个屏幕程序以及从此引申的思考.doc_第1页
兼容CDC保存整个屏幕程序以及从此引申的思考.doc_第2页
兼容CDC保存整个屏幕程序以及从此引申的思考.doc_第3页
兼容CDC保存整个屏幕程序以及从此引申的思考.doc_第4页
资源描述:

《兼容CDC保存整个屏幕程序以及从此引申的思考.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、兼容CDC保存整个屏幕程序以及从此引申的思考杳看文章[原创]兼容CDC保存整个屏幕程序以及从此引屮的思考2009-04-1319:17今天在QQ上和一•个CSDN的专家闲聊,因为他是一所人学的老师,所以,我们还是蛮谈的來的,突然他发來一段代码,让我解释一下原理,我这个郁闷,是不是这位老兄又在故意<1难我(因为之前被他刁难过好几次),力一某一句说的不好,让他抓住把柄把我嘲笑一番就丢人死了,哎,硕着头皮看看吧,谁让人家是老师呢,其实这段程序并不难理解,代码如下,为了方便人家共同学习,我加上了很具体很具体的注释,看看吧,不信你看不懂://HWNDGetDesktopWindow()返冋

2、桌血窗口的句柄CDC*pdeskDC=GetDesktopWindow()->GetDC();//获取桌血窗口上下文环境的指针(句柄)CRectrect;GetDesktopWindowO->GetClientRect(rect);//获取桌面屏幕的客户区域CDCmemDC;//定义一个内存上下文环境//HDCCreateCompatibleDC(HDChdc),该函数创建一•个与指定设备兼容的内存设备上下文环境memDC.CrealeCompalib1eDC(pdeskDC);〃在一个应用程序可以使用内存设备上下文环境进行绘图操作z前,//它必须选择一个高和宽都正确的位图到设备

3、上下文坏境小,//这可以通过使用CreateCompatib1eBitmap函数指定高、宽和色彩组合以满足函数调用的需要。CBitmapbmp;//HBITMAPCreateCompatib1eBitmap(HDChdc,intnWidth,intnHeight)//该函数创建与指定的设备环境相关的设备兼容的位图。bmp.CreateCompat让leBitmap(pdeskDC,red.Width(),rect.Height());〃创建兼容位图,并指定宽高memDC.SelectObject.(&bmp);//将位图选入内存上下文BITMAPbitmapinfo;//定义一个

4、BITMAP结构,此结构定义了逻辑位图的高,宽,颜色格式和位值。bmp.GetBitmap(&bitmapinfo);//木函数用于查看CBitmap对彖的信息。返冋的信息存放在BITMAP结构中。intpanelsize=0;//记录调色板大小if(biLmapinfo.bmBitsPixel<16){//判断是否为真彩色位图//如果位图使用的颜色数1=1不是16那么调色板尺寸为bmBitsPixel*size()f(RGBQUAD)panelsize=pow(2,bitmapinfo.bmBitsPixel*sizeof(RGBQUAD));//RGBQUAD结构标识了像素所

5、用到的颜色数据}BITMAPINFO*pBInfo=(BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);//LocalAlloc函数川來为数据分配局部堆内存//BITMAPINFO结构屮的BITMAPINFOHEADER结构,保存位图信息//填充位图信息头//填充位图信息头代码略去〃从源设备上下文拷贝位图到这个当前设备上下文,即从pdeskdc拷贝位图到memDCmemDC.BitBlt.(0,0,bitmapinfo.bmWidth,bitmapinfo.bmHeight,pdeskDC,0,0,SRCCOPY)

6、;等我加上注释后,准备把我注释后的代码给这位老兄发过去时,他似乎下线了,这家伙,又拿我开涮,门门浪费我宝贵的看电影时间(哈哈,顺便提一句,用PPStream看电影还是蛮不错的),正当我准备继续看电影的时候,这位老兄又出现了。下血是我们接下來的对话。他说:“我的一个学生提出了一个关于这段代码的问题,把我说晕了。”我问:“哪句代码冇问题?”他“屏幕是什么时候保存在位图bmp小的?”我说:"是通过CreateCompatib1eBitmap函数、SelectObject函数和BitBlt.函数这三个函数一起作用下保存在内存设备上下文memDC中的。”他说:“三个函数共同作用?我还有一个

7、问题。”我说:“那你说说第二个问题吧,一•起说出來我一起看看。”他说:SelectObject函数已经将位图bmp放入内存设备上下文memDC当中了,为什么还要用BitBlt.函数再将位图bmp从pdeskDC拷贝到内存设备上下文menDC中呢?这次不是多余了么?”这下我终于明门他的问题原因了,是因为这位老兄没有真正搞清楚位图文件是如何一步步形成的。解释了一下午终于让他清醒了过来。其实这两个问题应该算作一个问题,还是值得去讨论下的,现在我来给各位解释一下这个问题。首先先说一下位图

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。