社区
界面
帖子详情
OnEraseBkGnd与OnPaint的联系是什么?
jingss_3
2009-10-12 02:59:03
OnEraseBkGnd与OnPaint的联系是什么?
...全文
6811
60
打赏
收藏
OnEraseBkGnd与OnPaint的联系是什么?
OnEraseBkGnd与OnPaint的联系是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
60 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tongdawp
2012-08-11
打赏
举报
回复
回答太给力了!
[Quote=引用 2 楼 的回复:]
问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省
的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,
由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd
函数,这时就和窗口缺省的背景刷相关了.缺省的
OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况
下是白刷),而随后你又自己重画背景……
[/Quote]
zhiweishq
2011-08-12
打赏
举报
回复
如果这个成立,那使用双缓冲画图的话也出现闪屏也就解析通了
zhiweishq
2011-08-12
打赏
举报
回复
[Quote=引用 52 楼 adrom 的回复:]
首先,tr0j4n是好心人,写得这么长。但好像不对哦。
应该是这样的吧,当Windows确定客户区需要重绘时,它首先发送WM_ERASEBKGND消息给窗口过程,由WM_ERASEBKGND消息的默认处理用白色画刷刷除背景,然后再发送WM_PAINT消息给窗口过程,由WM_PAINT消息的响应程序负责绘画客户区内容。或者说,当Windows确定客户区需要重绘时,它分别发送WM_ERASEBK……
[/Quote]
感觉后面说的有点对,在Onpaint的前后都加上一个判断OnPaint是否完成的判断,如果Onpaint完成,才执行InvalidateRect,之后还出现闪屏,就只能说是InvalidateRect后,Onpaint还没完全执行而没显示才出现闪屏
cduoa
2011-04-10
打赏
举报
回复
好强!
zhutouailanzhu
2011-03-30
打赏
举报
回复
学习了,谢谢无私奉献,顶一个
birdsinging
2011-01-27
打赏
举报
回复
[Quote=引用 52 楼 adrom 的回复:]
首先,tr0j4n是好心人,写得这么长。但好像不对哦。
应该是这样的吧,当Windows确定客户区需要重绘时,它首先发送WM_ERASEBKGND消息给窗口过程,由WM_ERASEBKGND消息的默认处理用白色画刷刷除背景,然后再发送WM_PAINT消息给窗口过程,由WM_PAINT消息的响应程序负责绘画客户区内容。或者说,当Windows确定客户区需要重绘时,它分别发送WM_ERASEBK……
[/Quote]
综合tr0j4n和你说的,受教了。继续思考中……
adrom
2011-01-25
打赏
举报
回复
首先,tr0j4n是好心人,写得这么长。但好像不对哦。
应该是这样的吧,当Windows确定客户区需要重绘时,它首先发送WM_ERASEBKGND消息给窗口过程,由WM_ERASEBKGND消息的默认处理用白色画刷刷除背景,然后再发送WM_PAINT消息给窗口过程,由WM_PAINT消息的响应程序负责绘画客户区内容。或者说,当Windows确定客户区需要重绘时,它分别发送WM_ERASEBKGND和WM_PAINT消息,由这两个消息的响应程序分别负责刷除背景和重画客户内容。
至闪烁的问题,是由于刷除背景以后,在WM_PAINT未执行完成之前,windows已把视频卡的缓存输出到屏幕上了。
zlei201314
2010-12-15
打赏
举报
回复
[Quote=引用 2 楼 tr0j4n 的回复:]
问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省
的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,
由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd
函数,这时就和窗口缺省的背景刷相关了.缺省的
OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况
下是白刷),而随后你又自己重画背景……
[/Quote]
好人啊
GONGDALE
2010-12-12
打赏
举报
回复
请问各位大侠,是不是在窗口刚创建的时候就会调用OnEraseBkgnd,而并没使改变窗口大小。否则在OnEraseBkgnd中改变的背景为什么在窗口第一次创建时就会显示出来,而不是先显示白背景而后改变窗口大小后显示改变的背景?????
dj419
2010-11-25
打赏
举报
回复
顶,学习,膜拜
艾雨伞
2010-08-19
打赏
举报
回复
群英荟萃!赞一下!
大林1314
2010-08-05
打赏
举报
回复
学习了不少知识,
chenjin0624
2010-07-23
打赏
举报
回复
很感谢这么详细!
cxzgb123
2010-07-12
打赏
举报
回复
2楼讲的很彻底,现在我看来还是受益匪浅..顶!
shelleyeric
2010-06-14
打赏
举报
回复
二楼和三楼的回复怎么看不了???
shamohuangyuan
2010-06-12
打赏
举报
回复
受益匪浅!应该顶!
Bestrem_9
2010-05-18
打赏
举报
回复
不错,我们需要你们。。。
lichaojl
2010-05-17
打赏
举报
回复
顶 一下,厉害
ycc892009
2010-05-07
打赏
举报
回复
我试了在OnEraseBkGround函数里重绘或者在onpaint中重绘并重载onEraseBkGround返回true效果都是一样的,好像都没有很么区别的。并且还视乎前者刷新的速度还慢一点也。不过程序确实是先运行到onEraseBKGround函数先的。呵呵
coyer
2009-12-08
打赏
举报
回复
我也知道,不过楼上的几位写的太详细了,我写不了这么详细。
加载更多回复(36)
【转】绘制_On
Paint
和On
Erase
Bkgnd
的
联系
在VC++中常用的On
Paint
和On
Erase
Bkgnd
,在这篇简短的文档中,粗略的讲解了一下两者的
联系
,旨在给大家一点启发与提示、
用实验理解 Invalidate,InvalidateRect,On
Erase
Bkgnd
(CDC* pDC),On
Paint
() 之间的关系
用实验理解 Invalidate,InvalidateRect,On
Erase
Bkgnd
(CDC* pDC),On
Paint
() 之间的关系,调试的时候先点击开始,然后注意看窗口的标题栏 等过了一段时间后,分别点击其他三个按钮,最好用vs2003调试 vs2013也行
On
Paint
()的工作原理
MFC中改变对话框背景的几个消息函数的调用顺序、VC中On
Paint
()的工作原理.
易语言窗口复制模块
窗口复制模块,取复制窗口标记,复制整个窗口,复制控件,处理随意移动,CopyWindow_OnMessage,CopyWindow_CallSrcWindowProc,CopyWindow_OnDestroy,CopyWindow_OnLButtonDown,CopyWindow_On
Erase
Bkgnd
,CopyWindow_...
VC++做异形窗口 透明效果
标准Windows应用程序窗口一般为带有标题栏的浅灰色矩形外观,因而“异形”对话框/窗口也主要是颜色与外形上动手脚。改变背景颜色 改变对话框(窗口)的背景颜色是最简单的改变Windows应用程序外观的方法,根据...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章