C#-锁图

C#-锁图,c#,drawing,sendmessage,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 cons

基本上,我已经设置了一个类来处理发送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);
    }
}
然后在自定义用户控件中有一个重画方法:

public void Redraw()
{
    try
    {
        DrawingLocker.LockDrawing(Handle);
        using (Graphics graphics = Graphics.FromHwnd(Handle))
        {
            //Draw Stuff
        }
    }
    finally { DrawingLocker.UnlockDrawing(Handle); }
}
我的问题是,我在“draw Stuff”注释的地方画的东西都没有被画出来。我做错了什么?
(当影响绘图的值发生更改时,会调用Redraw,包括调整大小)

我并不真正在Windows之类的环境中,但从MSDN对该标志的描述来看,它并没有达到您认为的效果。它用于在更改控件内容时禁用重画控件(如列表视图)。在redraw函数中禁用它可能不会起任何作用


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

我并不真正在Windows之类的系统中,但从MSDN对该标志的描述来看,它并不像你想象的那样。它用于在更改控件内容时禁用重画控件(如列表视图)。在redraw函数中禁用它可能不会起任何作用


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

…你为什么要首先使用该标志?在绘图时停止闪烁,如果我错过了一个更好的方式,请随意发布它作为答案…你为什么要首先使用该标志?画图时停止闪烁,如果我错过了一个更好的方式,请随意发布它作为答案。哦,好吧,我将使用双缓冲,我假设是画图来表示图像,然后在控件上绘制图像,但这次我会用谷歌搜索它,以确保我不会再犯愚蠢的错误。一旦它允许我,我会设置为accepted,记住总是用谷歌搜索:好吧,我会使用双缓冲,我假设是画图来表示图像,然后在控件上画图,但这次我会用谷歌搜索,以确保我不会再犯愚蠢的错误。一旦它允许,我将设置为accepted,并记住始终使用google:D