В основном я создал класс для обработки отправки сообщений 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 вызывается, когда значения, которые влияют на изменение чертежа, включая изменение размера)
... почему вы используете этот флаг в первую очередь? –
Прекратите мерцание во время рисования, если есть лучший способ, который я пропустил, не стесняйтесь публиковать его в качестве ответа. – Blam