Checkされたノード取得 – プログラミング – Home

通知
すべてクリア

[解決済] Checkされたノード取得


いけやん
 いけやん
(@いけやん)
ゲスト
結合: 16年前
投稿: 32
Topic starter  

昨日も質問した、いけやんです。

開発環境
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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>m_tree.GetItemText(m_tree.GetRootItem());
では常にルートをさすのでは?

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

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

>>m_tree.GetItemText(m_tree.GetRootItem());
>では常にルートをさすのでは?

GetParentItemですよねー


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

よくみたらつねに ht しかみていないですね。
チェックが入っているのはm_HndTree[i]ですので ht を見るのは間違っています。


返信引用
いけやん
 いけやん
(@いけやん)
ゲスト
結合: 16年前
投稿: 32
Topic starter  

すいません。色々試していたら

返信遅くなりました。

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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>m_tree.GetItemText(m_tree.GetCheck(m_HndTree[i]));
m_tree.GetItemText(m_HndTree[i]);
です。
GetCheckの戻り値はHTREEITEMではありません。

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


返信引用
いけやん
 いけやん
(@いけやん)
ゲスト
結合: 16年前
投稿: 32
Topic starter  

Blueさんありがとうございます。

m_tree.GetItemText(m_HndTree[i]);

うまくいきました。

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

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


返信引用
いけやん
 いけやん
(@いけやん)
ゲスト
結合: 16年前
投稿: 32
Topic starter  

すいません。Blueさんに聞きたいのですが、

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

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

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

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

m_tree.GetItemText(NULL);

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


返信引用
いけやん
 いけやん
(@いけやん)
ゲスト
結合: 16年前
投稿: 32
Topic starter  

Blueさん。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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