ツリーコントロールでアイコンが表示されない

[戻る]
トンチャモン 2003/10/02(木) 21:40:02
こんばんは。
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個登録してるので全部試しましたが駄目
でした。

こうすると、イメージリストにはイメージが存在するはずなのに表示されません。
試しに他にイメージリストを作っても駄目でした。

アイコンを表示するには何か特別な設定があるのでしょうか?教えてください。
お願いします。

Eighty 2003/10/03(金) 00:14:11
> 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

トンチャモン 2003/10/03(金) 10:35:09
レス有難うございます。
以下のソースに修正しても表示されません。
何が悪いでしょうか?

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();
}

ネット上のソースと同じようにコーディングしたつもりなのですが
悪いところがあったら教えてください。お願いします。

akey 2003/10/03(金) 10:38:49
>これではテキストしか挿入していません。
いえ、第2、第3引数でそれぞれ通常時、選択時のイメージのインデックスを指定してい
るので問題ないでしょう・・

おそらく、イメージリスト内にLVSIL_SMALLのイメージが入っていないのでは?

akey 2003/10/03(金) 10:55:35
ひょっとして・・

>Tree->SetImageList( &m_ImageList, LVSIL_SMALL);
Tree->SetImageList( &m_ImageList, TVSIL_NORMAL);

では?
TVSIL_NORMALかTVSIL_STATEを指定しないといけない気が・・(MSDN参照)

Eighty 2003/10/03(金) 10:55:24
> いえ、第2、第3引数でそれぞれ通常時、選択時のイメージのインデックスを指定してい
> るので問題ないでしょう・・

しまった!見間違えた。

トンチャモン 2003/10/03(金) 12:41:02
[[解決]]
なんと!!フラグが違うとは…リストコントロールと同じフラグで実行してましたよ。
ご迷惑をかけて申し訳ないです。

実行してみたところ、上のソースだとイメージリストに登録してないので表示されませんが
修正して出来ました!!

Eightyさん akeyさん 
お陰さまで解決する事が出来ました。
有難うございました。

古いスレッドには追加発言できません。