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

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

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

Re[12]: ListViewのちらつき、仮想化について


(過去ログ 25 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■11281 / inTopicNo.1)  ListViewのちらつき、仮想化について
  
□投稿者/ む〜ちょ (2回)-(2007/12/11(Tue) 15:48:14)

分類:[C#] 

開発環境:Visual Studio2005
使用言語:C#



Visual Studio2005で作成したListViewに処理結果を上書き表示させるプログラムおいて、高速描画処理を行っている為かなりのちらつきが起こってしまいます。
色々と調べた結果、ListViewの仮想化が良いと書かれてあったのでListViewを仮想化させてみましたが、依然ちらつき問題は解決されないままです。
他にもThread.Sleep()メソッド等も入れてみましたが、多少ちらつきが改善された程度で根本的な解決には至っていません。
ListViewのちらつきを無くす為には他にどのような事をすればよろしいでしょうか。C#言語歴半年と初心者な私ですがよろしくお願い致します。

引用返信 編集キー/
■11290 / inTopicNo.2)  Re[1]: ListViewのちらつき、仮想化について
□投稿者/ れい (291回)-(2007/12/11(Tue) 19:59:56)
No11281 (む〜ちょ さん) に返信
> ListViewのちらつきを無くす為には他にどのような事をすればよろしいでしょうか。C#言語歴半年と初心者な私ですがよろしくお願い致します。

ダブルバッファを行えばよいと思います。
例はその辺にたくさん転がってるので省略します。
引用返信 編集キー/
■11296 / inTopicNo.3)  Re[1]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (24回)-(2007/12/11(Tue) 20:51:44)
No11281 (む〜ちょ さん) に返信
> 開発環境:Visual Studio2005
> 使用言語:C#
>
> Visual Studio2005で作成したListViewに処理結果を上書き表示させるプログラムおいて、高速描画処理を行っている為かなりのちらつきが起こってしまいます。
> 色々と調べた結果、ListViewの仮想化が良いと書かれてあったのでListViewを仮想化させてみましたが、依然ちらつき問題は解決されないままです。
> 他にもThread.Sleep()メソッド等も入れてみましたが、多少ちらつきが改善された程度で根本的な解決には至っていません。
> ListViewのちらつきを無くす為には他にどのような事をすればよろしいでしょうか。C#言語歴半年と初心者な私ですがよろしくお願い致します。

WinForms だと根絶は難しいので今はそういうものとあきらめるのが簡単かと.
どうしてもちらつきが我慢できなければ,WPF,ブラウザ + HTML といった宣言型の描画 API に移行するのが根本的な解決になるかと思います.
引用返信 編集キー/
■11337 / inTopicNo.4)  Re[2]: ListViewのちらつき、仮想化について
□投稿者/ む〜ちょ (4回)-(2007/12/12(Wed) 14:21:42)

>れいさんへ
私の説明不足で申し訳ございませんでした。
ダブルバッファの方も既に実装済です。やれる事はやったという事で、後は上書き回数を減らすような処理を考えていくしかないのでしょうか…


>NyaRuRuさんへ
貴重なご意見ありがとうございます。WinFormsの限界だとしたら諦めるしかないですねぇ…。良い勉強になりました。

引用返信 編集キー/
■11338 / inTopicNo.5)  Re[3]: ListViewのちらつき、仮想化について
□投稿者/ れい (296回)-(2007/12/12(Wed) 14:26:30)
No11337 (む〜ちょ さん) に返信
> ダブルバッファの方も既に実装済です。やれる事はやったという事で、後は上書き回数を減らすような処理を考えていくしかないのでしょうか…


ダブルバッファを実装すれば少なくともちらつきはしなくなるはずですよ。
遅くなったり違う問題は発生するかもしれませんが。
「ちらつき」の定義の問題でしょうか?




引用返信 編集キー/
■11342 / inTopicNo.6)  Re[4]: ListViewのちらつき、仮想化について
□投稿者/ 渋木宏明(ひどり) (594回)-(2007/12/12(Wed) 15:21:06)
渋木宏明(ひどり) さんの Web サイト
> ダブルバッファを実装すれば少なくともちらつきはしなくなるはずですよ。

