TreeViewにイメージが表示されません

[戻る]
Yosi 2002/06/17(月) 18:52:31
はじめて投稿させていただきます。
よろしくお願いします。
作成しているスタイルはSDIでアプリケーションウィザードの最後の項目で
Windowsエクスプローラスタイルを選択して作っています。
左側のTreeViewにフォルダのイメージを表示させようと思い、こちらの掲示板の
過去ログを見させてもらったところ、分かりやすいサンプルが書いてあったのですが、
なぜが、イメージは問題なく取得できたと思うんですが実際実行してみると
イメージが表示されず、表示されるはずのスペースが開いたままになっています。

void CLeftView::OnInitialUpdate()
{
    CTreeView::OnInitialUpdate();

    // TODO:  GetTreeCtrl() メンバ関数の呼び出しを通して直接そのリスト コ
ントロールに
    //  アクセスすることによって TreeView をアイテムで固定できます。
    
    CTreeCtrl &tree = GetTreeCtrl();    
    CImageList m_image;
    SHFILEINFO sfi;
    HIMAGELIST hSystemImageList = (HIMAGELIST)SHGetFileInfo(
        _T("C:\\"), 0, &sfi, 
        sizeof(SHFILEINFO),
        SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON );
    m_image.Attach(hSystemImageList);
    
    // フォルダアイコン(クローズ)
    SHGetFileInfo("C:\\WINDOWS", 0, &sfi, sizeof(SHFILEINFO), 
        SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON );
    int m_nCloseIndex = sfi.iIcon;
    
    // フォルダアイコン(オープン)
    SHGetFileInfo("C:\\WINDOWS", 0, &sfi, sizeof(SHFILEINFO), 
        SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON | 
SHGFI_SMALLICON );
    int m_nOpenIndex = sfi.iIcon;
    
    tree.SetImageList( &m_image, TVSIL_NORMAL);

    HTREEITEM root = tree.InsertItem("TEST", m_nCloseIndex, m_nOpenIndex);
}
このようにした所、うまくいきません。
VC++でのプログライングは始めたばかりなので、サンプルを参考にいろいろやっていま
す。
原因がよく分からないのでよろしくお願いします。

不良PG [E-Mail] 2002/06/17(月) 20:09:23
イメージリストのオブジェクトがローカル変数なので、
関数から抜けた時に消えてしまうからです。

>CImageList m_image;
ここで作る代わりに

class CLeftView : public C*TreeView
{
      :
  CImageList m_image; //ここで
      :
};

Yosi 2002/06/17(月) 20:46:10
[[解決]]
不良PGさんありがとうございます。
その通りでした。
すいません、こんな簡単なことに気づかなくて。

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