- - PR -
描画時のちらつき抑制について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-11 15:00
何時も拝見させていただいています。 今回、画面描画時のちらつきについて問題が発生し、 その抑制方法についてお知恵を拝借したく投稿いたしました。 環境はOSがXP、言語がC#、Windowsフォームです。 コンテナコントロールの上に50個のボタンコントロールを配置し 実行したところ、初期表示時、コンテナのVisible変更時に ボタンがパラパラと表示されてしまいます。 ダブルバッファを適用すればちらつきが抑制されるらしいので コンテナ、ボタンを継承して独自にコントロールを作り、 ダブルバッファを適用してみてもパラパラと表示されるのは直らず ならばコンテナ側のOnPaintにてボタンを自分で描画すれば ちらつきには感じないのではないかと思い試してみたのですが ボタンの描画処理のせいかボタンの領域が一度クリアされ 結局パラパラと表示されてしまいます。 ネットでちらつきに関して検索してもダブルバッファや Graphicsによる自力描画についてで解決の糸口が掴めません。 #私の検索の仕方が悪いのかもしれませんが このような問題について何か知っておられれば 情報を教えていただきたくお願い申し上げます。 | ||||||||||||
|
投稿日時: 2006-12-11 15:57
この時点で、既にイタタタだけど、あえて言及はしない。 | ||||||||||||
|
投稿日時: 2006-12-11 16:34
返信ありがとうございます。
情報が足りませんでした、申し訳ありません。
1.Intel Celeron 1GHz 512Mです。 メモリの増設は業務的に不可能です。 2..NET framework 2.0で開発しています。 ダブルバッファの設定は上記プロパティにて行っています。 フォームにも設定してあるのですが綺麗に表示されません。
これも言葉足らずでした。 これはちらつきが発生したのでテスト用に作ったものです。 分かりやすく大量のコントロールを配置してちらつきテストしていました。 全てのコントロールの描画が終わるまで表示を待つ。 といった事は出来ないものなのでしょうか? | ||||||||||||
|
投稿日時: 2006-12-11 18:00
昔から知られている方法は、
どちらも、低レベル処理(直接Windows APIに触る)になるので、敷居は高くなります。 また、Windows限定になります。 | ||||||||||||
|
投稿日時: 2006-12-11 18:27
Invalidate→Updateとかはダメかいな。 | ||||||||||||
|
投稿日時: 2006-12-11 18:55
SuspendLayout→ResumeLayoutとかはダメかいな。 #自信なし。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-12-11 19:28
.NETはそれほど詳しい訳ではないのですが。
Form.DoubleBufferedプロパティって、正確にはControl.DoubleBufferedプロパティですよね? .NETでは、というかWin32APIでは、コントロールを載せているFormも、そのコントロール自体であるButtonも同じControlで、描画もControl単位で個別に行われているようですから、DoubleBufferedを設定しても、50個あるButtonが個別にダブルバッファするだけで、50個トータルでダブルバッファになっている訳ではなさそうですね〜。 たぶんこれは、.NETの、というかWin32APIの仕様のように見えるので、正攻法での解決は難しいのではないかと思います。 綺麗にダブルバッファ処理をするなら、Controlを継承しない独自のコントロールを作ってFormの内部を描画する形になるのかな。とっても面倒ですが。 | ||||||||||||
|
投稿日時: 2006-12-12 14:55
返事が遅くなりまして申し訳ありません。
別件で障害が発生し対応に追われていました。 皆様から教えて頂いた方法を試してみて ちらつきが抑制されるか試してみたいと思います。 結果についてはまた後ほど御報告させていただきます。 |