BCL の ListView は、ありがちな対策を施してもチラツいた記憶があります。

ListView アイテムの書き換えのタイミングにもよりますが、BeginUpdate(), EndUpdate() 出来るようならこれも行うべきです。
(オーナードローのコールバックの中でやっても意味がありません。念のため)

引用返信 編集キー/
■11346 / inTopicNo.7)  Re[5]: ListViewのちらつき、仮想化について
□投稿者/ れい (297回)-(2007/12/12(Wed) 15:49:52)
No11342 (渋木宏明(ひどり) さん) に返信
>>ダブルバッファを実装すれば少なくともちらつきはしなくなるはずですよ。
> BCL の ListView は、ありがちな対策を施してもチラツいた記憶があります。

おやや?

私の環境(Vista)ではありがちなダブルバッファしただけで全くちらつきませんよ。

引用返信 編集キー/
■11349 / inTopicNo.8)  Re[6]: ListViewのちらつき、仮想化について
□投稿者/ 渋木宏明(ひどり) (596回)-(2007/12/12(Wed) 16:38:55)
渋木宏明(ひどり) さんの Web サイト
> 私の環境(Vista)ではありがちなダブルバッファしただけで全くちらつきませんよ。

サブアイテムを再設定する時、ListView 全体を Refresh() しているかのようにチラツつきませんか?

引用返信 編集キー/
■11350 / inTopicNo.9)  Re[6]: ListViewのちらつき、仮想化について
□投稿者/ 渋木宏明(ひどり) (597回)-(2007/12/12(Wed) 16:50:11)
渋木宏明(ひどり) さんの Web サイト
>サブアイテムを再設定する時、ListView 全体を Refresh() しているかのようにチラツつきませんか?

こんな感じ。

http://hidori.jp/downloads/junktest/TestListView-20071212.zip

1/10 秒に1回、10個のサブアイテムを更新しただけでこのありさま。。。

# オーナードローしてもこれ治らなかったはず。

引用返信 編集キー/
■11352 / inTopicNo.10)  Re[6]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (25回)-(2007/12/12(Wed) 16:58:39)
2007/12/12(Wed) 17:19:17 編集(投稿者)
2007/12/12(Wed) 17:15:36 編集(投稿者)
2007/12/12(Wed) 17:05:02 編集(投稿者)

No11346 (れい さん) に返信
>
> 私の環境(Vista)ではありがちなダブルバッファしただけで全くちらつきませんよ。

Vista (というか DWM) はティアリング回避のために GDI 描画を横取りし,オフスクリーンサーフェイスを介したデスクトップ描画を行っています.
DWM 管理下では,垂直同期のタイミングでしかデスクトップは更新されません.
例えば GDI で 1 秒間に 100 回の描画を行ったとしても,画面更新回数は垂直同期 (最近の液晶ディスプレイであれば 60 Hz 等) に制限されます.
Windows XP で起きていたような,一秒間に非常に多数の画面更新がおきるようなちらつきは,DWM 管理下では原理上起きないのです.(もちろん,WPF や HTML であっても DWM 管理下で無ければこの手のちらつきは起き得るわけですが)

という感じに様々な様々なレイヤーの特性が絡んでくる現象なので,特定の Win32 コントロールをダブルバッファ描画しただけで解決というほど事態は単純ではない,というのが私の意見です.

Direct3D の排他モード (フルスクリーンモード) みたいな,限られた状況であればアドバイスしやすいんですけどね.

>「ちらつき」の定義の問題でしょうか?

確かに,何故ちらついているか,どのようにちらついているかは最初に確認した方が良いのかもしれませんね.
一方これはジレンマでもあって,何故ちらついているかという原理が分かる程度にメカニズムを把握できていれば,そもそも自分であちこち弄って解決できてしまう,あるいはどうしようもない問題だと判断できてしまう,と.
今から Win32 の描画メカニズムを本腰を入れて学ぶコストと,HTML / WPF / Vista の普及ペースを考えれば,とりあえず諦めて放置というのもありかなぁと思う次第だったりします.

引用返信 編集キー/
■11353 / inTopicNo.11)  Re[7]: ListViewのちらつき、仮想化について
□投稿者/ Hongliang (216回)-(2007/12/12(Wed) 17:14:07)
できるかぎり再描画範囲を狭めるべく、WM_PAINT を捕まえて一旦強制的にクライアント領域全面を ValidateRect、しかる後更新があったサブアイテムの範囲だけ改めて Invalidate ってやったことがありますね。
引用返信 編集キー/
■11354 / inTopicNo.12)  Re[7]: ListViewのちらつき、仮想化について
□投稿者/ 渋木宏明(ひどり) (598回)-(2007/12/12(Wed) 17:29:06)
渋木宏明(ひどり) さんの Web サイト
> 1/10 秒に1回、10個のサブアイテムを更新しただけでこのありさま。。。

DataGridView では、同じ様なペースで更新を行ってもここまでヒドイことにはならなかったので、最近は DataGridView をよくつかうようになりました>じぶん
引用返信 編集キー/
■11358 / inTopicNo.13)  Re[7]: ListViewのちらつき、仮想化について
□投稿者/ れい (298回)-(2007/12/12(Wed) 18:50:13)
2007/12/12(Wed) 18:58:44 編集(投稿者)

No11350 (渋木宏明(ひどり) さん) に返信
> >サブアイテムを再設定する時、ListView 全体を Refresh() しているかのようにチラツつきませんか?
> こんな感じ。

ListViewはサブアイテムを変更するときでも全体を更新しますし、
更新がすごく遅いので白いバックグラウンドが見えてしまってちらつきますね。

ダブルバッファしたListViewを使うと
全体をRefreshしているようにはなりません。

class BufferedListView : System.Windows.Forms.ListView {
protected override bool DoubleBuffered { get { return true; } set {} }
}

No11352 (NyaRuRu さん) に返信
> Vista (というか DWM) はティアリング回避のために GDI 描画を横取りし,オフスクリーンサーフェイスを介したデスクトップ描画を行っています.

Vistaの描画も大体は知っていて、その上で言ったんですが、
私の言葉の定義が変なのかな?

> >「ちらつき」の定義の問題でしょうか?
> 確かに,何故ちらついているか,どのようにちらついているかは最初に確認した方が良いのかもしれませんね.

私の「ちらつく」の定義は、「本来上書きされて消えてしまうべきものが見えてしまう状態」です。
バッファした画像を実際に描画するときにずれたりするのは含めません。
そうするとXPでもVistaでも、ダブルバッファを正しく使ってるなら、定義上絶対にちらつきません。

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

> という感じに様々な様々なレイヤーの特性が絡んでくる現象なので,特定の Win32 コントロールをダブルバッファ描画しただけで解決というほど事態は単純ではない,というのが私の意見です.

私の定義の通りの問題なら、ダブルバッファで解決ですが、
「ちらつく」が、高速で描画していること事態で発生する「見づらい状態」なら、
ダブルバッファしても解決するとは限りませんね。

ダブルバッファしているのにちらつくらしいので、
複雑な問題ということなのかもしれません。
なら詳しく話を聞きたいところです。

追記。
あと2回投稿したら300回記念!
大切に投稿します。
引用返信 編集キー/
■11365 / inTopicNo.14)  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 のみの問題であればおそらくれいさんの方法で解決できるかと思いますが.
引用返信 編集キー/
■11371 / inTopicNo.15)  Re[9]: ListViewのちらつき、仮想化について
□投稿者/ れい (299回)-(2007/12/12(Wed) 23:17:41)
2007/12/12(Wed) 23:23:34 編集(投稿者)

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

「フリッカ」とは何を指すのでしょう?
「ティアリング」はかなり厳密な定義があると思うのですが、
それと並べられるほど厳密な定義を私は知りません。
教えていただけるとうれしいです。

> WinForms (というか Windows の描画モデル) の問題には,コントロール同士の重なり (*1) に起因する「ちらつき」もあって,こちらはたとえ Form の DoubleBuffered を有効にしても (*2) Windows XP では解消できません.

