少し上を行く ListView を表示したい,の巻
2003/11/16 新規
Windows のエクスプローラにある表示機能(WindowsXP だと少し挙動が違うけど)をそのまま提供しているのが ListView クラス。 「大きいアイコン」やら「一覧」「詳細」表示ができる ListView は非常に便利です。
そんな便利な ListView にも、ひとつ不満があります。それはコレ。
そう。
カラム数が少なかったり横幅が長いとき、右側に余白部分ができてしまいます。
この表示がナントナク、だけど けっこうイヤな感じです。
もしコレが気にならない人は、今回の小技はこれにて終了です。
右側の余白をなくすには、最後尾(右)のカラムを自動リサイズに設定することで実現できます。 具体的にはウィンドウ・メッセージを受け取る WndProc() メソッドで、WM_PAINT メッセージを受け取ったときに処理するようにします。
例1
protected override void WndProc(ref Message message)
{
const int WM_PAINT=0x000f;
switch(message.Msg)
{
case WM_PAINT:
if(View==View.Details&&Columns.Count>0)
{
Columns[Columns.Count-1].Width=-2;
}
break;
}
base.WndProc(ref message);
}
|
ListView のサブ・クラスを作り、そのソースの中に上記のコードを加えます。 たったこれだけですが、これだけで右側の余白がなくなります。
ただし、注意しなければならないコトが1点あります。
ListView.AllowColumnReorder の既定値は false ですが、これを true に設定して列ヘッダの並べ替えを可能にすると挙動がおかしくなります。
見た目がイマイチになるので、この小技を使うときには AllowColumnReorder プロパティを false にしておいたほうが良いでしょう。
おまけとして、主なウィンドウ・メッセージのコード一覧とその説明を簡単にリスト・アップしました。
- WM_ACTIVATE = 0x0006
- ウィンドウのアクティブ化、非アクティブ化
- WM_CHAR = 0x0102
- キーボードからの文字の入力
- WM_CLEAR = 0x0303
- エディット・コントロールのテキストの削除
- WM_COMMAND = 0x0111
- メニュー・アイテムの選択、コントロールからの通知
- WM_CONTEXTMENU = 0x007B
- コンテキスト・メニューを表示するために受け取る通知
- WM_COPY = 0x0301
- エディット・コントロールのテキストのコピー
- WM_CUT = 0x0300
- エディット・コントロールのテキストの切り取り
- WM_DROPFILES = 0x0233
- ファイルがドロップされたときに受け取る通知
- WM_GETFONT = 0x0031
- コントロールのフォントを取得
- WM_GETICON = 0x007F
- ウィンドウのアイコンを取得
- WM_GETTEXT = 0x000D
- ウィンドウ・タイトルやコントロールのテキストを取得
- WM_GETTEXTLENGTH = 0x000E
- ウィンドウ・タイトルやコントロールのテキストのサイズを取得
- WM_KEYDOWN = 0x0100
- 非システム・キーが押された
- WM_KEYUP = 0x0101
- 押されていた非システム・キーが離された
- WM_LBUTTONDBLCLK = 0x0203
- マウス左ボタンをダブル・クリック
- WM_LBUTTONDOWN = 0x0201
- マウス左ボタンが押された
- WM_LBUTTONUP = 0x0202
- 押されていたマウス左ボタンが離された
- WM_MBUTTONDBLCLK = 0x0209
- マウス中央ボタンをダブル・クリック
- WM_MBUTTONDOWN = 0x0207
- マウス中央ボタンが押された
- WM_MBUTTONUP = 0x0208
- 押されていたマウス中央ボタンが離された
- WM_MENUSELECT = 0x011F
- メニュー・アイテムが選択された
- WM_MOVE = 0x0003
- ウィンドウの移動
- WM_NOTIFY = 0x004E
- コモン・コントロールからの通知
- WM_NULL = 0x0000
- 効果をもたないメッセージ
- WM_PAINT = 0x000F
- ウィンドウが描画を要求されたときに受け取る通知
- WM_PASTE = 0x0302
- エディット・コントロールのテキストの貼り付け
- WM_RBUTTONDBLCLK = 0x0204
- マウス右ボタンをダブル・クリック
- WM_RBUTTONDOWN = 0x0205
- マウス右ボタンが押された
- WM_RBUTTONUP = 0x0206
- 押されていたマウス右ボタンが離された
- WM_SETFONT = 0x0030
- コントロールのフォントを設定
- WM_SETTEXT = 0x000C
- ウィンドウ・タイトルやコントロールのテキストを設定
- WM_SIZE = 0x0005
- ウィンドウ・サイズ変更
- WM_SYSCOMMAND = 0x0112
- システム・メニュー・アイテム選択
- WM_UNDO = 0x0304
- エディット・コントロールの直前の操作を元に戻す
- WM_USER = 0x0400
- アプリケーション定義メッセージの先頭