始めまして、いけやんと申します。
さっそく質問したいと思います。
開発環境
WinXP Pro
Visual C++6.0
MFC ダイアログベース
今現在ツリービューで70個前後のノードを表示しています。
そして、その横にはCheckBoxを表示しており
TreeViewの[プロパティ]→[その他のスタイル]
の中にチェックボックスという項目があり
それで表示したCheckBoxなんですが
ボタンをクリックするだけで、全ノードにチェック
する処理をしたいのですが、解らず困っております。
すいませんが、よろしくお願いします。
void チェックする(ノード n) {
n にチェックする
for ( nの子ノード c に対し ) {
チェックする(c);
}
みたいなもん書いて チェックする(根ノード) すればいいんじゃないかと。
アドバイスありがとうございます。
すいません。VC初心者で、基本的な事かもしれませんが
そのチェックする処理が解らないんですが
よければ教えて頂けないでしょうか?
リファレンスをご覧ください。
CTreeCtrl::SetCheck
http://msdn.microsoft.com/ja-jp/library/h1w2w3b3(VS.80).aspx
Blueさんありがとうございます。
リファレンスにのっている事を
聞いてすいませんでした。
まだ、聞きたいのですが
Blueさんに教えて頂いたCTreeCtrl::SetCheckの
サンプルでは、HTREEITEM hItem = m_TreeCtrl.GetFirstVisibleItem();
GetFirstVisibleItemが使われているのですが
これだと、一番上のノードを選択している時は
最初のノードだけチェックが付き
それ以外のノードを選択すると
一番上以外のノードにチェックが付きます。
一番上も、それ以外も、
全ノードにチェックを付けたいのですが
自分なりに何個か試したのですが
うまく行きません。
どのメンバを使えばうまく行くか
教えてもらえないでしょうか?
子供のアイテムを取得するには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);
}
}
というような感じでしょうか。(動作保証なし)
Blueさんありがとうございます。
参考になりました。
for(){
m_tree.SetCheck(m_HndTree[i],TRUE);
}
これでやりたかった事が出来ました。
第2引数をTRUEするだけでした・・・
こんな事に気付かずに、本当に申し訳ないです。
επιστημηさん
Blueさん
大変、参考になりました。
ありがとうございました。