WindowsフォームはXPで繰り返し塗装しますが、Vistaでは塗装していません
-
16-09-2019 - |
質問
アプリケーションで問題を解決しようとしています。私はVistaでアプリケーションを開発していますが、そこで正常に動作しますが、XPに持って行くと、フォームは遅くて反応しません。ブレークポイントを使用してWindowsメッセージを視聴すると、XPでは、フォームが1秒に1回繰り返し塗装されていることがわかります(実際には必要ありませんが)。ただし、Vistaに関する同じテストでは、この繰り返しの絵画は表示されません。
何がこれを引き起こしているのかについてのアイデアはありますか?
解決
みんなの意見をありがとう。 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;
}
}
今、すべてがうまく機能します!
他のヒント
特定のコードなどを見ることなく、私はあなたの特定の問題について知りませんが、ビスタのウィンドウペイントはデスクトップウィンドウマネージャー(DWM)のために劇的に異なります。各ウィンドウの画像は、実際には組成効果のためにキャッシュ/ダブルバッフされているため、再塗装のちらつきが表示されません。
XPの問題の解決に焦点を当てることをお勧めします。それは明らかにDWMがVistaにマスキングしている問題であるからです。
何かがあなたの窓の一部またはすべてを無効にしている。
@Jonが詳細を言わなかったように、しかしここに探すべきことがいくつかあります。
- カスタムペイントロジックはありますか?説明してください。
- あなたのコードにタイマーはありますか?彼らは何をしますか?
- ちらつきは、プログラムが使用されているときにのみ発生しますか、それとも手がコンピューターから外れて見ているときにも発生しますか?
- 標準の.NETコントロールまたはコントロールライブラリ /ユーザーコントロールを使用していますか?