CTreeCtrlで指定フォルダ以下のみの表示にするには?


たま  2012-05-10 14:01:13  No: 73366  IP: 192.*.*.*

たまです。
いつもお世話になっております。
またわからないことが出てきましたのでお知恵をお貸しください。

現在、CTreeCtrlを利用してFTPサーバー内のフォルダをツリー表示しようとしています。

サーバー内の指定されたフォルダ以下のみ表示したいのですが、サーバー以下のフォルダが全て表示されてしまいます。
指定のフォルダ以下のみ表示、と言うのは出来ないものなのでしょうか?

宜しくお願いします。

編集 削除
瀬戸っぷ  2012-05-10 15:00:41  No: 73367  IP: 192.*.*.*

>サーバー内の指定されたフォルダ以下のみ表示したいのですが、サーバー以下のフォルダが全て表示されてしまいます。
>指定のフォルダ以下のみ表示、と言うのは出来ないものなのでしょうか?

CTreeCtrlに最初に追加するアイテムを「指定されたフォルダ」からにすればよいのでは?
それより上位のフォルダだった場合はCTreeCtrlにアイテムとして追加しなければいいわけですし。

サーバ側でchrootするなりして、上位のフォルダが見えないようにする。
なんて手もあるでしょう。

# で…FTPの場合は「フォルダ」じゃなくて「ディレクトリ」というべき…でしょうかね……。

編集 削除
PATIO  2012-05-10 16:52:00  No: 73368  IP: 192.*.*.*

どういうコードを書いてそういう事をしようとしているのかが
説明されていないのでなんとも状況がわかりません。

自分でFTPサーバーからリスト情報を取得してCTreeCtrlに設定してるなら、そのときの処理で目的のディレクトリ以外はCTreeCtrlに設定しなければよいという話になります。

設定はするけれど、表示はしたくないという話だとするととたんに話が変わってきますけれど。

編集 削除
たま  2012-05-11 11:37:57  No: 73369  IP: 192.*.*.*

たまです。
ありがとうございます。

説明が不足していたようで申し訳ありません。
元々のソースは以下の流れで処理を行っています。
1.FTP接続
2.rootとしてIPアドレス番号をInsertItemで設定
3.指定ディレクトリを選択状態にするため、GetFirstVisibleItem()でハンドルを取得
4.ハンドルとTVE_EXPANDをExpand()に引数で渡す(疑似的にツリー拡張イベントを起こす)
5.OnItemexpanding()イベント内でハンドルのGetItemText()で取得したディレクトリ名内のサブディレクトリ名をCTreeCtrlにInsertItemで設定
概略はこのような流れでCTreeCtrlにディレクトリ名を設定しています。

現在、2で設定するrootを指定ディレクトリ名に変更しても3のGetFirstVisibleItem()を行うと必ずFTPのルートハンドルが取得されてしまい、
ルート以下のディレクトリを全て表示してしまいます。

4以降の処理は他の処理でも利用しているため、GetFirstVisibleItem()の取得値を変得ることができれば、と考えています。
また、指定以下のディレクトリは全て設定&表示させます。
GetFirstVisibleItem()で取得できるハンドルの情報が指定したフォルダの情報になるためには他にも何か設定が必要なのでしょうか?

とてもわかりにくい説明で申し訳ありません。

宜しくお願いします。

編集 削除
PATIO  2012-05-11 14:20:36  No: 73370  IP: 192.*.*.*

今書かれている説明では、
「GetFirstVisibleItem()を行うと必ずFTPのルートハンドルが取得されてしまい」
の部分の意味がわかりません。
各ノードにはディレクトリ名が設定されているようですが、
これとルートハンドルが結びつかないからです。
自分では当たり前に思っている仕様も知らない人から見たら
まったくわからない話になります。
なので、説明に必要な背景に相当する仕様はすべて説明しないと状況がわかりません。
今の説明では指定したディレクトリの名前をノードに設定しているのだろうくらいしかわからないので、ルートハンドルを設定しているから取れているのではないですか位しか書きようがありません。

話に出てくる登場人物に関しては全て説明をしてください。

編集 削除