2010-08-28 5 views
1

В основном я создал класс для обработки отправки сообщений WM_SETREDRAW так:C# - Блокировка рисования

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); } 
} 

Мои проблема в том, что я ничего не рисую, когда нарисован комментарий «Draw Stuff». Что я делаю не так? (Redraw вызывается, когда значения, которые влияют на изменение чертежа, включая изменение размера)

+0

... почему вы используете этот флаг в первую очередь? –

+0

Прекратите мерцание во время рисования, если есть лучший способ, который я пропустил, не стесняйтесь публиковать его в качестве ответа. – Blam

ответ

1

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

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

+0

О, хорошо, я просто использую двойную буферизацию, которую, как я полагаю, рисует, чтобы сказать изображение, а затем рисовать изображение на элементе управления, но на этот раз я буду на нем навевать, чтобы не сделать еще одну глупую ошибку. Я соглашусь принять, как только это позволит мне, и не забудьте всегда google: D – Blam

Смежные вопросы