AutoRedraw属性与窗体设备场景的深入探讨[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 sproll 的 blog

(注意当窗体的autoredraw属性为true时窗体的paint事件不会被激发。)

 

在窗体上输出的数字中我们清析地看到,这两个句柄是不同的。其中,窗体的hdc属性是窗体的一个内存设备场景句柄。对于窗体的任何绘图(例如画一条线,一个圆圈等)工作都会写入该内存设备场景。每当该窗体接收到一个paint事件时,它就用该内存设备场景刷新窗体。所以当我们重新显示窗体的时候,它始终能重画窗体上所有的图形。而我们用getdc函数返回的设备场景句柄则是真正意义上的窗体句柄,当前窗体显示什么图形,那么该设备场景的cbitmap对象保存的就是该图形。比如说,我们画了一个圆圈,又用别的窗体将它掩盖了一半,我们又用getdc返回的句柄截获窗体的图片,那么该图片中只有一半的圆圈。

autoredraw属性为false的时候,窗体的内存设备场景就不存在了。由于没有了保存窗体图像信息的内存设备场景,所以窗体就无法确定重显时如何重画窗体,因而就不会去重画被覆盖掉又重显的内容。用getdc函数和窗体的hdc属性返回的句柄是相同的,它们都是窗体真正意义上的设备场景句柄。

本文关键:AutoRedraw
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top