文档详情

Windows屏幕保护程序.pptx

发布:2024-01-25约9.53千字共41页下载文档
文本预览下载声明

Windows屏幕保护程序共41页,您现在浏览的是第1页!VC++程序设计项目实践贾振华Windows屏幕保护程序共41页,您现在浏览的是第2页!第2章Windows屏幕保护程序学习目标:1.屏幕保护基本原理2.如何提高绘图效率3.VC++中对鼠标的控制4.加载图片的方法Windows屏幕保护程序共41页,您现在浏览的是第3页!2.1屏幕保护的基本知识1.屏幕保护程序原理屏幕保护程序就是普通的可执行程序(.exe)。只不过Windows把它换了一个扩展名(.scr),放在了系统目录下,由操作系统调用而已。对WindowsNT和Windows2000这个目录是C:\WINNT\system32,对于Win95,Win98这个目录是C:\Windows和C:\Windows\system。Windows屏幕保护程序共41页,您现在浏览的是第4页!2.1屏幕保护的基本知识2.屏幕保护程序激活的条件(1)在规定时间内没有鼠标或键盘输入(2)当前的活动窗口是标准的WINDOWS应用(3)如果当前活动的程序接管了字参数wParam值为SC_SCREENSAVE的WM_SYSCOMMAND消息并且不传递到DefWindowProc()函数就可以禁止屏幕保护程序。Windows屏幕保护程序共41页,您现在浏览的是第5页!2.2如何提高绘图效率2.2.1显示的图形为什么会闪烁绘图过程大多放在OnDraw()函数或者OnPaint()函数中,OnDraw()函数在进行屏幕显示时是由OnPaint()函数进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint函数,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来在闪。Windows屏幕保护程序共41页,您现在浏览的是第6页!2.2如何提高绘图效率2.2.2如何避免闪烁窗口形成时给窗口的注册类的背景刷赋值为NULL也可以在形成以后修改背景可以重载OnEraseBkgnd(CDC*?pDC)函数,直接返回TRUE这样背景没有了,结果图形显示的确不闪了,但是显示也象前面所说的一样,变得一团乱。Windows屏幕保护程序共41页,您现在浏览的是第7页!2.2如何提高绘图效率2.2.3双缓冲的实现首先给出实现的程序,在OnDraw(CDC*pDC)函数中添加如下代码:CDCMemDC;//首先定义一个显示设备对象CBitmapMemBitmap;//定义一个位图对象//建立与屏幕显示兼容的内存显示设备MemDC.CreateCompatibleDC(NULL);Windows屏幕保护程序共41页,您现在浏览的是第8页!2.2如何提高绘图效率2.2.3双缓冲的实现//先用背景色将位图清除干净,以白色为例MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));//绘图MemDC.MoveTo(……);MemDC.LineTo(……);Windows屏幕保护程序共41页,您现在浏览的是第9页!2.2如何提高绘图效率2.2.3双缓冲的实现其中,函数BitBlt是对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。函数原型:BOOLBitBlt(HDChdcDest,intnXDest,intnYDest,intnWidth,intnHeight,HDChdcSrc,intnXSrc,intnYSrc,DWORDdwRop);其中,各参数含义如下所示:Windows屏幕保护程序共41页,您现在浏览的是第10页!2.2如何提高绘图效率2.2.3双缓冲的实现nXSrc:指定源矩形区域左上角的X轴逻辑坐标。nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。Windows屏幕保护程序共41页,您现在浏览的是第11页!2.2如何提高绘图效率2.2.4提高绘图效率因为多数情况下窗口重绘的产生大多是因为窗口部分被遮挡或者窗口有滚动发生,改变的区域并不是整个图形而只有一小部分,这一部分需要改变的就是pDC中的裁剪区了。因为显示(往内存或者显存都叫显示)比绘图过程的计算要费时得多,有了裁剪区后显示的就只是应该显示的部分,大大提高了显示效率。但是这个裁剪区是MFC设置的,它已经为我们提高了显示效率,在进行复杂图形的绘制时如何进一步提高效率呢?那就只有去掉在裁剪区外的绘图过程了。可以先用pDC-GetClipBox()得到裁剪区,然后在绘图时判断你的图形是否在这个区内,如果在就

显示全部
相似文档