● リストビュー ●

リストビューっていいよね。個人的に好きなコントロールである。

リストビュー作成・操作等に関して、クラスを作成したのでこれを提供しちゃいます。プロパティ・メソッドは以下の通り。ヘッダーコントロール・イメージリストのプロパティ・メソッドがあるけど、これはリストビューで使用するもので、単独では使えないからね。結構、気合が入っているでしょう。

リストビューのメソッド・プロパティ
メソッド 機 能
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行ごとに背景色を付けたり、非アクティブになっても選択行の色をそのまま保持したり、など各種の実装があります。

戻る