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

本文详细对比了GetDC()函数与hdc属性在Windows编程中的使用区别,包括两者检索的句柄类型及在不同AutoRedraw设置下hdc属性的变化。强调了不要将这些句柄值作为全局变量使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,可能就是它在作祟了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值