wtl中我的listctrl继承自CListViewCtrl和CCustomDraw,在插入的每一项的第三列中绘制进度条,垂直滚动条滚动时,进度条为什么不重绘?

russule 2008-04-23 06:12:17
wtl中我的listctrl继承自CListViewCtrl和CCustomDraw,在插入的每一项的第三列中绘制进度条,当加入的项数增加时,水平滚动条移动,进度条能够重绘,垂直滚动条滚动时,进度条为什么不重绘?
我的进度条是在OnItemPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw)里面绘制的,我跟进去后,发现,水平滚动条滚动时,能走到这个OnItemPrePaint函数,垂直滚动条滚动时,走不进这个函数,,我在custumdraw所有的函数继承下来发现
DWORD OnPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw);
DWORD OnItemPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw);
DWORD OnPostPaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw);
DWORD OnItemPostPaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw);
DWORD OnSubItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
DWORD OnItemPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
DWORD OnItemPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
DWORD OnPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
DWORD OnPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/);
在垂直滚动条滚动时都进不去。
各位高手帮帮忙,如何在垂直滚动条滚动时也能够使其重绘
多谢!
...全文
585 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
russule 2008-04-25
  • 打赏
  • 举报
回复
就是拖动垂直滚动条的时候,没有进入到OnItemPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw)这个函数
russule 2008-04-25
  • 打赏
  • 举报
回复
是进度条位置没有放对地方,没有随着滚动条的拖动重绘
jameshooo 2008-04-24
  • 打赏
  • 举报
回复
糊涂了,到底是进度条进度没有变化,还是进度条位置没有放对地方?
russule 2008-04-24
  • 打赏
  • 举报
回复
up
russule 2008-04-24
  • 打赏
  • 举报
回复
up
russule 2008-04-24
  • 打赏
  • 举报
回复
up,大侠们给个建议,多谢
russule 2008-04-24
  • 打赏
  • 举报
回复
to jameshooo :
代码中修改了进度数据后已经执行Invalidate了,但是由于listctrl项多看不到下面的项目,所以拖动向下滚动条,看下面的项目,这时候进度条的数据不会改变,我的意思是向下托滚动条的时候,每一项的第三列的进度条能够更新,不是进度条的数据改变,是让他随着拖动跟着拖动。
jameshooo 2008-04-23
  • 打赏
  • 举报
回复
楼主没看仔细:“当进度条进度有变化时”就是条件,也就是说代码中修改了进度数据后马上执行Invalidate,无需关心滚动消息
russule 2008-04-23
  • 打赏
  • 举报
回复
我通过获取WM_VSCROLL消息事件,在里面调用了Invalidate()函数,但是在使用该listctrl的父窗体中,拖动该垂直滚动条,拖不动。应该在哪里通知窗口重绘呢?
jameshooo 2008-04-23
  • 打赏
  • 举报
回复
垂直滚动时系统直接使用缓存的VIEW内容。问题并不在滚动时没有重绘,而是代码中没有发出命令让窗口(或行)重绘。当进度条进度有变化时,应该通过InvalidateRect或者RedrawWindow通知窗口重绘。
长尾巴的悟空 2008-04-23
  • 打赏
  • 举报
回复
五颗星星哇......
russule 2008-04-23
  • 打赏
  • 举报
回复
而且太复杂了,跟我这个问题不大,我想问的是为什么在OnItemPrePaint里面不会捕捉到垂直滚动条的事件,能捕捉到水平滚动条的事件,在哪里能捕捉到垂直滚动条的事件,不是捕捉WM_VSCROLL消息
russule 2008-04-23
  • 打赏
  • 举报
回复
这个例子下载下来用vs2005编译不过去
Torch009 2008-04-23
  • 打赏
  • 举报
回复
up
Kudeet 2008-04-23
  • 打赏
  • 举报
回复
到下面下载代码即可
ListCtrl - A WTL list control with Windows Vista style item selection
http://www.codeproject.com/KB/wtl/WTL_ListCtrl.aspx

15,979

社区成员

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

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