一覧表示リストビューとは、特定の表示形式に基づいてアイテムを表示するコントールのことです。上図は、一覧表示と呼ばれる最もシンプルなリストビューです。一覧表示ではアイテムを下へ順に表示していき、ウインドウの下側まで到達した場合はアイテムを右側へと表示する特徴があります。本章ではマクロを使用することにします。リストビューにアイテムを追加するには、ListView_InsertItemを呼び出します。pitem);hwndは、リストビューのハンドルを指定します。pitemは、LVITEM構造体のアドレスを指定します。LVITEM構造体は、次のように定義されています。maskは、使用するメンバを表す定数を指定します。iItemは、アイテムのインデックスを指定します。iSubItemは、サブアイテムのインデックスを指定します。stateは、アイテムの状態を表す定数を指定します。stateMaskは、アイテムの状態を表す定数を指定します。pszTextは、アイテムのテキストを指定します。cchTextMaxは、pszTextのサイズを指定します。iImageは、イメージリストのインデックスを指定します。lParamは、アプリケーション定義値を指定します。iIndentは、アプリケーション定義値を指定します。iGroupIdは、アイテムが属しているグループのIDを指定します。cColumnsは、puColumnsの要素数を指定します。puColumnsは、タイル表示におけるサブアイテムのインデックスを格納した配列を指定します。リストビューに追加されたアイテムに関する情報を取得したい場合は、ListView_GetItemを呼び出します。pitem);hwndは、リストビューのハンドルを指定します。pitemは、LVITEM構造体のアドレスを指定します。今回のプログラムは、リストビューを一覧表示で作成します。アイテムが選択された場合は、そのアイテムの名前をウインドウタイトルに表示します。lParam);}リストビューを作成する場合は、事前にInitCommonControlsExを呼び出しておく必要があります。このとき、dwICCメンバにはICC_LISTVIEW_CLASSESを指定します。第3引数にリストビュー専用のウインドウスタイルを指定します。LVS_LISTは、リストビューをリスト表示することを意味します。アイテムを追加するコードは、次のようになっています。&item);アイテムを追加する場合は、pszTextにアイテムのテキストを指定します。pszTextメンバを使用する場合は、maskにLVIF_TEXTを指定します。iItemはアイテムのインデックスであり、これは0から始まります。よって、2回目のListView_InsertItemでは、iItemを1つカウントしています。maskの値に関係なく、iItemとiSubItemは必ず初期化するべきといえます。リストビューのアイテムの状態が変更された場合は、通知コードがLVN_ITEMCHANGEDであるWM_NOTIFYが送られます。0;LVN_ITEMCHANGEDでは、lParamにNMLISTVIEW構造体のアドレスが格納されています。iItemが-1である場合は有効なアイテムを指していないことを意味するため、処理を続行しないようにします。アイテムの状態(uNewState)が選択状態になってない場合も処理を続行しません。アイテムの名前を取得するには、maskにLVIF_TEXTを指定してListView_GetItemを呼び出します。LVIF_TEXTを指定すれば、pszTextに文字列を受け取るバッファを指定することができます。iItemは対象となるアイテムのインデックスを指定しますが、これはNMLISTVIEW構造体から参照できます。これはクリックによるアイテムの選択を検出するだけです。キーによるアイテムの選択を検出しないことに注意してください。アイテムの状態リストビューのアイテムが選択された場合は、アイテムが選択状態となりハイライト表示されるようになります。このような現在選択されているアイテムを特定したい場合は、次のコードを実行します。-1を指定した場合は最初のアイテムから検索されます。LVNI_SELECTEDは選択状態のアイテムを検索することを意味します。-1の場合はアイテムが見つからなかったことを意味します。ListView_GetItemText(ListView_GetItemでも可)を呼び出しています。ListView_GetItemStateでアイテムの状態を確認する方法もあります。MB_OK);}}ListView_GetItemCountを呼び出せば、リストビューに追加されているアイテムの数を取得できます。アイテムが第3引数の状態であるかを確認することができます。