MFCでダイアログベースのアプリケーションを作成しています。
レポート形式のリストビューにアイコンを表示させたいのですが、
可能でしょうか?
CListCtrlのメンバを調べましたが、それらしいものはありませんでした。
特定のセルにアイコンを表示させたいです。
なにか、参考になるものはないでしょうか?
開発環境としては、VisualC++6.0/windows2000です。
よろしくお願いいたします。
SetImageListでコントロールにイメージを割り当てる事が出来ます。
あらかじめアイコンとして使用したい画像のイメージリストを作成しておきます。
> 特定のセルにアイコンを表示させたいです。
サブアイテムにもって事でしたら、DrawItemをオーバーライドして自力でやるか、セルの位置
にイメージを貼り付ければ(やったことないけど)いいと思います。
リストコントロールの拡張スタイルに、LVS_EX_SUBITEMIMAGESというのがありますね…。
> リストコントロールの拡張スタイルに、LVS_EX_SUBITEMIMAGESというのがありますね…。
あ、本当ですね。
勉強になります。ありがとうございます。
NEG(ねぐ)さんに教えていただいた通りにしましたが、
アイコン(ビットマップ)が表示されませんでした。
以下のソースでは、カラムを指定して、アイコンをセット
している箇所がありませんが、どうすればよろしいでしょうか?
SetImageListは、特にカラムなどを指定するパラメータがありませんが、
どのように使うのでしょうか?
ご存知でしたら、是非教えて頂けないでしょうか?
CImageList m_imglst;
CListCtrl *clc=(CListCtrl *)GetDlgItem(IDC_LIST1);
clc->SetExtendedStyle(clc->GetExtendedStyle()|LVS_EX_SUBITEMIMAGES);
m_imglst.Create(IDB_BITMAP1,16,0,RGB(0,128,128));
m_imglst.SetBkColor(::GetSysColor(COLOR_WINDOW));
clc->SetImageList(&m_imglst,LVSIL_SMALL);
clc->InsertColumn(0,column1,LVCFMT_LEFT,60);
clc->InsertColumn(1,column2,LVCFMT_LEFT,60);
clc->InsertColumn(2,column3,LVCFMT_LEFT,60);
clc->InsertItem(0,item1,0);
clc->SetItem(0,1,LVIF_TEXT|LVIF_IMAGE,sub1,0,0,0,0);
clc->SetItem(0,2,LVIF_TEXT|LVIF_IMAGE,sub2,0,0,0,0);
ImageListにアイコンなどを追加していって、
ListViewではそのインデックス番号を指定します。
CListCtrl::SetItem()でLVIF_IMAGEは指定しているのでnImageでImageList内のインデッ
クスを指定すればOKなハズです。
LVS_EX_SUBITEMIMAGESの方はやったこと無いのでちょっと不明ですが。
LVS_EX_SUBITEMIMAGESを指定しておくと、
CListCtrl::SetItem()の5番目の引数の値が有効になってきます。
上記の例では、イメージのインデックスとして0(=0番目)が指定されていますね。
イメージリストには、事前にアイコンを最低1つ追加しておく必要があります。
回答を頂き、ありがとうございます。
以下のようにしましたが、アイコンが表示されませんでした。
m_imglst.Addでイメージリストにビットマップを追加しました。
SetItemの第5パラメータに0番目を指定しました。
これで、m_imglst.Addで追加したビットマップが表示されると
思うのですが。何度も大変申し訳ありませんが、
教えて頂けないでしょうか?
CImageList m_imglst;
int m_nIcon1;
CBitmap bmp1;
CListCtrl *clc=(CListCtrl *)GetDlgItem(IDC_LIST1);
clc->SetExtendedStyle(clc->GetExtendedStyle()|LVS_EX_SUBITEMIMAGES);
m_imglst.Create(16,16,ILC_COLOR,1,0);
bmp1.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
m_nIcon1 = m_imglst.Add(&bmp1,RGB(255,0,0));
clc->SetImageList(&m_imglst,LVSIL_SMALL);
clc->InsertColumn(0,column1,LVCFMT_LEFT,60);
clc->InsertColumn(1,column2,LVCFMT_LEFT,60);
clc->InsertColumn(2,column3,LVCFMT_LEFT,60);
clc->InsertItem(0,item1,0);
clc->SetItem(0,1,LVIF_TEXT|LVIF_IMAGE,sub1,0,0,0,0);
clc->SetItem(0,2,LVIF_TEXT|LVIF_IMAGE,sub2,0,0,0,0);
CImageList m_imglst;
はCDialogクラスのメンバ変数になっていますでしょうか?
イメージを保持しておかないと表示されません。
m_imglstをクラスのメンバに追加したらアイコンが表示されました。
親切に教えていただいて、とても感謝しております。
ありがとうございました。