阅读:2888回复:12
急切求救关于listctrl中屏幕闪烁的问题!
我是用ListCtrl实时监控显示当前的状态,但是在数据变化时,其所在的矩形区域会有闪烁现象,请教大家如何解决,非常感谢!使用的CReportCtrl类(网上的),在附件中!
|
|
|
沙发#
发布于:2005-04-26 16:01
你最好讲清楚点.
试试OnEraseBkgnd直接返回TURE看. |
|
|
板凳#
发布于:2005-04-27 08:27
我是对话框程序;
OnEraseBk是放在CReportCtrl中的话,我试了根本不执行,不知道怎么回事,附件中就是如此; 意思是这样,定时执行SetItemText(nitem,subitem,_T(\"内容\")) 那么(nitem,subitem)所在的矩形Rect就会有闪烁现象, CReportCtrl::OnCustomDraw()中是对重画事件的响应。 |
|
地板#
发布于:2005-04-27 09:09
BEGIN_MESSAGE_MAP(CReportCtrl, CListCtrl)
//{{AFX_MSG_MAP(CReportCtrl) ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick) ON_WM_CREATE() ON_WM_DESTROY() ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) //}}AFX_MSG_MAP END_MESSAGE_MAP() 看见没有,加上 ON_WM_PAINT() 和 ON_WM_ERASEBKGND(). 再让OnEraseBkgnd直接返回TURE. |
|
|
地下室#
发布于:2005-04-27 16:01
to sdqdydj:
请问你是在青岛(sdqd)吗???看着很亲切,,,如果不是请谅解! |
|
5楼#
发布于:2005-04-28 08:10
To zhuct: 是的!希望交流!
To maqian: OnEraseBkgnd()我昨天试了,并且直接返回了True,消息列表也加了,但是问题依旧,感觉上看CustomDraw已经把工作做完了,是否应取消CustomDraw,将重画的工作放到OnPaint()里来做呢?如果这样做,看起来并没有什么区别啊? |
|
6楼#
发布于:2005-04-28 10:14
抱歉,我没那么多时间给你完整测试,提点建议:
\"是否应取消CustomDraw,将重画的工作放到OnPaint()里来做呢?\" 不大可能,一是因为这是系统设定的,二是你自己写太复杂. 你注意到OnNmCustomDraw最后一个返回什么?没有绘画,返回CDRF_DODEFAULT,你试试自己绘画,返回CDRF_SKIPDEFAULT. 我不可能仔细看这个类的代码,如果还不行,你自己写一个类得了.自己处理NM_CUSTOMDRAW,像上面说的那样处理.再让OnEraseBkgnd直接返回TRUE.我在一个项目中就是这样做的,没问题. |
|
|
7楼#
发布于:2005-04-28 10:29
to:sdqdydj
青岛风光如何,这几天游人多吗?没去过,想去. |
|
|
8楼#
发布于:2005-04-28 12:11
中午有空,给你试了一下,用CReportCtrl,加上WM_ERASEBKGND的消息映射,让OnEraseBkgnd直接返回TRUE,其他不变.一点也看不到闪烁.不知你是怎么用的?
这个CReportCtrl确实有BUG,按标题头时显示的sub item TEXT会不正确. |
|
|
9楼#
发布于:2005-04-29 08:12
大海就是为青岛镶嵌的美丽的金边,五一的话人肯定特别多,如果你想看看大海,那就来吧,如果有其他的想法(名胜)那就算了。个人意见,仅供参考!
我也这么做了,实际中也不是每次都闪,变化大约3次就会闪烁一次,请教您在测试过程中是否定时变化内容? |
|
10楼#
发布于:2005-04-29 09:57
我设的定时器,时间为100ms.你再看看,反正这个类有我说的问题,干脆自己写吧.
我没时间出去玩的,想想罢了. |
|
|
11楼#
发布于:2005-04-30 08:33
您说的按标题头时显示的sub item TEXT会不正确,我倒没有发现,闪烁问题按您的方法已经解决,开始我一直没有把OnEraseBkgnd放到消息列表里,非常感谢你!!
|
|
12楼#
发布于:2005-05-18 10:10
mark
|
|
|