なんかちょっと私の理解と違います。

コントロール同士の重なりに起因するちらつきは
Control.DoubleBufferedで解消できる場合もあり、
できるかできないかはXPでもVistaでも関係ありません。

Control.DoubleBufferedはWS_EX_COMPOSITEDを指定するような実装になっていて、
これは自分および子の描画を全部ダブルバッファしてくれるものですから、
WS_EX_COMPOSITEDが効くならXPでもVistaでも解消できます。

ただ、WS_EX_COMPOSITEDはCS_OWNDCなどを持つウィンドウには効きません。
(これはいくつかのコモンコントロールが含まれます。)

ですから、Control.DoubleBufferedで「ちらつき」が解消できないとすれば
それはWS_EX_COMPOSITED or comctl32の問題で、XPもVistaも変わりません。

逆に、WS_EX_COMPOSITEDが効かないウィンドウはDoubleBufferedを適用しても、
XP、Vistaに関わらずちらつきます。
これは例えばTreeViewを使ってみればわかります。
Vistaでも十分にちらつきます。

> 「WinForms でのちらつき」=「ダブルバッファで解決……するはずがうまくいかない,なんで?」ということを Web で書いている人も多いですが,結構な割合がこのパターンかと思っています.

私は上記のWS_EX_COMPOSITEDの問題とティアリングと、2者が同等に多いように思います。

> なので個人的には「ちらつき」=「ダブルバッファで解決」みたいな,原因の理解を放棄したような図式は嫌いだったり.

条件反射的思考は確かに危険ですが、
かといって全ての物事の原因をいちいち考えるわけにもいきません。

原因を追究するのも人間の持つすばらしい能力ですが、
原因や理由の理解を取り敢えず置いておく能力や条件反射的思考のといった、
思考の簡略化もすばらしい能力であると思います。

#半導体のキャリア移動度を知らなくてもプログラミングはできますし、
#TCAサイクルを知らなくてもご飯を食べないと死んでしまうのはわかります。
#九九を暗記してなければ私はまともに掛け算もできません。

#カプセル化も思考の簡略化そのものですよね。

いつ、どのように、どこまで省くのか、理解するのかが重要かと思います。

#「ちらつき」=「ダブルバッファで解決」
#「原因の理解を放棄したような図式」=「ダメ」
#この2者は何が違うんでしょうか?

今回は「ちらつき」「ListView」「仮想化」という単語が並んでいて、
「ダブルバッファ」が一回も出てこないなら、
「してみたら?」と原因も考えずに言うのも価値はありかなと思います。
知らないかもしれないし。

同様に、ちらつくなら取り敢えずダブルバッファしてみるのも価値ありだとと思います。
効いたらOKですし、効かないなら効かないで、ちらつく原因を知る一助になります。

む〜ちょさんがどういう状況なのか、いまいちわかりませんが、
おそらくきちんとダブルバッファされてないのだと思っています。
きちんとダブルバッファされてるなら、
「ちらつく」という言葉の定義が私と違うので、
どうちらつくのか説明がほしいです。

引用返信 編集キー/
■11376 / inTopicNo.16)  Re[10]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (27回)-(2007/12/13(Thu) 00:35:27)
2007/12/13(Thu) 01:41:34 編集(投稿者)
2007/12/13(Thu) 00:45:51 編集(投稿者)
2007/12/13(Thu) 00:44:46 編集(投稿者)
2007/12/13(Thu) 00:39:33 編集(投稿者)
2007/12/13(Thu) 00:37:31 編集(投稿者)
No11371 (れい さん) に返信
> 2007/12/12(Wed) 23:23:34 編集(投稿者)
>
> ■No11365 (NyaRuRu さん) に返信
>>あと,「ちらつき」という言葉の曖昧さを避けるとすれば,現象を「フリッカ」と「ティアリング」に区別した方が良いのかもしれませんね.
>
> 「フリッカ」とは何を指すのでしょう?
> 「ティアリング」はかなり厳密な定義があると思うのですが、
> それと並べられるほど厳密な定義を私は知りません。
> 教えていただけるとうれしいです。

