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