CListCtrl の理解には,アイテムやサブアイテムの理解が必要となる.
エクスプローラーでは「詳細表示」画面で1行で1つのファイルとなるが,この行がアイテムである.1行にはファイル名,サイズなどのカラムがあるがこれがサブアイテムである.サブアイテムは詳細表示の時のみ表示される.
LV_ITEM.iItem は各行を識別,LV_ITEM.iSubItem は各行のカラムを識別する.
サブアイテム 0 はアイテム自身を表し,アイコン表示などでも表示される.
(エクスプローラーのファイル名)
エクスプローラーみたいなものは以下のように作成する.
int idColumn[3]; // カラム番号 (サブアイテム ID) の保持用
// カラムの作成 (最初の一回だけ)
LV_COLUMN column;
// 他の LV_COLUMN メンバは設定済みとする
column.pszText = "ファイル名";
idColumn[0] = listctrl.InsertColumn(0, &column);
column.pszText = "サイズ";
idColumn[1] = listctrl.InsertColumn(1, &column);
column.pszText = "日時";
idColumn[2] = listctrl.InsertColumn(2, &column);
// 各アイテムの追加 (LV_ITEM の他のメンバの設定については省略)
while ( 追加アイテム数 ) {
char strbuf[64];
LV_ITEM item;
int idItem;
item.iSubItem = idColumn[0];
item.pszText = ファイル名;
idItem = listctrl.InsertItem(&item);
// InsertItem() によって item ID (行番号) が返される
item.iItem = idItem;
item.iSubItem = idColumn[1]; // 2 カラム目 (ファイルサイズ)
sscanf(strbuf, "%lu", ファイルサイズ);
item.pszText = strbuf;
listctrl.SetItem(&item);
item.iSubItem = idColumn[2]; // 3 カラム目 (日付)
item.pszText = ファイル日付;
listctrl.SetItem(&item);
}
// あるファイルのサイズが変更された,サイズを更新する
item.mask = LVIF_TEXT;
item.iItem = アイテム ID; // 行番号(アイテム ID)を指定する
item.iSubItem = idColumn[1]; // 2 カラム目がサイズフィールド
sprintf(strbuf, "%lu", ファイルサイズ);
item.pszText = strbuf;
listctrl.SetItem(&item);
参照
状態イメージの表示
アイテム追加(SDK)
アイテム追加(簡易版)