antenn-a
company profile

MFC航海日記 三十一日(CListCtrl を解析する)

最近ウィンドウズ系アプリケーションに良く使われる「CListCtrl」について解析していきたいと思う。 まず、何も知らない事を前提に話をしていくつもりなので(私も知らない為)分かっている方は飛ばして頂いて構わないと思う。

CListCtrlとはエクスプローラの右側にあるようなコントロールを指す。 ここで筆者が一番興味を引いたのは「レポートビュー」なる表現方法であった。

レポートビューはエクスプローラの「表示」-「詳細」をしている時に見えるようなあらわしかたである。 その外にも「アイコンビュー」やらなにやらで色々出来るのであるが、ここはあえてレポートビューだけに的を絞って考えたいと思う。

prev


エクスプローラの右側の部分で「表示」-「詳細」をしている時に上にみえる「名前」や「サイズ」や「ファイルの種類」の部分を「カラム」と呼んでいる。

このカラムはウィンドウスタイルの設定で「カラム無し」というのも指定できるが、あった方がスマートに見えるだろう。(勝手に)

カラムの下には本体ともいえるデータが配置されている。 このデータの事を「アイテム」と呼ぶ。

アイテムは2種類存在し、片方を単純に「アイテム」と呼び、もう片方を「サブアイテム」と呼んでいる。

ここで、一番左側にあるデータの事を「アイテム」と呼び、二番目以降のデータを「サブアイテム」と呼んでいる。

prev



以上が言葉の説明になる。
さて、リストコントロールを用いる為にはまず「CListCtrl」クラスを使うわけだが、リストコントロールクラスの他に構造体を使わなければならない。

その構造体は「LV_ITEM」と言う名前の構造体である。 詳細はヘルプを参照していただくとして、その使い方を紹介したい。

まず、カラムのセットまでを以下に示す。
void InitCorumn()
{
    LV_COLUMN lvc;

    lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    
    //第一カラムの挿入
    lvc.iSubItem = 0;
    lvc.pszText = "第一カラム";
    lvc.cx = 90;
    m_LstCtrl.InsertColumn( 0, &lvc );

    //第二カラムの挿入
    lvc.iSubItem = 1;
    lvc.pszText = "第二カラム";
    lvc.cx = 280;
    m_LstCtrl.InsertColumn( 1, &lvc );

    //第三カラムの挿入
    lvc.iSubItem = 2;
    lvc.pszText = "第三カラム";
    lvc.cx = 110;
    m_LstCtrl.InsertColumn( 2, &lvc );
}
上記の関数でメンバー m_LstCtrl にカラムを設定できる。 ここでは、LV_ITEM構造体の内いくつかの機能を使った。
  1. iSubItem...サブアイテムを指定するかどうか
  2. pszText....テキストを入れるかどうか
  3. cx.........横幅を指定するかどうか
の3つである。

prev



ヘルプを見れば分かると思うが、LV_ITEM 構造体では色々とオプションを付ける事が出来る。 そのうち使いたい機能だけをマスクとして設定し、データをセットする形になる。

例えば、テキストだけしか使用しない場合は、
void InitCorumn()
{
    LV_ITEM    lvc;
    
    lvc.mask = LVCF_TEXT;
    
    lvc.pszText = "This is a test CORUMN!";
}
このようになる。
ここで
void InitCorumn()
{
    LV_ITEM    lvc;
    
    lvc.mask = LVCF_TEXT;
    lvc.pszText = "This is a test CORUMN!";
    lvc.cx = 200;
}
としても、cx 属性は無視される。 マスクに追加していないからである。

今回はここまでにして次回はアイテムの挿入を実装したいと思う。



antenn-a

prev next


antenn-a