GetDC()与hdc属性值的意义异同

来源:互联网 发布:手机字库修复软件 编辑:程序博客网 时间:2024/05/22 18:58

GetDC()与hdc属性的异同


一、两者所检索的句柄有所不同。
1、GetDC(),始终检索窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,即真正句柄。
2、hDC属性,根据AutoRedraw属性设置值不同检索的句柄有着不同的意义:
 AutoRedraw=True,hDC 将作为持久图形的设备描述体句柄(等价于 Image 属性)。
 AutoRedraw=False,hDC 属性是窗体窗口或 PictureBox 容器的真正的 hDC 值。

即只有在AutoRedraw=False时,hDC属性值与GetDC()检索的句柄值相同。

验证事例:
getdoc(picturebox1.hwnd)
picturebox1.hdc
设置picturebox1的autoredraw属性为True时,两者的值分别为:
302061301
-1325326875
设置picturebox1的autoredraw属性为Fale时,两者的值分别为:
-352251594
-352252594

二、在程序运行中,不论 AutoRedraw 设置为何值,hDC 属性都可以改变。

即每次显示的窗体或picturebox控件时,由GetDC()或hdc获得的值都可能不同。因此,不要将它们赋值于程序的全局变量(Msdn中不建议赋值于变量,尝试后发现其值只是在每次构建时不同,因此我仅不建议赋值于全局变量)。

三、附:相关知识
1、AutoRedraw的简单常识:
对象的 AutoRedraw 属性决定是否用持久图形或通过 Paint 事件重绘对象。
 Windows 运行环境通过给对象的持久图形分配一个句柄来标识它;用 Image 属性可以得到该句柄。
Image 值的存在,不受 AutoRedraw属性设置值影响。

2、持久图形:
存储在内存中的图形方法的输出。
当特定类型的屏幕事件发生时,例如,窗体被隐藏到另一窗口之后的重新显示,持久图形将自动被保存。
当 AutoRedraw 属性被设置为 True 时所绘制的图形是持久的。
AutoRedraw 属性能引起 hDC 属性改变。

3、Image属性:
Image 是指向位图的句柄。
当 AutoRedraw 为 True 时,对象的 hDC 属性成为指向设备描述体的句柄,该设备描述体包含 Image 返回的位图;
当 AutoRedraw 为 True 时,若没有绘任何内容,图象仅显示由 BackColor 属性和图片确定的颜色。

当你试图把一个内存设备上下文环境内的图形拷贝到与其兼容form或picturebox用户区域,却发现不但正常显示出来时,
不妨检查一下AutoRedraw属性的设置值,如果为True,可能就是它在作祟了。

如果你不明白如何修改,请重读一下第一、三条。

原创粉丝点击