0

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

これを引き起こしている可能性のあるものについてのアイデアはありますか?

4

3 に答える 3

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;
    }
}

今、すべてがうまくいきます!

于 2009-08-15T22:12:41.467 に答える
1

特定のコードなどを見なければ、特定の問題についてはわかりませんが、デスクトップ ウィンドウ マネージャー (DWM) により、Vista でのウィンドウ ペインティングは大幅に異なります。各ウィンドウの画像は、コンポジション効果により実際にキャッシュ/ダブル バッファリングされるため、再描画のちらつきは見られません。

XP での問題の解決に集中することをお勧めします。これは明らかに、DWM が Vista でマスクしている問題であるためです。

于 2009-08-15T21:42:15.677 に答える