sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2890回复:12

急切求救关于listctrl中屏幕闪烁的问题!

楼主#
更多 发布于:2005-04-26 13:15
我是用ListCtrl实时监控显示当前的状态,但是在数据变化时,其所在的矩形区域会有闪烁现象,请教大家如何解决,非常感谢!使用的CReportCtrl类(网上的),在附件中!
附件名称/大小 下载次数 最后更新
2005-04-26_ReportCtrl.rar (15KB)  13
lsvine
驱动小牛
驱动小牛
  • 注册日期2005-03-09
  • 最后登录2009-10-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望57点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-18 10:10
mark
天行健,君子以自强不息 地势坤,君子以厚德载物
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-30 08:33
您说的按标题头时显示的sub item TEXT会不正确,我倒没有发现,闪烁问题按您的方法已经解决,开始我一直没有把OnEraseBkgnd放到消息列表里,非常感谢你!!
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-29 09:57
我设的定时器,时间为100ms.你再看看,反正这个类有我说的问题,干脆自己写吧.
我没时间出去玩的,想想罢了.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-29 08:12
大海就是为青岛镶嵌的美丽的金边,五一的话人肯定特别多,如果你想看看大海,那就来吧,如果有其他的想法(名胜)那就算了。个人意见,仅供参考!

我也这么做了,实际中也不是每次都闪,变化大约3次就会闪烁一次,请教您在测试过程中是否定时变化内容?
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-28 12:11
中午有空,给你试了一下,用CReportCtrl,加上WM_ERASEBKGND的消息映射,让OnEraseBkgnd直接返回TRUE,其他不变.一点也看不到闪烁.不知你是怎么用的?
这个CReportCtrl确实有BUG,按标题头时显示的sub item TEXT会不正确.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-28 10:29
to:sdqdydj
青岛风光如何,这几天游人多吗?没去过,想去.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-28 10:14
抱歉,我没那么多时间给你完整测试,提点建议:
  \"是否应取消CustomDraw,将重画的工作放到OnPaint()里来做呢?\"
不大可能,一是因为这是系统设定的,二是你自己写太复杂.
你注意到OnNmCustomDraw最后一个返回什么?没有绘画,返回CDRF_DODEFAULT,你试试自己绘画,返回CDRF_SKIPDEFAULT.

我不可能仔细看这个类的代码,如果还不行,你自己写一个类得了.自己处理NM_CUSTOMDRAW,像上面说的那样处理.再让OnEraseBkgnd直接返回TRUE.我在一个项目中就是这样做的,没问题.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-28 08:10
To zhuct: 是的!希望交流!
To maqian:
OnEraseBkgnd()我昨天试了,并且直接返回了True,消息列表也加了,但是问题依旧,感觉上看CustomDraw已经把工作做完了,是否应取消CustomDraw,将重画的工作放到OnPaint()里来做呢?如果这样做,看起来并没有什么区别啊?
zhuct
驱动牛犊
驱动牛犊
  • 注册日期2005-04-27
  • 最后登录2005-07-04
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-27 16:01
to sdqdydj:
请问你是在青岛(sdqd)吗???看着很亲切,,,如果不是请谅解!


maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
10楼#
发布于: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.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-27 08:27
我是对话框程序;
OnEraseBk是放在CReportCtrl中的话,我试了根本不执行,不知道怎么回事,附件中就是如此;
意思是这样,定时执行SetItemText(nitem,subitem,_T(\"内容\"))
那么(nitem,subitem)所在的矩形Rect就会有闪烁现象,
CReportCtrl::OnCustomDraw()中是对重画事件的响应。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-04-26 16:01
你最好讲清楚点.
试试OnEraseBkgnd直接返回TURE看.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
游客

返回顶部