List View にアイコンを設定

List View にアイコンを設定して「大きいアイコン(NORMAL)/小さいアイコン(SMALL)/レポート形式(LIST)」を切り替えます。

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

  1. 次のアイコンを作成して、リソースとして登録して下さい。
    アイコンの作成と登録は 自分専用のアイコンを使用する を参照して下さい。
    アイコンのIDは「""」で囲って下さい。
    カラーモード 16色モード
    アイコンの個数 5人分=5個
    アイコンのサイズ 32×32ピクセル
  2. ページ先頭の画像を参考にして Dialog Box を作成して下さい。
    commctrl.h をインクルードして、comctl32.lib をリンクして下さい。
  3. List View のプロパティから次の設定をして下さい。
  4. Instance を保存する領域と ImageList の定義です。
    アイコンや画像を取り扱うツールとして ImageList が用意されています。
        HINSTANCE   gInst;
        HIMAGELIST  hImage, hSmall;
        char    t_icon[][8]= { "icon1","icon2","icon3","icon4","icon5" };
        char    t_name[][13]=
        { "赤井  伸浩","荒木  真一","加藤  純","黒岩  真由子","北川  雅美子" };
        
  5. WinMain() では DialogBox を表示するだけです。
  6. WM_INITDIALOG: でアプリケーションの初期化を行います。
        case WM_INITDIALOG:
            SetWindowText(hDlg,TITLE);
            InitCommonControls();
            SetInitialData(GetDlgItem(hDlg,IDC_LIST1));
            break;
        
  7. 「大きいアイコン(NORMAL)/小さいアイコン(SMALL)/レポート形式(LIST)」を切り替えるコードです。
    DialogBox のボタンクリックで呼び出されます。
            switch (LOWORD(wp))
            {   case IDC_NORMAL:
                    SetWindowLong(GetDlgItem(hDlg,IDC_LIST1), GWL_STYLE,
                        WS_CHILD | WS_VISIBLE | LVS_EDITLABELS | LVS_ICON);
                    break;
                case IDC_SMALL:
                    SetWindowLong(GetDlgItem(hDlg,IDC_LIST1), GWL_STYLE,
                        WS_CHILD | WS_VISIBLE | LVS_EDITLABELS | LVS_SMALLICON);
                        break;
                case IDC_LIST:
                    SetWindowLong(GetDlgItem(hDlg,IDC_LIST1), GWL_STYLE,
                        WS_CHILD | WS_VISIBLE | LVS_EDITLABELS | LVS_LIST);
                    break;
        
  8. 大きいアイコンと小さいアイコンを設定するコードです。
        //★ 初期データを設定
        void    SetInitialData(HWND hList)
        {   LV_ITEM     item;
            int         i;
    
            // ImageList の定義
            hImage= ImageList_Create(32,32,ILC_COLOR4,5,0);
            hSmall= ImageList_Create(16,16,ILC_COLOR4,5,0);
            ListView_SetImageList(hList,hImage,LVSIL_NORMAL);
            ListView_SetImageList(hList,hSmall,LVSIL_SMALL);
    
            // ITEM の設定
            item.mask= LVIF_TEXT | LVIF_IMAGE;
            for(i=0; i<5; i++)
            {   ImageList_AddIcon(hImage,LoadIcon(gInst,t_icon[i]));
                ImageList_AddIcon(hSmall,LoadIcon(gInst,t_icon[i]));
                item.pszText= t_name[i];
                item.iItem= i;
                item.iSubItem= 0;
                item.iImage= i;
                ListView_InsertItem(hList,&item);
            }
        }
        
  9. プログラムの終了前にイメージリストを開放して下さい。
        ImageList_Destroy(hImage);
        ImageList_Destroy(hSmall);
        

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