C # - заблокировать рисунок - PullRequest
       6

C # - заблокировать рисунок

1 голос
/ 28 августа 2010

В основном я настроил класс для обработки отправки сообщений WM_SETREDRAW, например так:

public static class DrawingLocker
{
    [DllImport("user32", CharSet = CharSet.Auto)]
    private extern static IntPtr SendMessage(IntPtr hWnd, 
            int msg, int wParam, IntPtr lParam);

    private const int WM_SETREDRAW = 11; //0xB

    public static void LockDrawing(IntPtr Handle)
    {
        SendMessage(Handle, WM_SETREDRAW, 0, IntPtr.Zero);
    }

    public static void UnlockDrawing(IntPtr Handle)
    {
        SendMessage(Handle, WM_SETREDRAW, 1, IntPtr.Zero);
    }
}

У меня есть метод Redraw в моем пользовательском элементе управления:

public void Redraw()
{
    try
    {
        DrawingLocker.LockDrawing(Handle);
        using (Graphics graphics = Graphics.FromHwnd(Handle))
        {
            //Draw Stuff
        }
    }
    finally { DrawingLocker.UnlockDrawing(Handle); }
}

Myпроблема в том, что ничто, которое я рисую там, где нарисован комментарий Draw Draw вещи.Что я делаю неправильно?(Перерисовка вызывается при изменении значений, влияющих на рисунок, включая изменение размера)

1 Ответ

1 голос
/ 28 августа 2010

Я на самом деле не в Windows и прочем, но, судя по тому, что MSDN говорит об этом флаге, он не делает то, что вы думаете, он делает.Он используется для отключения перерисовки элементов управления (например, представления списка) при изменении их содержимого.Отключение его внутри функции перерисовки, вероятно, ничего не даст.

Посмотрите, сможете ли вы найти что-то, связанное с "двойной буферизацией", потому что это один из методов, используемых для предотвращения мерцания.

...