DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ListBoxの背景の再描画を止めるには?

環境/言語:[C#]
分類:[.NET]

こんにちは。
.Net のコントロールの再描画について疑問な点があります。

例えば、Form であれば、resize 時に背景色の再描画を止めるためには、

// 再描画の際に、全画面をフラッシュしないようにする。
SetStyle(ControlStyles.Opaque, true);

というコードを書いておくと良いですが、ここで、Form 上に ListBox
を置いてみると、ListBox の中で Form (のResizeに伴う)再描画時に
何故か、ListBox が(ListBoxの)背景色で再描画されてしまいます。

ListBox を継承して、新しくクラスを作成し、Form の時と同様に
SetStyle(ControlStyles.Opaque, true);
を書いてみたりしたのですが、どうしても、ListBox 内の再描画が
とめることが出来ません。

何か、大きな勘違いをしているような気がするのですが。。。今ひとつ
良くわかりません。よろしければ、ヒントを頂けると嬉しいです。

よろしくお願いします。
雲です。
いろいろ試していて、やっと解決をしました。

結論としては、ListBox は、WM_ERASEBKGND を
取得していないのですね。
仕方がないので、ListBox を継承して MyListBox を作成し、
その中で WM_ERASEBKGND を無視することで何とか所望の
動作とすることができました。

以下に、参考までにコードを書いておきます。
protected override void DefWndProc(ref Message m)
{
const int WM_ERASEBKGND = 0x0014;

if( m.Msg != WM_ERASEBKGND ){
base.DefWndProc(ref m);
}
}

# せめて、SetStyle(ControlStyles.Opaque, true);
# で同じ動作をして欲しかった。。。

DOBON.NET | プログラミング道 | プログラミング掲示板