ツリーアイテムの今の状態の取得

[戻る]
なつき 2002/07/11(木) 13:52:32
お世話になっています。
なつきといいます。


ツリーアイテムを選択したときに、
今、そのアイテムが展開されているか、あるいは
閉じている状態かを取得したいと思っています。

ツリーアイテムの状態を取得するために
CTreeCtrl::GetItemState()で、以下のようなコードで
状態を取得してみました。

========================================================
u = TreeCtrl.GetItemState(hOyaItem, 0) & TVIS_EXPANDED;

if(u== TVIS_EXPANDED){
    (処理)アイテムは閉じない
}

=========================================================
しかし、一度展開はされているのですが、現在アイテムは
閉じられているものでもif文の中に入ってきます。

-- #文章が下手なので、図で説明します(すみません…)-----
1.「いいい」を展開する
  あああ
  |
    +----いいい
      |
            +-----ううう

2.「いいい」を閉じる
 あああ
  |
    +----いいい

このとき、「いいい」の状態を取得すると
TVIS_EXPANDED になっている。
--------------------------------------------------------

一度、展開されたものは、今閉じてあるアイテムでも
TVIS_EXPANDED になっているものなのでしょうか。

 #わたしの認識では、TVIS_EXPANDED は、今アイテムが展開
 #されているもの、TVIS_EXPANDEDONCE が、一度展開されている
 #アイテムを検索するものだと考えていました。

まったく勘違いをしているようでしたら、
ご指摘をお願いします。

また、2.の時に展開されていない(今の状態)を
取得する方法をご存知の方がいらっしゃいましたら
ご教授、よろしくお願いします。

TAD [E-Mail] 2002/07/12(金) 03:09:25
TVIS_EXPANDED と TVIS_EXPANDEDONCE の意味は、
なつきさんの合っているはずです。
GetItemState の使い方も正しいと思いますので、
他にミスがあるのではないでしょうか?

hOyaItem は、”いいい”を指していますか?

また、”いいい”を展開した状態で”あああ”を閉じても、
内部では、”いいい”は展開されたままとなります。

こちらでも試しに CTreeVire を使ってやってみましたが、
正しく動作しました。
OnCreate で”あああ”、”いいい”、”ううう”を挿入し、
OnLButtonDown で GetItemState を呼び出しました。

    HTREEITEM hItem = GetTreeCtrl().GetRootItem();
    hItem = GetTreeCtrl().GetChildItem(hItem);     // hItem = いいい

    UINT u = GetTreeCtrl().GetItemState(hItem, 0);

    TRACE("%08X ", u);
    if (u & TVIS_EXPANDED)
    {
        TRACE("TVIS_EXPANDED");
    }
    TRACE("\n");

なつき 2002/07/15(月) 13:04:44
[[解決]]
なつきです。

返信が遅くなりました。
TADさんのおっしゃるとおり、

>また、”いいい”を展開した状態で”あああ”を閉じても、
>内部では、”いいい”は展開されたままとなります。

という状態で、「いいい」の状態を取得していました。
再度、「いいい」を閉じた後、状態を取得したところ
「いいい」は閉じた状態でした。

TADさん、ご指摘ありがとうございました。

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