ツリーアイテムの今の状態の取得 – プログラミング – Home

ツリーアイテムの今の状態の取得
 
通知
すべてクリア

[解決済] ツリーアイテムの今の状態の取得


なつき
 なつき
(@なつき)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

お世話になっています。
なつきといいます。

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

ツリーアイテムの状態を取得するために
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
 TAD
(@TAD)
ゲスト
結合: 23年前
投稿: 54
 

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);


返信引用
なつき
 なつき
(@なつき)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

なつきです。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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