.NET : Smooth Scrolling Panel
Windows raises ThumbTrack ScrollEvent while dragging Scrollbar. And if your System Visual Effects are optimized for performance, window contents are updated only when scollbar stops ( unlike browser)- that looks ugly and annoying.
To solve this I just substituted all SB_THUMBTRACK messeges with SB_THUMBPOSITION. Not very pretty, but works. The following code is in C#.
public class ScrollPanel : System.Windows.Forms.Panel
{
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc (ref Message m)
{
if ((m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
&& (((int)m.WParam & 0xFFFF) == 5))
{
// Change SB_THUMBTRACK to SB_THUMBPOSITION
m.WParam = (IntPtr)(((int)m.WParam & ~0xFFFF) | 4);
}
base.WndProc (ref m);
}
}
Can you please help me on your smooth scrolling example. or send me the example project ? basically im using compact framework and have panel with conrols on it… and i have a vScrollBar control and i want to make the scrolling smooth not choppy repaint. thanks a million
gabe
February 8, 2008 at 8:58 pm
Not that I’m impressed a lot, but this is a lot more than I expected when I stumpled upon a link on Digg telling that the info here is quite decent. Thanks.
Ted Burrett
April 24, 2009 at 11:20 am