ツリーコントロールでアイコンが表示されない – プログラミング – Home

ツリーコントロールでアイコンが表示され...
 
通知
すべてクリア

[解決済] ツリーコントロールでアイコンが表示されない


トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

こんばんは。
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
 Eighty
(@Eighty)
ゲスト
結合: 22年前
投稿: 12
 

> 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


返信引用
トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

レス有難うございます。
以下のソースに修正しても表示されません。
何が悪いでしょうか?

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
 akey
(@akey)
ゲスト
結合: 22年前
投稿: 53
 

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

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


返信引用
Eighty
 Eighty
(@Eighty)
ゲスト
結合: 22年前
投稿: 12
 

> いえ、第2、第3引数でそれぞれ通常時、選択時のイメージのインデックスを指定してい
> るので問題ないでしょう・・

しまった!見間違えた。


返信引用
akey
 akey
(@akey)
ゲスト
結合: 22年前
投稿: 53
 

ひょっとして・・

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

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


返信引用
トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

なんと!!フラグが違うとは…リストコントロールと同じフラグで実行してましたよ。
ご迷惑をかけて申し訳ないです。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました