掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
再帰関数とは (ID:68190)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ありがとうございます。 HTREEITEM ht、ツリービューのメンバ変数をm_tree1として、 「長男」→「長男」→「長男」と下ってゆくだけななら、再帰関数を使わなくても、最初にhtにルートのハンドルを置けば while (1) { ht = m_tree1.GetNextItem(ht, TVGN_CHILD); if ( ht == NULL ) {break; } } で、取得できます。 次に、関数化して入れ子にするなら、 void C***View::saiki(void) { ht = m_tree1.GetNextItem(ht, TVGN_CHILD); if ( ht == NULL ) {return; } saiki(); } を作っておいて、 void C***View::OnBnClickedButton1() { saiki(); } とすれば、同じ結果になります。 次に、「弟」まで取得するなら、HTREEITEM hr を用意して、 void C***View::saiki(void) { hr = ht; ht = m_tree1.GetNextItem(ht, TVGN_CHILD); if ( ht == NULL ) { ht = m_tree1.GetNextItem(hr, TVGN_NEXT); if ( ht == NULL ) { ht = m_tree1.GetNextItem(hr, TVGN_PARENT); } } saiki(); } とすると、ちょっと不完全なコードですが、最も川下の「親」とその「子」全ては取得できます。 しかし、最も川下の「親子」だけで、「ぐるぐるまわし」になってしまい、「親の親」にはさかのぼっていきません。 ここから先が分かりません。 それに、サンプルになるような再帰関数を見ると、もっと単純なコードだと思うのです。 アドバイスを頂けませんでしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.