C# - 锁定绘图

时间:2010-08-28 12:40:09

标签: c# drawing sendmessage

基本上我已经设置了一个类来处理发送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); }
}

我的问题是,我在绘制“绘制东西”评论的地方画的东西都没有。我究竟做错了什么? (当影响绘图更改的值(包括调整大小)

时,将调用Redraw

1 个答案:

答案 0 :(得分:1)

我并不是真的在Windows和其他东西,但从MSDN所说的那个标志来看,它并没有按照你的想法做到。它用于在更改内容时禁用重绘控件(想一个列表视图)。在重绘功能中禁用它可能不会做任何事情。

看看你是否能找到与“双缓冲”相关的东西,因为这是一种用来避免闪烁的技术。