1

c#.net Framework 1.1で開発されたwin-formアプリケーションのレガシーコードをc#.net3.5に移植しました。

ドットプロットを描画し、プロット内のドットにさまざまな形状(ポリゴン、正方形など)を適用する機能があります。マウスを使用してドラッグすると、適用されたシェイプのサイズを変更できます。シェイプをドラッグすると、新しいポイントにドロップするまで一部が見えなくなり、非常に遅い速度で描画されます。

あなたはそれをちらつきと呼ぶことができます。

この機能はWindowsXPで正常に機能し、Windows7では基本テーマとクラシックテーマで正常に機能します

Windows7でAeroテーマが適用されている場合にのみ点滅します

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/aaed00ce-4bc9-424e-8c05-c30213171c2cWindowsフォームアプリでのちらつきを試し ました

それらのどれも助けませんでした。

実行時間をタイムスタンプした後、私はそれを見つけました

 for (int i=0; i < arraypnts.Length - 1; i++) {
           g.DrawLine(Pens.Black, arraypnts[i], arraypnts[i+1]);
         }

         // draw the last line
         g.DrawLine(Pens.Black, arraypnts[0], arraypnts[arraypnts.Length-1]);

基本的なテーマを適用した場合と比較して、Aeroのテーマを適用した場合は非常に時間がかかります

4

4 に答える 4

0

ちらつきの問題の回避策を見つけました。デスクトップ構成を無効にするだけです—アプリケーションレベルまたはOSレベルのいずれかでそれを行うことができます。

アプリケーションレベルの場合は、exeファイル->右クリック->互換性->デスクトップ構成の無効化をチェックします。

OSレベル(および見栄えの良さ)については、スタート->コンピューターを右クリック->プロパティ->システム設定の詳細->タブの詳細->パフォーマンス設定->視覚効果->カスタム->デスクトップ構成を有効にするのチェックを外します。

于 2012-08-30T11:23:50.883 に答える
0

私はずっと前に同様の問題を抱えていましたが、しばらくして、最初にオブジェクトの可視性をfalseに設定した場合にのみ、コンポーネントを再描画することで解決策を見つけました。

Object.Visible = false

//redraw your components

Object.Visible = true

あなたの場合、これが可能かどうかはわかりませんが、試してみる価値はあります。

于 2012-08-29T11:52:33.420 に答える
0

フォームオブジェクトにはダブルバッファを使用する必要があると思います。

this.DoubleBuffered = true;
于 2012-08-30T10:55:57.557 に答える
0

「Aeroをオフにしても問題なく動作します」…私にとっては頼りになる問題のように聞こえます…。ペイントイベントで絵を描いていますか?そうでない場合は、どこからグラフィックスオブジェクトを取得していますか?あなたはプログラムでデスクトップ構成を無効にすることができます、私がするいくつかのプロジェクトのためにそれが必要です…しかし、描画に関連するものは何もありません…

[DllImport("dwmapi.dll")]
private static extern int DwmIsCompositionEnabled(ref bool enabled);

const uint DWM_EC_DISABLECOMPOSITION = 0;
const uint DWM_EC_ENABLECOMPOSITION = 1;
[DllImport("dwmapi.dll", EntryPoint = "DwmEnableComposition")]
private static extern uint DwmEnableComposition(uint compositionAction);

利用方法:

 DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
于 2012-08-30T13:31:35.663 に答える