WS_EX_COMPOSITED和滚动条在拖动时不绘图

时间:2012-12-01 14:47:21

标签: c# winforms

我有一个有很多自定义控件的表单有一个可怕的闪烁,我找到了以下代码(这里在stackoverflow上搜索解决方案,How to fix the flickering in User controls 或由Hans Passant发布的Winforms Double Buffering修复了闪烁

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
    }
}

但是,现在如果单击滚动条上的位置栏,位置栏将保持固定,直到我松开鼠标按钮。

有没有办法在拖动时更新滚动位置栏并且控件上没有闪烁?

非常感谢

1 个答案:

答案 0 :(得分:1)

smooth scrolling .net forms

这里找到的答案,全部归功于CharlesW

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);
}