2011年9月1日木曜日

ListViewのちらつきを抑える(C#)

ListViewはダブルバッファリングが無効なため、項目を追加・削除すると表示にちらつきが生じる。また、背景色を変更するとListView全体に再描画され、これもまたちらつく。一定時間おきに背景色を更新するアプリを作ったら気になってしょうがなかった。対策にはListViewを継承したクラスを作って代わりに使用すれば良い。

引用元:http://geekswithblogs.net/CPound/archive/2006/02/27/70834.aspx
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);

//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}

protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if(m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}

0 件のコメント:

コメントを投稿