在线等,请教WM_ERASEBKGND!

gxhxue 2006-12-07 02:36:52
我知道WM_ERASEBKGND是当一个窗口的背景必须被擦去的时候被触发,但是哪个地方是窗体的背景呢?就是那个用户区中显示的部分么?还是其他地方?如果是用户区,为了不闪烁,是不是在用Bitblt()函数或者directx中的Bltfast()函数在窗体中画图时(先内存中画好,在copy到前面。),也要响应WM_ERASEBKGND消息?应该在响应代码中加入什么代码才能不闪烁?
谢谢!
...全文
258 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘雨 2006-12-08
  • 打赏
  • 举报
回复
WM_ERASEBKGND消息被触发的时机

以View举例
当窗体被完全遮挡的时候,不触发,切换回前端的时候,触发,
当窗体被部分遮挡的时候,不触发,切换回前端的时候,触发
当没有滚动条的时候不触发,滚动条滚动的时候触发

闪烁与此有关,当你仅仅擦除,有改变的地方的背景,闪烁会很小,主要是如何计算需要擦除的区域。如果不加选择的直接擦除所有的区域clientrect,就容易闪烁了
whatabig 2006-12-08
  • 打赏
  • 举报
回复
顶楼上。
闪烁-〉就是用白刷子刷了一下,然后再画。
WM_ERASEBKGND消息里,你画完后,return TRUE; 不用白刷子刷。
booklove 2006-12-08
  • 打赏
  • 举报
回复
不闪烁用双缓冲,WM_ERASEBKGND消息里 return TRUE;
巨巨 2006-12-08
  • 打赏
  • 举报
回复
是啊!

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