明暗の違いなどが頻繁に繰り返される状況で,ちょうどれいさんの定義の「ちらつく」が該当するように思いました.
れいさんの定義の「ちらつく」はティアリングを除いているのですよね?
後述の WS_EX_COMPOSITED で英語サイトを検索してみると,flickering という単語がよく出てきますが,彼らの言っている flickering の意味で,かつ tearing を含まない「ちらつき」に限定して話したい場合,「フリッカ」または flickering と書いた方が意思の疎通は図りやすいかなと思います.

>>WinForms (というか Windows の描画モデル) の問題には,コントロール同士の重なり (*1) に起因する「ちらつき」もあって,こちらはたとえ Form の DoubleBuffered を有効にしても (*2) Windows XP では解消できません.
>
> なんかちょっと私の理解と違います。
> (中略)

なるほど.WS_EX_COMPOSITED はちゃんと理解していなかったので勉強になりました.

>#「ちらつき」=「ダブルバッファで解決」
>#「原因の理解を放棄したような図式」=「ダメ」
>#この2者は何が違うんでしょうか?

すみません.そのあたりの議論をしたいわけではないので取り下げます.

>>なので個人的には「ちらつき」=「ダブルバッファで解決」みたいな,原因の理解を放棄したような図式は嫌いだったり.
>
> 今回は「ちらつき」「ListView」「仮想化」という単語が並んでいて、
> 「ダブルバッファ」が一回も出てこないなら、
> 「してみたら?」と原因も考えずに言うのも価値はありかなと思います。
> 知らないかもしれないし。

その辺は多分アプローチの違いでしょうね.
私は掲示板で何度もやりとりを繰り返して投稿数が増えていくのが嫌いなので.
とりあえず私が出てこない方が話が進みやすそうなのでこれでひっこみます.

横道にそれさせてしまってすみませんでした.

(追記)
すみません,一点だけ.

>Control.DoubleBufferedはWS_EX_COMPOSITEDを指定するような実装になっていて、

これの情報源が分かれば教えて頂きたいです.
引用返信 編集キー/
■11378 / inTopicNo.17)  Re[11]: ListViewのちらつき、仮想化について
□投稿者/ れい (300回)-(2007/12/13(Thu) 07:29:21)
No11376 (NyaRuRu さん) に返信
> 私は掲示板で何度もやりとりを繰り返して投稿数が増えていくのが嫌いなので.

私はNyaRuRuさんほどエレガントに答えられないので。
一回の投稿に全情報を入れるのは私には無理なので。

> とりあえず私が出てこない方が話が進みやすそうなのでこれでひっこみます.

もったいないから引っ込まないでください。
300回目の投稿もNyaRuRuさんのためにとっておいたのに。(嘘

> なるほど.WS_EX_COMPOSITED はちゃんと理解していなかったので勉強になりました.
> >Control.DoubleBufferedはWS_EX_COMPOSITEDを指定するような実装になっていて、
>
> これの情報源が分かれば教えて頂きたいです.

昔、.Net2.0の出始めかベータのころ、
プロパティからWS_EX_COMPOSITEDスタイルを指定できるようになるという話が
MSの誰かのブログにあったはずです…と思って調べたんですが出てきません。

Spyで調べたらわかるかなとおもったんですが、
Form.DoubleBuffered=trueでもWS_EX_COMPOSITEDがついてません

そういえばBufferedGraphicsというのもありました。

なんか嘘つきな予感が漂ってきました。

あとで調べてまとめておきます。

#最近嘘つき率が上昇中なような…

引用返信 編集キー/
■11413 / inTopicNo.18)  Re[8]: ListViewのちらつき、仮想化について
□投稿者/ れい (301回)-(2007/12/13(Thu) 13:00:28)
ちらつきをまとめてみました。
やはり私はうそつきでした。今度からうそつきと呼んでください。

しかも前に同じこと調べてました。記憶が混乱してたみたい。
一体何回調べれば覚えるんだろう…。

------------------------------------------------

