2009-08-15 31 views
0

我想解決我的應用程序中的問題。我正在Vista中開發應用程序,並且它在那裏工作得很好,但是當我將它運用到XP時,表單變得呆滯且無響應。當我使用斷點觀察窗口消息時,我發現在XP中,窗體每秒重複繪製一次(即使它不是真的需要)。然而,Vista上的相同測試並沒有顯示這種重複的繪畫。Windows窗體塗料重複在XP中,但不是在Vista中

有關可能會導致此問題的任何想法?

回答

3

感謝大家的意見。現在這個問題已經在Subversion的幫助下解決了!窗口的緩慢是一個相對較新的問題,所以我決定在使用Subversion的源代碼中及時回顧並發現我最近將WS_EX_COMPOSITED樣式標誌應用於表單以減少Vista中的閃爍。

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams result = base.CreateParams; 
     result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 
     return result; 
    } 
} 

當我評論它時,窗體再次響應XP,重複的WM_PAINT消息不見了。所以,解決方案只在Vista或更高版本中應用WS_EX_COMPOSITED。

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams result = base.CreateParams; 
     if (Environment.OSVersion.Platform == PlatformID.Win32NT 
      && Environment.OSVersion.Version.Major >= 6) 
     { 
      result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 
     } 

     return result; 
    } 
} 

現在一切都很好!

1

沒有看到具體的代碼等我不知道你的具體問題,但是由於桌面窗口管理器(DWM)的緣故,Vista中的窗口繪畫顯着不同。每個窗口的圖像實際上由於合成效果而被緩存/雙緩衝,因此您不會看到重新繪製的閃爍。

我建議你專注於解決XP上的問題,因爲它顯然是DWM在Vista上隱藏的問題。

1

部分或全部窗口失效。

正如@喬恩說沒有太大的細節,但這裏有一些事情要查找:

  1. 你有定製油漆邏輯是什麼?形容它。
  2. 你的代碼中是否有定時器?他們在做什麼?
  3. 只有當程序正在使用時,或者當您的手離開電腦並且只是在觀看時,閃爍纔會發生嗎?
  4. 你剛剛使用標準的.Net控件或任何控件庫/用戶控件?
相關問題