如何在拖动滚动条的时候(鼠标松开之前),动态改变滑动块的大小? ( 积分: 100 )

  • 主题发起人 主题发起人 帆帆
  • 开始时间 开始时间

帆帆

Unregistered / Unconfirmed
GUEST, unregistred user!
如题~~
数据量大,只有显示到某条数据时,才计算其显示行数(自动折行),这样滚动条就有可能在滚动过程中动态变化。
现在的做法是:
每次SetScrollInfo之后,
ShowScrollBar(Handle, SB_VERT, False);
ShowScrollBar(Handle, SB_VERT, True);
这样在拖动滑动块的同时(鼠标不松开的情况下),会按最新设入的滚动条参数进行重画,但是闪烁感太明显了。

请教有没有什么更快的方法?
 
你这是先用ShowScrollBar(Handle, SB_VERT, False)隐藏滚动条然后在
ShowScrollBar(Handle, SB_VERT, True)显示滚动条,你就是要得到闪的效果。
其实SetScrollInfo(Handle, SB_VERT, True)就可以了,最后一个参数就表示重画。
参看delphi的自带vcl源代码
 
我当然是使用了SetScrollInfo,但是在鼠标拖动滑动块结束之前,设置进去的参数,并没有在外观上体现出来,而是必须在拖动结束之后才最终按新设入的参数重画。
现在使用先隐藏再显示的方法,是实在无奈的办法,因为这样会引起Size以及Paint。尤其是Size消息,我的数据是在被显示出来前,(视是否需要而定)重新计算行数的,而客户区宽度改变,是必须重新计算行数的。
 
找到方法了,给控件发送WM_NCPAINT消息,要求重绘非客户区。
 
后退
顶部