2

我有一个表单,上面有许多自定义控件,但闪烁很严重,我找到了以下代码(在寻找解决方案时在 stackoverflow 上,如何修复用户控件中的闪烁 或Hans Passant 发布的Winforms 双缓冲),它已修复闪烁

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

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

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

非常感谢

4

1 回答 1

1

平滑滚动的 .net 表单

在这里找到答案,感谢 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);
}
于 2012-12-19T20:05:52.333 回答