リストビューっていいよね。個人的に好きなコントロールである。
リストビュー作成・操作等に関して、クラスを作成したのでこれを提供しちゃいます。プロパティ・メソッドは以下の通り。ヘッダーコントロール・イメージリストのプロパティ・メソッドがあるけど、これはリストビューで使用するもので、単独では使えないからね。結構、気合が入っているでしょう。
リストビューのメソッド・プロパティ |
メソッド |
機 能 |
AllSelect |
すべてのアイテムを選択する |
ClearListView |
リストビューをクリアする |
CreateFixedFont |
固定幅フォントを作成し、変更する |
CreateListView |
リストビューを作成する |
CreateListViewFont |
リストビューにフォントを設定する |
DeleteLine |
行を削除する |
DeleteSelectLine |
選択されているアイテム行を削除する |
DestroyListView |
リストビュー・イメージリスト・ヘッダーコントロールを破棄する |
ExecuteSort |
一番左のカラムを基準に昇順にソートする |
ExecuteSortEx |
アイテムを基準に昇順・降順にソートする |
GetClickItemIndex |
クリックされた行を取得する
|
GetItemStr |
アイテムの文字列を取得する |
GetListViewHeight |
リストビューの高さを取得する |
GetSelectLineNum |
選択されている行を1つだけ取得する |
GetSelectLineNumEx |
選択されている行・行数を取得する |
GetTopIndex |
表示されているアイテムの1番上の行のインデックスを取得する |
InsertItem |
アイテムを追加作成するる |
IsInListViewRECT |
マウスの位置がアイテム表示領域内であるか調べる |
LV_Resize |
リストビューをウインドウにあわせてリサイズする |
LV_SetFocus |
リストビューにフォーカスをあてる |
RedrawAllItem |
リストビューのすべての行を再描画する |
RedrawItem |
リストビューの行を再描画する |
SetItem |
アイテムを追加する |
SetItemSelect |
リストビューの指定の行を選択状態にする |
SetListViewAttr |
属性を変更する |
プロパティ |
機 能 |
p_BackColor |
リストビューの背景色を取得・設定する |
p_Enable |
リストビューの可能状態を取得・設定する |
p_ForeColor |
リストビューの文字色を取得・設定する |
p_Height |
リストビューの高さを取得・設定する |
p_hListview |
リストビューのハンドルを取得する |
p_Rows |
リストビューの行数を取得する |
p_SelItemNum |
リストビューの選択されているアイテムの数を取得する |
|
ヘッダーコントロールのメソッド・プロパティ |
メソッド |
機 能 |
CreateFixedFont |
固定幅フォントを作成し、変更する |
CreateHeader |
ヘッダーコントロールをリストビューにセットする |
CreateHeaderCtrlFont |
ヘッダコントロールにフォントを設定する |
DestroyListView |
リストビュー・イメージリスト・ヘッダーコントロールを破棄する |
GetHeaderHeight |
ヘッダーコントロールの高さを取得する |
SetHeaderAttr |
ヘッダーコントロールの属性を変える |
プロパティ |
機 能 |
p_hHeaderCtrl |
ヘッダーコントロールのハンドルを取得する |
|
イメージリストのメソッド・プロパティ |
メソッド |
機 能 |
AddMyImage |
イメージリストにイメージを追加する |
CreateImageList |
イメージリストを作成する |
DeleteAllImage |
イメージをすべて削除する |
DestroyListView |
リストビュー・イメージリスト・ヘッダーコントロールを破棄する |
DrawImage |
イメージを描画する |
GetImageNum |
格納しているイメージの数を取得する |
プロパティ |
機 能 |
p_hImageList |
イメージリストのハンドルを取得する |
クリックイベントを認識させるにはサブクラス化して WM_LBUTTONDOWN メッセージを拾わないとだめだよ。何番目のアイテムがクリックされたかを知るには以下のようにする必要がある。
Case WM_LBUTTONDOWN
Dim yPos As Long 'クリックしたY座標
Dim HeaderHeight As Long 'ヘッダーコントロールの高さ
Dim ListViewHeight As Long 'リストビューコントロールの1アイテムの高さ
Dim ClickItemNum As Long 'クリックしたときのアイテムインデックス(0-Base)
yPos = GetHiWord(lParam) 'Y座標
'Debug.Print wParam
' Ctrl キーが押されていれば9
'Shift キーがおされていれば5
'を取得する
'ヘッダーコントロールの高さ
HeaderHeight = cListView.GetHeaderHeight
'リストビューコントロールの高さ
ListViewHeight = cListView.GetListViewHeight
If ListViewHeight Then
'アイテムのポジションを取得(0-Base)
ClickItemNum = (yPos - HeaderHeight) \ ListViewHeight
'一番上のアイテムインデックスを加算する
ClickItemNum = ClickItemNum + cListView.GetTopIndex
End If
詳しくはヘルプファイルをみてね。この他に
・ダブルクリックイベントの取得方法
・アイテム表示領域外でマウスのクリックイベントを無効にする方法
・ヘッダーコントロールでクリックされたカラムのインデックスを取得する
・ソート機能は実装しているがネイティブコードコンパイル時は動作しない…
を載せてるよ。
ダウンロード (81.9KB)
2010/8/31 追記
リストビュー実装のサンプルとして、「ビットマップからAVIファイルを作成する」を見ると良いです。こちらのサンプルは、上記ダウンロードサンプルでは実現していない、ネイティブコードコンパイルによるソート機能が実装されていたり、1行ごとに背景色を付けたり、非アクティブになっても選択行の色をそのまま保持したり、など各種の実装があります。
|