HTREEITEMのツリー上のパスを取得したい

[戻る]
水の 2005/05/11(水) 17:31:25
WinXP SP2 MFC VC++6.0

HTREEITEMを利用しツリーリストを作成しました。
そこでツリー上のパスを取得したいと思っています。
何か良い方法あれば教えてください

aa
   bbb
   ccc
      dddd
   sss

こんなツリーでddddを選択した場合のパスは
aa/ccc/dddとしたいです。

シャノン 2005/05/11(水) 23:43:30
TVM_GETNEXTITEM + TVM_GETITEM で親がなくなるまで再帰処理するとか。
毎回それじゃ遅いと言うなら、子ノードを作るときに lParam 領域に親の情報を持たせ
ておくとか。

akey 2005/05/12(木) 10:49:36
1.GetSelectedItemで自分のハンドルを取得
2.GetItemTextで名前を取得
3.名前を繋げる
4.GetParentItemで親のハンドルを取得
5.ハンドルがNULLになるまで2〜4を繰り返し

水の 2005/05/12(木) 13:11:19
[[解決]]
完成しました。
みなさまありがとうございます。

// フォルダツリーのパスを取得
CString SearchView::GetFolTreePath(HTREEITEM iItem){

    // 名前を取得
    vector<CString> NameList;
    while(iItem != NULL ){
          NameList.push_back( m_Tree.GetItemText(iItem) );
        iItem = m_Tree.GetParentItem(iItem);
    }

    // 名前をパスとして繋げる
    CString Path;
    bool FirstFlg = false;
    for(int i = NameList.size(); i > 0; i-- ){

        if(FirstFlg == false){
            FirstFlg = true;
        }else{
            Path += "\\";//2回目以降
        }
        Path += NameList[i-1];
    }
    return Path;
}

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