Treeview全ノードにチェック

[戻る]
いけやん 2008/07/28(月) 12:00:20
始めまして、いけやんと申します。

さっそく質問したいと思います。

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

今現在ツリービューで70個前後のノードを表示しています。

そして、その横にはCheckBoxを表示しており

TreeViewの[プロパティ]→[その他のスタイル]

の中にチェックボックスという項目があり

それで表示したCheckBoxなんですが

ボタンをクリックするだけで、全ノードにチェック

する処理をしたいのですが、解らず困っております。

すいませんが、よろしくお願いします。

επιστημη [HomePage] 2008/07/28(月) 12:22:17
void チェックする(ノード n) {
 n にチェックする
  for ( nの子ノード c に対し ) {
    チェックする(c);
}

みたいなもん書いて チェックする(根ノード) すればいいんじゃないかと。

いけやん 2008/07/28(月) 13:21:53
アドバイスありがとうございます。

すいません。VC初心者で、基本的な事かもしれませんが

そのチェックする処理が解らないんですが

よければ教えて頂けないでしょうか?

Blue 2008/07/28(月) 14:03:37
リファレンスをご覧ください。
CTreeCtrl::SetCheck
http://msdn.microsoft.com/ja-jp/library/h1w2w3b3(VS.80).aspx

いけやん 2008/07/28(月) 15:31:46
Blueさんありがとうございます。

リファレンスにのっている事を
聞いてすいませんでした。

まだ、聞きたいのですが
Blueさんに教えて頂いたCTreeCtrl::SetCheckの

サンプルでは、HTREEITEM hItem = m_TreeCtrl.GetFirstVisibleItem();

GetFirstVisibleItemが使われているのですが

これだと、一番上のノードを選択している時は
最初のノードだけチェックが付き

それ以外のノードを選択すると
一番上以外のノードにチェックが付きます。

一番上も、それ以外も、
全ノードにチェックを付けたいのですが

自分なりに何個か試したのですが
うまく行きません。

どのメンバを使えばうまく行くか
教えてもらえないでしょうか?

Blue 2008/07/28(月) 16:08:21
子供のアイテムを取得するにはCTreeCtrl::GetChildItemを
兄弟を取得するにはCTreeCtrl::GetNextItemを使えばいいです。

ルートから全部つけるならCTreeCtrlのメンバ変数m_treeがあるとすると

ある関数()
{
・・省略

   チェックする(TVI_ROOT);

・・省略
}


void チェックする(HTREEITEM hItem) {
  m_tree.SetCheck(hItem);
  HTREEITEM hChildItem = m_tree.GetChildItem(hItem);
  while (hChildItem != NULL)
  {
    チェックする(hChildItem);
    hChildItem = tree.GetNextItem(hChildItem, TVGN_NEXT);
  }
}

というような感じでしょうか。(動作保証なし)

いけやん 2008/07/28(月) 17:51:51
[[解決]]
Blueさんありがとうございます。

参考になりました。

for(){
    m_tree.SetCheck(m_HndTree[i],TRUE);
}

これでやりたかった事が出来ました。

第2引数をTRUEするだけでした・・・

こんな事に気付かずに、本当に申し訳ないです。

επιστημηさん
Blueさん
大変、参考になりました。
ありがとうございました。

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