C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 25 を表示中)
■11365 / )  Re[8]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (26回)-(2007/12/12(Wed) 20:52:48)
2007/12/12(Wed) 21:23:12 編集(投稿者)
2007/12/12(Wed) 20:59:11 編集(投稿者)
2007/12/12(Wed) 20:55:19 編集(投稿者)
No11358 (れい さん) に返信
> 2007/12/12(Wed) 18:58:44 編集(投稿者)
>
> 私の「ちらつく」の定義は、「本来上書きされて消えてしまうべきものが見えてしまう状態」です。
> バッファした画像を実際に描画するときにずれたりするのは含めません。
> そうするとXPでもVistaでも、ダブルバッファを正しく使ってるなら、定義上絶対にちらつきません。

確かにそうですね.今回の件では ListView 限るということで,かなりの確率でれいさんの指示が正しいと思います.
すみませんでした.

> 一般的定義だと思っていましたが、違いますか?

WinForms (というか Windows の描画モデル) の問題には,コントロール同士の重なり (*1) に起因する「ちらつき」もあって,こちらはたとえ Form の DoubleBuffered を有効にしても (*2) Windows XP では解消できません.
Layered Windows 使用時,Windows Vista の DWM 環境下では放っておいても軽減されますが.

*1 例えばフォームの上にコントロールを置いたとき,再描画でコントロールの部分にフォームの背景色が見えてしまうなど
*2 本来保存すべきトップレベルウィンドウのクライアント領域全体がバッファリングできていないため

「WinForms でのちらつき」=「ダブルバッファで解決……するはずがうまくいかない,なんで?」ということを Web で書いている人も多いですが,結構な割合がこのパターンかと思っています.なので個人的には「ちらつき」=「ダブルバッファで解決」みたいな,原因の理解を放棄したような図式は嫌いだったり.System.Windows.Forms.Control.DoubleBuffered を指しての「ダブルバッファ」なのか,アルゴリズムとしての「ダブルバッファ」なのかも曖昧ですし.

あと,「ちらつき」という言葉の曖昧さを避けるとすれば,現象を「フリッカ」と「ティアリング」に区別した方が良いのかもしれませんね.

>む〜ちょさん
この辺ややこしくて嫌だということであれば,WPF や ブラウザ + HTML を使いつつ,もっと別のところに労力を割くのがお勧め,という点は変わらずです.
ListView のみの問題であればおそらくれいさんの方法で解決できるかと思いますが.
返信 編集キー/


管理者用

- Child Tree -