我想解決我的應用程序中的問題。我正在Vista中開發應用程序,並且它在那裏工作得很好,但是當我將它運用到XP時,表單變得呆滯且無響應。當我使用斷點觀察窗口消息時,我發現在XP中,窗體每秒重複繪製一次(即使它不是真的需要)。然而,Vista上的相同測試並沒有顯示這種重複的繪畫。Windows窗體塗料重複在XP中,但不是在Vista中
有關可能會導致此問題的任何想法?
我想解決我的應用程序中的問題。我正在Vista中開發應用程序,並且它在那裏工作得很好,但是當我將它運用到XP時,表單變得呆滯且無響應。當我使用斷點觀察窗口消息時,我發現在XP中,窗體每秒重複繪製一次(即使它不是真的需要)。然而,Vista上的相同測試並沒有顯示這種重複的繪畫。Windows窗體塗料重複在XP中,但不是在Vista中
有關可能會導致此問題的任何想法?
感謝大家的意見。現在這個問題已經在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;
}
}
現在一切都很好!
沒有看到具體的代碼等我不知道你的具體問題,但是由於桌面窗口管理器(DWM)的緣故,Vista中的窗口繪畫顯着不同。每個窗口的圖像實際上由於合成效果而被緩存/雙緩衝,因此您不會看到重新繪製的閃爍。
我建議你專注於解決XP上的問題,因爲它顯然是DWM在Vista上隱藏的問題。
部分或全部窗口失效。
正如@喬恩說沒有太大的細節,但這裏有一些事情要查找: