List Control で Column を使う

抽出したレコードを List View に表示 は DialogBox を使っているのに対して、 通常のウインドウに直接 List Control を貼り付けます。
通常のウインドウに貼り付けるとメニューが自由に使えるようになります。

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

プロジェクトの設定

  1. テンプレートまたは、空のプロジェクトから作成して下さい。
  2. commctrl.h をインクルードして、comctrl32.lib をリンクして下さい。
    ID_LISTVIEW は List Control のIDです。
    g_hList は List Control のハンドルです。
    HEAD[][5] が Column の見出しで、CX[] がそのサイズです。
    List Control に表示する「番号,名前,三科目の成績」を定義しています。
        /*************************************************/
        /*★ List View に Column を設定する    前田 稔 ★*/
        /*************************************************/
        #define     NAME            "List View"
        #define     TITLE           "List View"
        #include    <windows.h>
        #include    <commctrl.h>
        #include    "resource.h"
        #pragma     comment(lib,"comctl32.lib")
        #define     ID_LISTVIEW     (WM_APP + 0)
    
        HINSTANCE   g_hInst;
        HWND        g_hWnd;
        HWND        g_hList;
    
        //List View Test Data
        short   g_CNT= 12;      //Test Data Count
        char    HEAD[][6]=  {  "番号", "名前", "数学", "英語", "理科"  };
        int     CX[]=       {  80, 100, 60, 60, 60  };
        char    t_num[][6]= {  "0010","0020","0030","0040","0050","0060","0070","0080","0090","0100","0110","0120"  };
        char    t_name[][13]=
        {  "愛知  雅夫", "大阪  恵",   "岡山  英子", "沖縄  妙子", "京都  智史", "滋賀  佳奈子",
           "東京  慎吾", "奈良  憲彦", "兵庫  久美", "北海道  静", "三重  健一", "和歌山  絢子",
        };
        char    t_ten[][3][4]=
        {  " 0"," 0"," 0", "90","90","90", " 8","80","80", "70"," 7","70", "60"," 6","60", "50","50","50",
           "10","20","95", "30"," 9","40", "95"," 5","60", "92","98","84", "35","56","78", "78"," 6","82",
        };
        
  3. ページ先頭の画像を参考にして、簡単なメニューを作成して下さい。
    WinMain() でメニューを設定して、ウインドウのサイズを List Control に合わします。
  4. WM_CREATE: では List View のウインドウを生成してメインウインドウに貼り付けます。
    Column を使うので LVS_REPORT が設定されていることに注意して下さい。
    SetInitialData() で List View に名簿を登録します。
    幅や高さがゼロになっていますが、WM_SIZE: でウインドウのサイズに合わせて設定されます。
            case WM_CREATE:
                InitCommonControls();
                g_hList = CreateWindowEx(0,
                    WC_LISTVIEW, "",
                    WS_CHILD | WS_VISIBLE | LVS_REPORT,
                    0, 0, 0, 0,
                    hWnd, (HMENU)ID_LISTVIEW, g_hInst, NULL);
                SetInitialData(g_hList,g_CNT);
                break;
        
  5. List View に名簿を登録する関数です。
    ListView_InsertColumn() で Column を設定します。
    ListView_InsertItem() で番号を登録します。
    名前と三科目の成績は ListView_SetItem() で登録します。
    item.iSubItem がサブアイテム(Column) の指定です。
        //★ 初期データを設定
        void  SetInitialData(HWND hList, int cnt)
        {   LV_COLUMN   lvcol;
            LV_ITEM     item;
            int         i,j;
    
            // Column の項目設定
            lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
            lvcol.fmt = LVCFMT_LEFT;
            for(i=0; i<5; i++)
            {   if (i==2)   lvcol.fmt= LVCFMT_RIGHT;
                lvcol.cx = CX[i];
                lvcol.pszText = HEAD[i];
                lvcol.iSubItem = i;
                ListView_InsertColumn(hList,i,&lvcol);
            }
    
            // ITEM の設定
            item.mask = LVIF_TEXT;
            for(i=0; i<cnt; i++)
            {   item.pszText = t_num[i];        //番号
                item.iItem = i;
                item.iSubItem = 0;
                item.lParam = i;
                ListView_InsertItem(hList,&item);
                item.pszText = t_name[i];       //名前
                item.iItem = i;
                item.iSubItem = 1;
                ListView_SetItem(hList,&item);
                for(j=0; j<3;j++)
                {   item.pszText = t_ten[i][j]; //数学, 英語, 理科
                    item.iItem = i;
                    item.iSubItem = j+2;
                    ListView_SetItem(hList,&item);
                }
            }
        }
        

【演習】

  1. プログラムを完成させて下さい。
  2. Column にカナを追加して下さい。

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