代码之家  ›  专栏  ›  技术社区  ›  Blam

C-锁图纸

  •  1
  • Blam  · 技术社区  · 14 年前

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

    我的问题是,我画的任何东西都没有“画东西”的评论被画出来。我做错什么了? (当影响绘图的值发生变化(包括调整大小)时,将调用Redraw)

    1 回复  |  直到 14 年前
        1
  •  1
  •   Matti Virkkunen    14 年前

    我并不是真正的windows和其他东西,但是从msdn对这个标志的评价来看,它并没有做你认为它做的事情。它用于在更改控件内容时禁用重绘控件(考虑列表视图)。在redraw函数中禁用它可能不会做任何事情。

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