请教界面刷新问题

andy_cai 2013-12-12 03:02:10
我在Frame(CMDIChildWnd)中创建了工具条
该工具条响应了OnIdle事件

现在的问题是:
鼠标在Frame中移动时,也不断刷新工具条,导致工具条闪烁;
但Frame中有些操作还是需要刷新工具条的,比如翻页、删页等

我该怎么处理,当鼠标在工具条之外移动时,不要刷新工具条?
...全文
193 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 15 楼 happyparrot 的回复:
你可以在每个控件对象中增加接口,判断是否状态变化。那么外层只需要调用这个接口,咨询每个控件是否状态发生变化。无变化则跳出,有变化则刷新。刷新最好也只刷新状态发生变化的控件,不需要全部刷新。
嗯,收到。 感谢!
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 14 楼 happyparrot 的回复:
是啊。你现在可能就是不加判断就进行刷新,自然有很多的无用功了。 比如可以把状态记录下来,每次消息来后,先检查是否发生变化。状态无变化时不需要进行处理。
谢谢,我先安照这个思路走一下。
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
你可以在每个控件对象中增加接口,判断是否状态变化。那么外层只需要调用这个接口,咨询每个控件是否状态发生变化。无变化则跳出,有变化则刷新。刷新最好也只刷新状态发生变化的控件,不需要全部刷新。
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
是啊。你现在可能就是不加判断就进行刷新,自然有很多的无用功了。 比如可以把状态记录下来,每次消息来后,先检查是否发生变化。状态无变化时不需要进行处理。
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 10 楼 happyparrot 的回复:
你说的自制的东西是你们自己做的?如果是,那么就需要改进,控件状态如果不发生变化,就不应该刷新啊,不进行判断吗?不能任何消息都不加判断就刷新吧。如果不是你们做的,你也没有办法控制这些消息不被工具条响应,那我是没啥办法了。或许有高手有办法,比如从底层捕捉截获这些消息之类的。或者就找开发商改进吧。
明白你的意思了,自制工具条本身响应OnIdleUpdateCmdUI是没问题的,对吧? 需要做的是,让自制工具条自我判断所有控件有没有状态变化,然后决定是否刷新,对吧?
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
噢,不好意思。 鼠标停留的方法好像不够"优雅"。 在现在的实现下, 我需要在鼠标快速移动时,告诉工具条不要刷新;但同时又需要在此状态之外,及时的"告诉"工具条刷新(一旦有了其他操作) 如果能在自制工具条中解决问题就好了
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
你说的自制的东西是你们自己做的?如果是,那么就需要改进,控件状态如果不发生变化,就不应该刷新啊,不进行判断吗?不能任何消息都不加判断就刷新吧。如果不是你们做的,你也没有办法控制这些消息不被工具条响应,那我是没啥办法了。或许有高手有办法,比如从底层捕捉截获这些消息之类的。或者就找开发商改进吧。
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 happyparrot 的回复:
都是自动的吗?鼠标只要经过就必须要响应吗? 我们有个软件也遇到过类似问题,鼠标每动一下都需要大量的判断,影响效率。后来就增加了鼠标停留的判断。如果只是瞬间的经过,就不用去响应它,只有鼠标停留如50ms以上时,才认为用户真正是要做查询。不知道这种思路是否适合你这里的处理。 或者,自制工具条的消息响应你可以控制吗,还是完全被封装了?
你说的鼠标停留的确是个办法。 自制工具条的消息响应我能完全控制。
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
@happyparrot 或者我先讲一下目前的实现目标。 在自制Frame中放置一个自制工具条,在Frame中很多的操作会引起工具条中一些item的状态改变,比如check、enable等,所以工具条中响应了OnIdleUpdateCmdUI,用于Frame中操作后的工具条自动刷新。 先的状况是,Frame中的鼠标移动也引起了工具条的无意义刷新。 有什么方法改变这个窘境?
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
都是自动的吗?鼠标只要经过就必须要响应吗? 我们有个软件也遇到过类似问题,鼠标每动一下都需要大量的判断,影响效率。后来就增加了鼠标停留的判断。如果只是瞬间的经过,就不用去响应它,只有鼠标停留如50ms以上时,才认为用户真正是要做查询。不知道这种思路是否适合你这里的处理。 或者,自制工具条的消息响应你可以控制吗,还是完全被封装了?
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 4 楼 happyparrot 的回复:
工具条刷新?工具条一般都是菜单的另一种表现形式而已。菜单响应OnUpdateCmdUI应该就改变菜单的效果,也会改变工具条的效果。不知道你所说的刷新属于什么性质的。
现在是自制工具条的OnIdleUpdateCmdUI这个响应了"工具条区域外"的鼠标移动事件 导致工具条调用OnUpdateCmdUI,引起cpu资源消耗过大(该自制工具条内容较多)
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 2 楼 liuzi_40 的回复:
是哪种闪烁? 整个工具栏 还是工具栏上的一些控件?
其实在工具条外面移动鼠标时,闪烁现象并不明显,我夸大了,但是任务管理器中明显有20%左右的CPU资源消耗 这个损耗很不好,想去掉
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
工具条刷新?工具条一般都是菜单的另一种表现形式而已。菜单响应OnUpdateCmdUI应该就改变菜单的效果,也会改变工具条的效果。不知道你所说的刷新属于什么性质的。
andy_cai 2013-12-12
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
你响应OnIdle的目的是什么呢?
工具条响应了WM_IDLEUPDATECMDUI消息 为了很方便的响应界面各种操作(有很多)后的工具条刷新 但工具条外的鼠标移动不需要更新工具条 我现在的想法是,将该类鼠标移动禁止刷新工具条
泥鳅不是鱼 2013-12-12
  • 打赏
  • 举报
回复
是哪种闪烁? 整个工具栏 还是工具栏上的一些控件?
快乐鹦鹉 2013-12-12
  • 打赏
  • 举报
回复
你响应OnIdle的目的是什么呢?

15,979

社区成员

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

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