C#, C♯, C#相談室 Part45

このエントリーをはてなブックマークに追加
182デフォルトの名無しさん
ListViewでItemを追加してEndUpDateすると、全部のItemが再描画
されてしまいます。そこでそのちらつきを出さない方法についてこちら
でおききしていました。>http://pc11.2ch.net/test/read.cgi/tech/1197507828/859

その中のソースがC#なのでC#スレでお訊きします。よろしくです。
CodeProject Flicker-free ListView in .NET and XP. Free source code and programming help
http://www.codeproject.com/KB/list/listviewxp.aspx
にあるサンプルを試してみたのですが、DEMO版がうまくいくのにソース版
ですよ対策なしと同じでした。

ListViewのDoubleBufferingはちらつき防止に効果あるでしょうか?
またowner draw にした場合は自分でItemを描画する必要があるのでしょうか。
よろしくお願いします。
183182:2008/02/12(火) 20:18:38
>>182 訂正>ソース版ですよ対策なしと同じ -> ソース版ですと対策なしと同じ

該当のサイトでは
public void SetExStyles()
{
LVS_EX styles = (LVS_EX)SendMessage(this.Handle,
(int) LVM.LVM_GETEXTENDEDLISTVIEWSTYLE, 0,0);
styles |= LVS_EX.LVS_EX_DOUBLEBUFFER | LVS_EX.LVS_EX_BORDERSELECT;
SendMessage(this.Handle,
(int) LVM.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (int) styles);
}

のようなコードがありました。これはDoubleBufferを使っているようなのですが、
owner draw はしてないようでした。一方、このサイトへのコメントレスとして
ついていたものでは、owner draw にしておいて
 this.SetStyle(ControlStyles.OptimisedDoubleBuffer, True);
とするだけでちらつきはなくなるようなことが書かれていましたが、これは
自分で描画してやらないといけないようでその場合どのように描画すれば
よいのかわかりませんでした。自分で描画しないでも可能なような意味にも
取れてよくわからないのでした・・・

すみませんが、何卒よろしくお願いします。