Приостановить/возобновить рисование полос прокрутки дерева просмотра

Я пытаюсь остановить мерцание вертикальной полосы прокрутки дерева при перерисовке дерева. У меня уже есть пользовательский элемент управления древовидной структурой, который может отключить рисование с помощью 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;
        }
    }

Спасибо за любую помощь.


person giangurgolo    schedule 10.10.2012    source источник


Ответы (1)


Я нашел решение, используя 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);
    }
person giangurgolo    schedule 10.10.2012
comment
Я почти уверен, что SuspendLayout и ResumeLayout используют LockWindowUpdate за кулисами. Хотя я могу ошибаться. - person Simon Whitehead; 10.10.2012
comment
Я пробовал такие, т.е. заменил ими LockWindowUpdates, но вертикальная полоса прокрутки мерцает. LWU — единственное работающее решение, которое я нашел. - person giangurgolo; 10.10.2012