はじめまして。
ダイアログベースでプログラミングをしています。
リストコントロールを貼り付けて、アイコンを
リストコントロールの2行目に表示したいのですが、
とりあえず、1行目に表示されてしまいます。
どうすれば1行目にアイコンが表示されませんか?
こんなコーディングをしています。
<省略>
m_list.SetImageList(&m_imglst,LVSIL_SMALL);
<省略>
m_list.SetItem(i, 0, LVIF_TEXT ,", 0, 0, 0, 0);
m_list.SetItem(i, 1, LVIF_IMAGE,NULL, 0, 0, 0, 0);
よろしくお願い致します。
行の方を変更したいのであれば、m_list.SetItemの第一パラメーターを
変えないと駄目だと思います。今のコードでは列の方を変えていると思います。
HELPをもう一度確認してみてください。
ソースが省略されすぎていてちょっとわかりにくいですね。
変数iがどういう流れで使われるかぐらいはわかる程度のソースをお願いします。
あと、拡張スタイルは何を設定しているとか、自分がやりたい表示の具体的な例が
有った方が話がスムーズに進むのよろしくお願いします。
不十分な説明で大変申し訳ありませんでした。
もう少し細かく書いてみたので、よろしくお願い
します。
void CXXXX::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ModifyStyleEx(WS_EX_CLIENTEDGE,0,SWP_DRAWFRAME);
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(hIcon, TRUE);
SetIcon(hIcon, FALSE);
int m_nIcon1;
CBitmap bmp1;
m_list.SetExtendedStyle(m_list.GetExtendedStyle()|
LVS_EX_SUBITEMIMAGES|LVS_EX_FULLROWSELECT);
m_imglst.Create(16,16,ILC_COLOR,0,0);
bmp1.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
m_nIcon1 = m_imglst.Add(&bmp1,RGB(255,255,0));
m_list.SetImageList(&m_imglst,LVSIL_SMALL);
}
//実際にデータを表示する処理(メソッド)です。
void CXXX::XXMethod1{
int i,j;
for (j=1;j<=10;j++){
i = m_list.InsertItem( 0,あああ, 0);
m_list.SetItem( i, 1, LVIF_IMAGE,NULL, 0, 0, 0, 0);
}
}
m_imglstとm_listはCXXXクラスのメンバとして宣言しています。
CImageList m_imglst;
CListCtrl m_list;
1行目、2行目と言いましたが、1列目、2列目の間違いでした。
すみませんでした。
1列目に必ずアイコンが表示されてしまうのですが、1列目を文字
だけにして、2列目にアイコンを表示したいのですが、可能ですか?
よろしくお願い致します。
可能です。
リストコントロールの拡張スタイルとして、LVS_EX_SUBITEMIMAGESがあります。
これを設定してください。
アイテムを挿入するときの
m_list.InsertItem( 0,あああ, 0);
で第三パラメーターを-1にしてみてください。
アイコンが表示されなくなるはずです。
サブアイテムもアイテムも同じイメージリストを使っているので
インサートするときにイメージのインデックスを0にしていると
イメージリストの先頭にあるアイコンが表示されてしまいます。
但し、アイテム(一番左の列)の先頭には必ずアイコンの幅の分だけ
空白が出来ます。これは今の方法では回避する方法は無いので
あきらめるしかありません。
この空白をなくしたいのであれば、オーナー描画を行って
全ての描画を自力で行う必要があります。
必ずアイコンの幅の分だけ空白が出来るということなので、
1行目は必ずアイコンを表示することにします。
ありがとうございました。