社区
Windows SDK/API
帖子详情
UnSigned(僵哥) 主窗口很闪
sanguomi
2009-03-18 11:59:58
主窗口很多控件上都写了重绘代码,每次一刷新什么的主窗口就很闪,特别是用IE的工具里的清除历史记录。我把那些控件的双缓冲也都开了,WM_Erasebkgnd消息被我
返回1。
我用Sp++去截消息,WM_SETTINGCHANGE, WM_GetMinMaxINfo, wm_notify 每次闪的时候,这三消息出现的频率最高,我把前边俩个都截了,效果稍微好点点
分只有这么多了,没100分发不了专家帖。
...全文
238
23
打赏
收藏
UnSigned(僵哥) 主窗口很闪
主窗口很多控件上都写了重绘代码,每次一刷新什么的主窗口就很闪,特别是用IE的工具里的清除历史记录。我把那些控件的双缓冲也都开了,WM_Erasebkgnd消息被我 返回1。 我用Sp++去截消息,WM_SETTINGCHANGE, WM_GetMinMaxINfo, wm_notify 每次闪的时候,这三消息出现的频率最高,我把前边俩个都截了,效果稍微好点点 分只有这么多了,没100分发不了专家帖。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sanguomi
2009-04-09
打赏
举报
回复
发现最主要的原因 是覆盖了CreateParams函数,然后加了个WS_EX_TRANSPARENT
结帖
sanguomi
2009-03-20
打赏
举报
回复
[Quote=引用 17 楼 xiaocha 的回复:]
wm_notify 很多可能是重复事件造成的,
比如说 A.OnChange 有 B.Caption := 'xxx',
造成 B 的OnChange,而 B.OnChange 中又改写了 A 或 C 的OnChange
从而可能造成一个控件的多次重绘!
仔细检查一下事件处理代码,可能有帮助
[/Quote]
我测试过,确实有这现象
sanguomi
2009-03-20
打赏
举报
回复
[Quote=引用 20 楼 bob008 的回复:]
我以前也实验过拦截清除背景的消息,事实上是很没效率的,我的资源里面有个进程管理器里面用到了个TBUTFORM,你可以看看我是怎么画的,刚开始我也象你一样拦截什么WM_ERASEBKGND ,双缓冲等等。。。 不过后来经过实验,发现那些根本就垃圾的要死,就好象QQ的窗体大多用的绘制方式,极其消耗资源,是非常落后的绘制手法。
[/Quote]
你发个链节吧,我看不到哦
bob008
2009-03-20
打赏
举报
回复
我以前也实验过拦截清除背景的消息,事实上是很没效率的,我的资源里面有个进程管理器里面用到了个TBUTFORM,你可以看看我是怎么画的,刚开始我也象你一样拦截什么WM_ERASEBKGND ,双缓冲等等。。。 不过后来经过实验,发现那些根本就垃圾的要死,就好象QQ的窗体大多用的绘制方式,极其消耗资源,是非常落后的绘制手法。
bob008
2009-03-20
打赏
举报
回复
我要告诉你的是如果是DELPHI的,根本就不需要双缓冲,因为如果你看TFORM的源代码,你可以看到,实际上它根本就做过创建兼容场景,兼容位图的工作,你再搞个双缓冲简直就是没效率,多做了一次无用功,你要做的仅仅是在绘制前锁定,绘制完UNLOCK。把不必要的清除给改改,该成,扫描线清除的方式,这样效率就高多了。 Refresh().是重新绘制整个的,不建议使用,应该使用校验方式。
starluck
2009-03-20
打赏
举报
回复
[Quote=引用 16 楼 sanguomi 的回复:]
引用 14 楼 ahjoe 的回复:
我通常不调用Refresh().
而是调用 Invalidate().
你也应该这样做.
我昨天已经这么改了, 效果不大 ,估计问题还是窗口控件太多了
[/Quote]
呵呵,三國,看下你局部刷新代碼,我覺得應該是哪裏的問題。
wm_notify 要留意CHANGE事件主要做了什麼
xiaocha
2009-03-20
打赏
举报
回复
wm_notify 很多可能是重复事件造成的,
比如说 A.OnChange 有 B.Caption := 'xxx',
造成 B 的OnChange,而 B.OnChange 中又改写了 A 或 C 的OnChange
从而可能造成一个控件的多次重绘!
仔细检查一下事件处理代码,可能有帮助
sanguomi
2009-03-20
打赏
举报
回复
[Quote=引用 14 楼 ahjoe 的回复:]
我通常不调用Refresh().
而是调用 Invalidate().
你也应该这样做.
[/Quote]
我昨天已经这么改了, 效果不大 ,估计问题还是窗口控件太多了
ahjoe
2009-03-20
打赏
举报
回复
Refresh() 立即刷新显示,如果调用很多次,每次调用都会重绘一遍。
Invalidate() 有空时刷新显示,如果调用很多次,如果前面的还没重绘,最后也只绘一次。
ahjoe
2009-03-20
打赏
举报
回复
我通常不调用Refresh().
而是调用 Invalidate().
你也应该这样做.
starluck
2009-03-19
打赏
举报
回复
這個真的要看你的情況,刷新需要什麼效果。 最好是把這些控件都管理起來然後對指定的刷新,200個帶HANDLE的刷起來夠嗆啊。
sanguomi
2009-03-19
打赏
举报
回复
[Quote=引用 11 楼 byteh 的回复:]
主窗口很多控件上都写了重绘代码
就不能换个思路,不让他都重绘吗?就好比一座大楼,每块玻璃都重绘,我觉得不闪不可能,cpu总不会同一个时间脉冲干完所有的事情!
打个比方,不合适请指正!
[/Quote]
菠菜好久不见, 其实我也这么觉得, 因为那窗口控件太多, 是个以前搞VB的老程序员写的, 那个窗口被他拖了200多控件上去.... 他没类的概念, 指针也不释放, 另外代码风格很怪异, 看得我很头大, 我三星期的任务就改这BUG, 拜托大家多帮忙
byteh
2009-03-19
打赏
举报
回复
主窗口很多控件上都写了重绘代码
就不能换个思路,不让他都重绘吗?就好比一座大楼,每块玻璃都重绘,我觉得不闪不可能,cpu总不会同一个时间脉冲干完所有的事情!
打个比方,不合适请指正!
starluck
2009-03-19
打赏
举报
回复
[Quote=引用 8 楼 sanguomi 的回复:]
引用 7 楼 starluck 的回复:
引用 5 楼 sanguomi 的回复:
引用 4 楼 zswang 的回复:
你想做什么效果?为啥要截取主窗体的WM_Erasebkgnd消息?
我只是想要别人用鼠标刷新的时候, 软件界面别狂闪
是不是刷新直接調用的 refresh??
代码很多, 有的地方是有REFRESH
[/Quote]
這樣就比較麻煩。 最好采用局部刷。 不要直接調用 reFresh. 這樣做的話肯定就刷新所有控件了。
Seamour
2009-03-19
打赏
举报
回复
[Quote=引用 3 楼 sanguomi 的回复:]
我用API LockWindowUpdate去锁住主窗口,返回值是大于0的,然后调用刷新,还是会闪
[/Quote]
跟主窗口有啥关系,你自己写的控件没必要擦除背景的话就 return 0
sanguomi
2009-03-19
打赏
举报
回复
[Quote=引用 7 楼 starluck 的回复:]
引用 5 楼 sanguomi 的回复:
引用 4 楼 zswang 的回复:
你想做什么效果?为啥要截取主窗体的WM_Erasebkgnd消息?
我只是想要别人用鼠标刷新的时候, 软件界面别狂闪
是不是刷新直接調用的 refresh??
[/Quote]
代码很多, 有的地方是有REFRESH
starluck
2009-03-19
打赏
举报
回复
[Quote=引用 5 楼 sanguomi 的回复:]
引用 4 楼 zswang 的回复:
你想做什么效果?为啥要截取主窗体的WM_Erasebkgnd消息?
我只是想要别人用鼠标刷新的时候, 软件界面别狂闪
[/Quote]
是不是刷新直接調用的 refresh??
starluck
2009-03-19
打赏
举报
回复
是自己做的主動UPDATE窗口還是??
sanguomi
2009-03-19
打赏
举报
回复
[Quote=引用 4 楼 zswang 的回复:]
你想做什么效果?为啥要截取主窗体的WM_Erasebkgnd消息?
[/Quote]
我只是想要别人用鼠标刷新的时候, 软件界面别狂闪
王集鹄
2009-03-19
打赏
举报
回复
你想做什么效果?为啥要截取主窗体的WM_Erasebkgnd消息?
加载更多回复(3)
Unix编程/应用问答中文版(转)
21.2 如何将一个512字节的文件写入
主
引导扇区 21.3 x86/FreeBSD 4.3-RELEASE下FDISK(8)手册页 21.4 x86/FreeBSD 4.3-RELEASE下HEXDUMP(1)手册页 21.5 x86/FreeBSD 4.3-RELEASE下DISKLABEL(8)手册页 21.6 x86/FreeBSD...
Linux下音乐播放器的实现
* 参数类型: widget:
主
窗口
* w, h: 图片的大小 * path: 图片路径 * 返回值:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ******************************************************/ extern ...
有关汉字编码、拼音输入法 大搜罗
不同的编码方案有很大的不同,有的规则简单,学习起来较容易记忆,‘ 有的规则复杂,较难记亿。 (3)编码字符集。有用字母键的,有用数字键的,有用字母键加数字键的,或者用了 更多的键作编码字符集的。 (4)编码...
汉字编码与拼音输入法
不同的编码方案有很大的不同,有的规则简单,学习起来较容易记忆,‘ 有的规则复杂,较难记亿。 (3)编码字符集。有用字母键的,有用数字键的,有用字母键加数字键的,或者用了 更多的键作编码字符集的。 (4)...
汉字编码 拼音输入法
不同的编码方案有很大的不同,有的规则简单,学习起来较容易记忆,‘ 有的规则复杂,较难记亿。 (3)编码字符集。有用字母键的,有用数字键的,有用字母键加数字键的,或者用了 更多的键作编码字符集的。 (4)...
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章