2010-08-28 47 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); 
    } 
} 

然后我在我的自定义用户控件再拉法:

public void Redraw() 
{ 
    try 
    { 
     DrawingLocker.LockDrawing(Handle); 
     using (Graphics graphics = Graphics.FromHwnd(Handle)) 
     { 
      //Draw Stuff 
     } 
    } 
    finally { DrawingLocker.UnlockDrawing(Handle); } 
} 

我问题是我没有画“绘制东西”评论的地方。我究竟做错了什么? (重绘被调用时,影响绘图变化,包括调整大小的值)

+0

...为什么你首先使用该标志? – 2010-08-28 12:42:58

+0

停止绘画时闪烁,如果有更好的方式,我已经错过了随时张贴它作为答案。 – Blam 2010-08-28 12:46:14

回答

1

我并不真正在Windows和东西,但根据MSDN有关该标志说,它不会做你认为它做。它用于在更改其内容时禁用重绘控件(认为列表视图)。在重绘功能内禁用它可能不会做任何事情。

看看您是否可以找到与“双缓冲”相关的内容,因为这是一种用于避免闪烁的技术。

+0

噢,好吧,我只是使用双缓冲,我假设是绘制图像,然后在控件上绘制图像,但这次我会谷歌它,以确保我不会犯另一个愚蠢的错误。 我会设置为一旦它让我接受,并记住总是谷歌:D – Blam 2010-08-28 12:51:42