大家知道autoredraw是设置窗体是否重画的。那为什么为false窗体上的图形就不会被重画,而为true则窗体在被覆盖后再显示,窗体上的图形仍旧在?
这个问题其实与窗体的设备场景有直接的关系。即使没接触过windows gdi开发的朋友也一定听说过设备场景(device context),设备场景是用来控制窗体图形显示方式的对象。比如,我们可以通过设置设备场景的画笔对象来控制在窗体上的线条的颜色、粗细,设置区域对象来控制窗体的外形,比如说将窗体变成五角形,星形,甚至任何乱七八糟的形状,可以设置剪切区并加一点代码就可以将窗体变成透明的,或者通过cbitmap对象来截获窗体的图象——而我们今天讨论的是如何在autoredraw属性的两种设置下返回我们所需的设备场景句柄。
窗体有这么几个属性需要复习一下:hdc——窗体的设备场景;窗体image对象的handle属性——窗体前景画面图像的句柄;窗体picture对象的handle属性——窗体背景图像的句柄。当我们将窗体的autoredraw属性设置为true时,窗体的设备场景其实存在两个。这可以以以下代码证实:
private sub form_click()
dim ldc as long
ldc = getdc(me.hwnd) ‘getdc是一个api函数,它返回某窗体的设备场景。请用api text viewer加入该函数的声明
print me.hdc
print ldc
end sub