Form.AutoRedraw=True的情况下,如何用API获取其hDC,并且得到的值和Form.hDc属性一样 30
Form.AutoRedraw=True的情况下,如何用API获取其hDC,并且得到的值和Form.hDc属性一样,我用GetDC,GetDCEx获取的值都和Form.h...
Form.AutoRedraw=True的情况下,如何用API获取其hDC,并且得到的值和Form.hDc属性一样,我用GetDC,GetDCEx获取的值都和Form.hDC不同,不能得到窗体上被控件遮盖部位的图像
展开
2个回答
展开全部
Form.AutoRedraw=True的情况下
这是一个特殊的情况,首先 你必须知道 只有和窗口 相关联的设备场景,系统才会把该设备场景中的图像显示到屏幕上面,getdc 是获取的和该窗口关联的设备场景句柄,
现在这种情况,当 AutoRedraw=True 时,Form会单独创建一个设备场景,然后把要画的图像保存到该设备场景中,等窗口有刷屏消息的时候,这时会把这个独立设备场景中的图像复制到 与 Form相关联的设备场景中,然后又会执行 Form_Paint方法(为False这个方法无效),最后才显示到屏幕上面。
所以无法用api 获取到那个Form独立创建设备场景的Hdc,如果有面向对象内存结构基础,倒是可以通过访问对象内存地址读取Hdc
-------------------------------------------几个实例,自己体会下
1、用以下代码来向窗体画一个圆时,什么也看不到。
Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
Private Sub Form_Click()
Form1.AutoRedraw = True
Ellipse Form1.hdc, 0, 0, 100, 100
End Sub
但如果用其他窗体掩盖程序窗体后,让程序窗体再次显示时,图形出现了,这时有窗口有刷屏消息。
2.下面代码尽管图形出现了,但这次的情况正好相反。也就是说,如果用其他窗体掩盖程序窗体后,让程序窗体再次显示时,图形消失了。原因就是没有修改过独立的那个设备场景中的图像,下面只是只修改了窗口的相关联的场景图像(所有是立即显示),当有刷屏消息后会把独立的场景中图像复制 到 关联的场景中
Private Declare Function GetDC& Lib "user32" (ByVal hwnd As Long)
Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
Private Sub Form_Click()
Dim MyDC As Long
Form1.AutoRedraw = True
MyDC = GetDC(Form1.hwnd)
Ellipse MyDC, 0, 0, 100, 100
End Sub
这是一个特殊的情况,首先 你必须知道 只有和窗口 相关联的设备场景,系统才会把该设备场景中的图像显示到屏幕上面,getdc 是获取的和该窗口关联的设备场景句柄,
现在这种情况,当 AutoRedraw=True 时,Form会单独创建一个设备场景,然后把要画的图像保存到该设备场景中,等窗口有刷屏消息的时候,这时会把这个独立设备场景中的图像复制到 与 Form相关联的设备场景中,然后又会执行 Form_Paint方法(为False这个方法无效),最后才显示到屏幕上面。
所以无法用api 获取到那个Form独立创建设备场景的Hdc,如果有面向对象内存结构基础,倒是可以通过访问对象内存地址读取Hdc
-------------------------------------------几个实例,自己体会下
1、用以下代码来向窗体画一个圆时,什么也看不到。
Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
Private Sub Form_Click()
Form1.AutoRedraw = True
Ellipse Form1.hdc, 0, 0, 100, 100
End Sub
但如果用其他窗体掩盖程序窗体后,让程序窗体再次显示时,图形出现了,这时有窗口有刷屏消息。
2.下面代码尽管图形出现了,但这次的情况正好相反。也就是说,如果用其他窗体掩盖程序窗体后,让程序窗体再次显示时,图形消失了。原因就是没有修改过独立的那个设备场景中的图像,下面只是只修改了窗口的相关联的场景图像(所有是立即显示),当有刷屏消息后会把独立的场景中图像复制 到 关联的场景中
Private Declare Function GetDC& Lib "user32" (ByVal hwnd As Long)
Private Declare Function Ellipse& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)
Private Sub Form_Click()
Dim MyDC As Long
Form1.AutoRedraw = True
MyDC = GetDC(Form1.hwnd)
Ellipse MyDC, 0, 0, 100, 100
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道微软是怎么封装hDC的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询