■言葉の定義
・ちらつき=フリッカ=flicker=上書きされて消えるべきものが一瞬見えてしまう状態
・ズレ=テアリング=tearing=フレーム更新中に画像が更新され、ズレてしまう状態

■一般的回避策

・フリッカの回避策
上書きを行わないor実際に表示される前に上書きを終える。
普通はダブルバッファを行う。
メモリ転送が遅ければ、テアリングを助長することもありうる。

・テアリングの回避策
フレーム更新とオンスクリーンバッファの更新が重ならないようにする。
普通は同期して更新する。
ローレベルなサポートがないと対策は困難。
DWMで改善。

■Windows/.Net Windows.Forms におけるフリッカ対策

○あきらめる

○Win32のWS_EX_COMPOSITED

XP以降で用いることができる。

CreateParamsを継承して設定する。

WS_EX_COMPOSITEDを指定したウィンドウおよびその子ウィンドウの描画を
オフスクリーンバッファで行い、WM_PAINT終了後に更新するという処理をOSがやってくれる。

CS_CLASSDC、CS_OWNDCを持つウィンドウには適用されない。

その他ScrollBarに対してはうまく効かなかったり、TabControlでごみが残ったり、
トップレベルウィンドウに効かなかったり、
激しくバグあり且つバージョン依存が激しい。

DWMでは問題は減っている。

○.NetのDoubleBuffered / ControlStyles.OptimizedDoubleBuffer

ウィンドウのOnPaint、OnPaintBackgroundをBufferedGraphics対象に行い、
WM_PAINT終了時にBufferedGraphics.Renderすることで
ちらつきを防ぐ。

継承してコンストラクタでDoubleBuffered=trueとしたり、
DoubleBufferedをオーバーライドしてreturn trueとしたり、
SetStyleしたりして設定する。

描画にはBufferedGraphicsが用いられる。

ウィンドウ単位でのダブルバッファになるので、子ウィンドウがあるとダメ。

OSによって描画されるコントロール(TextBoxやStatusBar、DateTimePickerなど)は効かない。

ListViewは例外。DoubleBufferedをtrueにするとLVS_EX_DOUBLEBUFFERが適用され、
それによってダブルバッファされる。

○その他の方法

TreeViewはVista以降ならTVS_EX_DOUBLEBUFFER(0x02000000)を指定すればダブルバッファされる。

コントロールがたくさんあってちらつく場合はコントロールをWS_EX_COMPOSITEDなPanelに入れるとよい。

Tabコントロールの場合はTabControlにWS_EX_COMPOSITEDを指定するのではなく、
TabPageにWS_EX_COMPOSITEDを指定するとゴミが出にくい。

■その他。

・ダブルバッファはメモリを大量に食うので注意。
・うそ情報の可能性が高いので鵜呑みにしない。

引用返信 編集キー/
■11449 / inTopicNo.19)  Re[9]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (29回)-(2007/12/13(Thu) 21:56:07)
No11413 (れい さん) に返信
> ちらつきをまとめてみました。

非常に参考になりました.深謝.
とっかかりとして十分なキーワードがリストアップされているように思います.

# 今後何度かあんちょこに利用させて頂くことになりそうです.
# いずれログ置き場に送られて URL が変わってしまうのが勿体ないぐらい.
引用返信 編集キー/
■11457 / inTopicNo.20)  Re[10]: ListViewのちらつき、仮想化について
 
□投稿者/ れい (307回)-(2007/12/14(Fri) 08:39:30)
No11449 (NyaRuRu さん) に返信
> # 今後何度かあんちょこに利用させて頂くことになりそうです.
> # いずれログ置き場に送られて URL が変わってしまうのが勿体ないぐらい.

私は「将来の自分へのメモ」という意味も含め投稿してますし、
他の人の投稿も細かい内容は覚えてられないので
URLが変わっちゃうのがいつもすごく残念です。

blogはめんどくさいので自分で公開することもできず。
PCに入れるとすぐ無くすし。
MSDNにメモが欲しいのもそういう理由で。

全文コピーして嘘を直したり情報を追加したりして
恒久的なストレージで公開してくれる人がいるとうれしいですねぇ
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -