Checkされたノード取得

[戻る]
いけやん 2008/07/29(火) 14:40:59
昨日も質問した、いけやんです。

開発環境
WinXP Pro
Visual C++6.0
MFC ダイアログベース

内容は、チェックされたノードを取得し

ノード名、親ノード、兄弟ノードを

表示する処理をやっているのですが、

考え方が間違っているのか、

うまく行きません。

昨日の今日で申し訳ないですが、

どうぞ、よろしくお願いします。

CString ss,wkss;
HTREEITEM ht = m_tree.GetSelectedItem();

for(int i = 0 ; i < 75 ; i++){
 if(m_tree.GetCheck(m_HndTree[i]) != 0){

    ss = ss + "\n親ノードは:" +              
m_tree.GetItemText(m_tree.GetRootItem());

    ss = ss + "\n前のノードは:" + m_tree.GetItemText(m_tree.GetPrevSiblingItem(ht));

    ss = ss + "\n次のノードは:" + m_tree.GetItemText(m_tree.GetNextSiblingItem(ht));

    AfxMessageBox(ss,MB_OK|MB_ICONINFORMATION);
 }
}

Blue 2008/07/29(火) 14:48:27
>m_tree.GetItemText(m_tree.GetRootItem());
では常にルートをさすのでは?

CTreeCtrl::GetParentItem
http://msdn.microsoft.com/ja-jp/library/aybe0edk(VS.80).aspx

また、それぞれ戻り値を確認すべきでしょう。

>GetPrevSiblingItem
>GetNextSiblingItem
NULLを返す時がある。

επιστημη [HomePage] 2008/07/29(火) 15:01:13
>>m_tree.GetItemText(m_tree.GetRootItem());
>では常にルートをさすのでは?

GetParentItemですよねー

Blue 2008/07/29(火) 15:03:35
よくみたらつねに ht しかみていないですね。
チェックが入っているのはm_HndTree[i]ですので ht を見るのは間違っています。

いけやん 2008/07/29(火) 16:58:11
すいません。色々試していたら

返信遅くなりました。

CString ss,wkss;
HTREEITEM ht = m_tree.GetSelectedItem();
for(int i = 0 ; i < 75 ; i++){
  if(m_tree.GetCheck(m_HndTree[i]) != 0){
    //ss = ss + "\nチェックされているノード:" +
m_tree.GetItemText(m_tree.GetCheck(m_HndTree[i]));
    ss = ss + "\n親ノードは:" +
m_tree.GetItemText(m_tree.GetParentItem(m_HndTree[i]));
    ss = ss + "\n前ノードは:" +
m_tree.GetItemText(m_tree.GetPrevSiblingItem(m_HndTree[i]));
    ss = ss + "\n次ノードは:" +
m_tree.GetItemText(m_tree.GetNextSiblingItem(m_HndTree[i]));
    AfxMessageBox(ss,MB_OK|MB_ICONINFORMATION);
  }
}  

親、前、次ノードの表示はうまくいったのですが、

チェックされているノードの表示させる

処理を忘れていていました。

どうも、うまく行きません。

よろしく、お願いします。

Blue 2008/07/29(火) 16:59:44
>m_tree.GetItemText(m_tree.GetCheck(m_HndTree[i]));
m_tree.GetItemText(m_HndTree[i]);
です。
GetCheckの戻り値はHTREEITEMではありません。

# NULL チェックしなくても大丈夫なのか、、、

いけやん 2008/07/29(火) 17:21:39
[[解決]]
Blueさんありがとうございます。

m_tree.GetItemText(m_HndTree[i]);

うまくいきました。

επιστημηさん
Blueさんありがとうございます。

解決したのですが、
Blueさんに質問していいですか?

いけやん 2008/07/29(火) 17:50:53
すいません。Blueさんに聞きたいのですが、

[# NULL チェックしなくても大丈夫なのか、、、]

if(○ != NULL)みたいな処理の事ですよね?

基本的な事なら、すいません。

エラー等を出さないために必要なんですか?

Blue 2008/07/30(水) 01:36:21
m_tree.GetItemText(NULL);

でエラーがでなければ問題ないと思います。
(試していないのでわからん。多分SendMessage(TVM_GETITEM)が失敗で帰ってきて空文字
列を返しているだけかなと)
ただ、たとえば次ノードがないのに「次ノードは」と表示するのは微妙かも。

いけやん 2008/07/30(水) 08:56:48
Blueさん。

返信ありがとうございます。

確かに、次ノードがないのに表示するのは、おかしいですね。

参考になりました。ありがとうございます。

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