Last Updated 2014/06/18
Programming Tips Visual C++ MFC CListView(CListCtrl)  索 引 
アイテム追加
2003/01/21

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)
アイテム追加(簡易版)
前後のTips
アイテム追加

DSS ProgrammingTipsCGI Ver2.02