1

我试图在重绘树视图时阻止树视图的垂直滚动条闪烁。我已经有一个自定义树视图控件,它可以使用 WndProc 禁用绘画,它对树视图本身工作正常,但不会阻止树视图的滚动条在我清除/创建树视图中的节点时重新绘画和闪烁。

有什么解决办法吗?这是自定义树视图中的代码:

    private bool enablePaint = true;
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_PAINT:
                if (enablePaint)
                    base.WndProc(ref m);
                break;
            case WM_ERASEBKGND:
                break;
            default:
                base.WndProc(ref m);
                break;
        }
    }

谢谢你的帮助。

4

1 回答 1

-2

我找到了解决方案,使用 LockWindowUpdate:

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern bool LockWindowUpdate(IntPtr hWndLock);
    public new void BeginUpdate()
    {
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
        LockWindowUpdate(this.Handle);
    }
    public new void EndUpdate()
    {
        LockWindowUpdate(IntPtr.Zero);
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
    }
于 2012-10-10T03:56:45.100 回答