wangwum 发表于 2014-8-17 11:30:59

求教小甲鱼,关于在WM_PAINT使用GetDC,ReleaseDC

如题,经过调试发现,当在WM_PAINT中使用GetDC,ReleaseDC时,跳出循环会触发WM_ERASEBKGND消息,并且只发生一次,下次在调用WM_PAINT中的代码后,不会在发生WM_ERASEBKGND消息,我这样的理解对吗?

小甲鱼 发表于 2014-8-17 14:52:42

响应 WM_PAINT 消息使用 BeginPaint 和 EndPaint

小甲鱼 发表于 2014-8-17 14:53:32

{:9_226:}这里羊咩咩转了篇不错的文章:http://bbs.fishc.com/thread-50716-1-1.html

wangwum 发表于 2014-8-17 15:36:54

看过这篇文章,我就是想探究一下。我发现BeginPaint执行后,立刻会引起一个WM_ERASEBKGND消息,并且先去执行完过程调用再回来。而GetDC只会在窗口过程调用后引起一次WM_ERASEBKGND,而无效区域始终存在着,为什么后来就不发生WM_ERASEBKGND了,想知道原因。

计机羊咩咩 发表于 2014-8-17 16:47:53

”WM_ERASEBKGND是有效区域变无效区域时“系统发出的消息然而在WM_PAINT消息内你使用了GetDC和ReleaseDC这对函数请你注意一点ReleaseDC函数不会告诉系统区域已重写且变成有效区域    后果可想而知,系统一直认为这个区域无效   嗯你认真读读双引号的那句话

wangwum 发表于 2014-8-18 15:15:18

那BeginPaint为什么会产生WM_ERASEBKGND消息,不是无效区域变有效区域吗?

wangwum 发表于 2014-8-18 15:16:32

我调试发现,WM_PAINT消息内你使用了GetDC确实会产生一次WM_ERASEBKGND消息。

计机羊咩咩 发表于 2014-8-18 15:43:41

wangwum 发表于 2014-8-18 15:16
我调试发现,WM_PAINT消息内你使用了GetDC确实会产生一次WM_ERASEBKGND消息。

然后你会发现如果PAINT内使用GetDC这种方法只会产生一次WM_ERASEBKGND消息

zhihuzheye 发表于 2014-8-19 15:26:03

先学会规范,再学奇技淫巧不迟!

tlwangxd 发表于 2014-11-25 10:46:53

学习

智商是硬伤 发表于 2015-8-31 09:39:29

{:7_146:}
页: [1]
查看完整版本: 求教小甲鱼,关于在WM_PAINT使用GetDC,ReleaseDC