鱼C论坛

 找回密码
 立即注册
查看: 2160|回复: 4

Win32汇编关于WM_PAINT消息处理问题

[复制链接]
发表于 2013-4-25 14:15:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在罗云斌WIN32汇编第200页有段内容不理解:“BeginPaint函数的返回值就是需要刷新区域的hDC.要注意的是:BeginPaint返回的hDC对应的尺寸仅是无效区域,无法用它绘画到这个区域以外的地方去”

书上例子代码:.if        eax ==        WM_PAINT && ecx == hWin1
                        invoke        BeginPaint,hWnd,addr @stPs
                        mov        @hDc,eax
                        invoke        GetClientRect,hWnd,addr @stRect
                        invoke        DrawText,@hDc,addr szText,-1,\
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER
                        invoke        EndPaint,hWnd,addr @stPs
照书上的说法,这段代码只能在无效区域进行绘制,第一次收到WM_PAINT消息的无效区域是整个窗口(由UpdateWindow函数引发),以后收到的WM_PAINT就是窗口被覆盖后,无效区域就是覆盖的区域,照上面那段话理解后,窗口中的一段字符串,会被覆盖的区域抹掉后不会再出现,可实际出现的情况是字符串被覆盖离开后重新出现。

我的理解是书上第194页最下面一段“Windows不会同时将两条WM_PAINT消息放入消息循环,当Windows要放入一条WM_PAINT消息的时候,如果发现已经存在一个无效区域了,那么它只需要把新旧两个无效区域合并计算出一个新的无效区域就可以了。”
所以覆盖窗口每动一次,只发送一个WM_PAINT消息,无效区域选择最大的区域。
不知道理解的对不对,请各位鱼友指点迷津
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-25 16:13:45 | 显示全部楼层
不会但是帮你顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-25 17:06:09 | 显示全部楼层
我还没看到那一页呢,我才看到第五章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-28 00:00:34 | 显示全部楼层
你说的有点乱,  WM_PAINT是窗口需要重绘是由windows发送的消息,为什么窗口被覆盖然后还原后又恢复了  ,原因是又发送了WM_PAINT消息。当消息队列已经有WM_PAINT了,就不在插入了,只是把无效区域进行合并成一个大的区域
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-9 13:45:33 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表