こんばんは。
MFCを使ってツリーコントロールで作業しています。
そこで質問なのですが、
CImageListは他でも使ってるものを使い(そこではアイコンがちゃんと表示されています)
m_Tree = (CTreeCtrl*)GetDlgItem( IDC_TREE );
m_Tree->DeleteAllItems();
m_Tree->SetImageList( &m_ImageList, LVSIL_SMALL);
m_Tree->InsertItem(csA.GetAt(i), 0, 0); //27個登録してるので全部試しましたが駄目
でした。
こうすると、イメージリストにはイメージが存在するはずなのに表示されません。
試しに他にイメージリストを作っても駄目でした。
アイコンを表示するには何か特別な設定があるのでしょうか?教えてください。
お願いします。
> m_Tree->InsertItem(csA.GetAt(i), 0, 0); //27個登録してるので全部試しましたが駄
目
これではテキストしか挿入していません。
イメージの挿入できる別パラメータのInsertItem()を使用しましょう。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vclib/html/_mfc_ctreectrl.3a3a.insertitem.asp
レス有難うございます。
以下のソースに修正しても表示されません。
何が悪いでしょうか?
CDialog::OnInitDialog();
// TODO: この位置に初期化の補足処理を追加してください
CStringArray tempArray;
//ファイル検索関数
CKowaza::FindFileEx( TEXT(\\windows),tempArray,FALSE , TRUE);
TVINSERTSTRUCT tvi;
m_ImageList.Create( 16,16,ILC_COLOR, 1, 1); //メンバ
CTreeCtrl *Tree = (CTreeCtrl*)GetDlgItem( IDC_TREE1 );
Tree->SetImageList( &m_ImageList, LVSIL_SMALL);
for(int i=0;i<tempArray.GetSize();i++)
{
SHFILEINFO sfi;
SHGetFileInfo( tempArray.GetAt(i),0,&sfi,sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX |SHGFI_ICON | SHGFI_SMALLICON |
SHGFI_ATTRIBUTES |SHGFI_DISPLAYNAME );
tvi.hParent = TVI_ROOT;
tvi.hInsertAfter = TVI_LAST;
tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.item.pszText = sfi.szDisplayName;
tvi.item.iImage = sfi.iIcon;
tvi.item.iSelectedImage = sfi.iIcon;
HTREEITEM hItem = Tree->InsertItem( &tvi );
Tree->RedrawWindow();
}
ネット上のソースと同じようにコーディングしたつもりなのですが
悪いところがあったら教えてください。お願いします。
>これではテキストしか挿入していません。
いえ、第2、第3引数でそれぞれ通常時、選択時のイメージのインデックスを指定してい
るので問題ないでしょう・・
おそらく、イメージリスト内にLVSIL_SMALLのイメージが入っていないのでは?
> いえ、第2、第3引数でそれぞれ通常時、選択時のイメージのインデックスを指定してい
> るので問題ないでしょう・・
しまった!見間違えた。
ひょっとして・・
>Tree->SetImageList( &m_ImageList, LVSIL_SMALL);
Tree->SetImageList( &m_ImageList, TVSIL_NORMAL);
では?
TVSIL_NORMALかTVSIL_STATEを指定しないといけない気が・・(MSDN参照)
なんと!!フラグが違うとは…リストコントロールと同じフラグで実行してましたよ。
ご迷惑をかけて申し訳ないです。
実行してみたところ、上のソースだとイメージリストに登録してないので表示されませんが
修正して出来ました!!
Eightyさん akeyさん
お陰さまで解決する事が出来ました。
有難うございました。