お世話になっています。
なつきといいます。
ツリーアイテムを選択したときに、
今、そのアイテムが展開されているか、あるいは
閉じている状態かを取得したいと思っています。
ツリーアイテムの状態を取得するために
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.の時に展開されていない(今の状態)を
取得する方法をご存知の方がいらっしゃいましたら
ご教授、よろしくお願いします。
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);
なつきです。
返信が遅くなりました。
TADさんのおっしゃるとおり、
>また、”いいい”を展開した状態で”あああ”を閉じても、
>内部では、”いいい”は展開されたままとなります。
という状態で、「いいい」の状態を取得していました。
再度、「いいい」を閉じた後、状態を取得したところ
「いいい」は閉じた状態でした。
TADさん、ご指摘ありがとうございました。