程序中有一个ProgressBar,同时有一个菜单和一个RichEdit。当鼠标放到任何一个菜单的子项上面(不点击)的时候,progressbar就有的时候会出现运动不连贯的情况,会运动一段停一下,然后再继续动,再停一下。如果鼠标在Item上面来回运动,则没有这个问题。在上面这种情况下,我的richedit多次收到了WM_SYSTIMER这个消息。这个消息的收到时刻正好和progressbar的停顿对应。这个RichEdit具有Tooltip的功能,我在OnMouseMove中会根据鼠标当前的位置提取左右的字母。我把这一块注释掉就好了,但是这个功能必须要的阿。是什么原因?
解决方案 »
- 如何获得winform 控件id或者如何唯一标识每个控件
- 在程序中如何调用SQL事务
- CxImage库的错误!!!
- 感谢lanphaday(恋花蝶) !请lanphaday(恋花蝶)来接分!!
- 升星拉,大散分~~~~
- 如何实现竖向输出文字(如画图程序),急!!!!
- 请问vb老鸟:用ADO连接数据库,用datagrid显示数据,可以在datagrid上修改数据后存入数据库吗?应该怎样做呢?
- 高分收集免费电脑图书下载网站!
- 关于文本对话框的问题
- qt 串口接收十六进制数据问题,求大神解答。不甚感激。
- win2000我给windows media player发消息为什么不响应呢?
- 关于多模块合并的问题!!!
[email protected]
我现在也是非常郁闷,知道这样很难解决问题。能否根据我的描述,做一些猜测,我可以去调查。现在我是一点方向都没有,本来觉得可能WM_TIMER优先级比较低,可能出现阻塞,导致WM_TIMER的接受不连续,但是用spy++查看,RichEdit除了收到WM_SYSTIMER以外没有受到其他消息。也就是这个时候
progressbar会停顿下来。我的感觉是肯定和WM_TIMER以及我派生的这个RichEdit有关,但是不清楚原因在哪。如果把这个RichEdit给Disable掉,就没有这个问题,但是我的OnMouseMove就没有办法响应了。如果把它的
visible改成false也没有上述问题,但是这个控件就看不到了,都不行我曾经换过一个定时器,不用WM_TIMER,好像是可以好,但是后来上面说不能改定时器,怕引起其他
的bug(曾经就引起过)所以现在不知道该怎么办好,希望得到一点启发。
1:使用PostMessage代替SendMessage,因为PostMessage发出消息后立即返回,不需要等待;
2:或者给progressbar开一个线程
只有在消息队列里没有其他消息的时候才响应它的。
给progressbar开一个线程,自己完成重画