2010-08-28 51 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