List View にカラムと見出しを付ける

List View にカラム設定をして、見出しを付けて表示してみましょう。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで(LvCol)を作成します。
  2. ページ先頭の画像を参考にして DialogBox を作成して下さい。
    DialogBox 全体に ListView を貼り付けて下さい。
    スタイルの表示(View)から「レポート」を選択して下さい。
    キャプションとIDを次のように設定して下さい。
    BOX キャプション ID
    DialogBox Dialog List View IDD_DIALOG1
    ListView IDC_LIST1
  3. commctrl.h をインクルードして、#pragma comment(lib,"comctl32.lib") を記述します。
    HEAD[] は ListView の見出しで、CX[] は Column(項目) の幅です。
    t_name[] は ListView に表示する学籍番号で、t_name[] が名前で、t_kana[] がカナ名です。
        #include    <commctrl.h>
        #pragma     comment(lib,"comctl32.lib")
    
        //List View Test Data
        char    HEAD[][5]= {  "番号", "名前", "カナ"  };
        int     CX[]=      {  60, 160, 180  };
        char    t_number[][5]=
        {   "0010","0012","0020","0023","0027"   };
        char    t_name[][13]=
        {   "赤井 伸浩","荒木 真一","加藤 純","黒岩 真由子","北川 雅美子"   };
        char    t_kana[][10]=
        {   "アカイ ノブヒロ","アラキ シンイチ","カトウ ジュン","クロイワ マユコ","キタガワ マミコ"   };
        
  4. WinMain() では DialogBox を表示するだけです。
    WM_INITDIALOG: の記述です。
    SetWindowText() で DialogBox のキャプションを設定してみました。
    InitCommonControls() で初期化して、SetInitialData() で ListView にデータを登録します。
        case WM_INITDIALOG:
            SetWindowText(hDlg,TITLE);
            InitCommonControls();
            SetInitialData(GetDlgItem(hDlg,IDC_LIST1),5);
            break;
        
  5. データを登録する関数です。
    前回に比べて、Column が設定されていることに注目して下さい。
    Item を追加挿入するときは iSubItem はゼロに設定します。
    Sub Item を追加するときは、iItem に Item 番号を、iSubItem に SubItem(カラム)の番号を設定します。
    マクロ(ListView_InsertColumn())を使わずに直接 SendMessage() を使うこともできます。
    //★ データを登録する
    void    SetInitialData(HWND hTree, int cnt)
    {   LV_COLUMN   lvcol;
        LV_ITEM     item;
        int         i;
    
        // Column の項目設定
        lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
        lvcol.fmt = LVCFMT_LEFT;
        for(i=0; i<3; i++)
        {   lvcol.cx = CX[i];                   //SubItem の表示位置(Column)
            lvcol.pszText = HEAD[i];            //SubItem の見出し
            lvcol.iSubItem = i;                 //SubItem の番号
            ListView_InsertColumn(hTree,i,&lvcol);
    //        SendMessage(hTree,LVM_INSERTCOLUMN,i,(LPARAM)&lvcol);
        }
    
        // ITEM の設定
        item.mask = LVIF_TEXT;
        for(i=0; i<cnt; i++)
        {   item.pszText = t_number[i];         //表示する Item テキスト
            item.iItem = i;                     //Item 番号
            item.iSubItem = 0;
            ListView_InsertItem(hTree,&item);
    //        SendMessage(hTree,LVM_INSERTITEM,0,(LPARAM)&item);
            item.pszText = t_name[i];           //表示するテキスト
            item.iItem = i;                     //Item 番号
            item.iSubItem = 1;                  //SubItem 番号
            ListView_SetItem(hTree,&item);
    //        SendMessage(hTree,LVM_SETITEM,0,(LPARAM)&item);
            item.pszText = t_kana[i];           //表示するテキスト
            item.iItem = i;                     //Item 番号
            item.iSubItem = 2;                  //SubItem 番号
            ListView_SetItem(hTree,&item);
    //        SendMessage(hTree,LVM_SETITEM,0,(LPARAM)&item);
        }
    }
        

超初心者のプログラム入門(Win32API C++)