暂停/恢复treeview滚动条的绘制

时间:2012-10-10 03:28:53

标签: c# treeview repaint scrollbars redraw

我正在尝试在重绘树视图时阻止树视图的垂直滚动条闪烁。我已经有了一个自定义树视图控件,它可以使用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;
        }
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:-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);
    }