2009-08-15 9 views
0

私のアプリケーションで問題を解決しようとしています。私はVistaでアプリケーションを開発していますが、うまく動作しますが、XPに移行すると、フォームが遅く応答しなくなります。ブレークポイントを使用してWindowsメッセージを見ると、XPではフォームが毎秒約1回繰り返し塗られていることがわかります(本当に必要なわけではありませんが)。しかし、Vistaの同じテストではこの繰り返しの絵は表示されません。XPでWindowsフォームが繰り返しペイントされますが、Vistaでは表示されません。

これを引き起こしている可能性のある候補はありますか?

答えて

3

ありがとうございました。 Subversionの助けを借りて問題は解決されました。ウィンドウの低迷は比較的新しい問題だったので、私はSubversionを使って自分のソースコードを振り返り、Vistaでのフリッカーを減らすためにWS_EX_COMPOSITEDスタイルフラグをフォームに適用したことを発見しました。

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

特定のコードなどは表示されませんが、Vistaのウィンドウペインティングはデスクトップウィンドウマネージャ(DWM)のために大幅に異なります。コンポジションエフェクトのため、各ウィンドウのイメージは実際にキャッシュ/ダブルバッファされるため、再描画のちらつきは表示されません。

私は、明らかにDWMがVista上でマスキングしているという問題であるため、XPの問題を解決することに焦点を当てることをお勧めします。

1

何らかの原因でウィンドウの一部または全部が無効になっています。

@ジョンはあまり詳しくない言ったように、しかし、ここでは、探すためにいくつかのものです:

  1. カスタムペイントロジックを持っていますか?説明してください。
  2. コードにタイマーがありますか?彼らは何をしますか?
  3. ちらつきは、プログラムが使用中のとき、または手がコンピュータから離れて見ているときにのみ起こりますか?
  4. 標準の.Netコントロールまたはコントロールライブラリ/ユーザーコントロールを使用していますか?
関連する問題