Win32でSHBrowseForFolderを使用して、ダイアログを出していますが
いくつか不明な点があるのでおたずねします。
昨今のアプリのディレクトリ選択ダイアログには
現在表示されているカレントディレクトリから親ディレクトリへ移動するための
アイコンがついていますが、これはどのようにしたら表示できるのでしょうか?
また、SHBrowseForFolderだと
ディレクトリ選択ダイアログを開いたときに最初に表示されるディレクトリ位置は
BROWSEINFO.pidlRootが
NULLでマイコンピュータ
その他パスで、指定パスがルート
しか選択できませんでした。
私としては、ダイアログが開いたときに、
カレントディレクトリが表示されており親ディレクトリの階層などへ移動できるようにしたいの
ですが・・・
たいていの市販アプリはできますよね・・?
またGetOpenFileNameのようなインターフェースでディレクトリを選択する方法はないものでし
ょうか?
これができるならSHBrowseForFolderを使わなくてすむし、一気に問題は解決するのです
が・・
以上よろしくお願いします
> また、SHBrowseForFolderだと
> ディレクトリ選択ダイアログを開いたときに最初に表示されるディレクトリ位置は
> BROWSEINFO.pidlRootが
> NULLでマイコンピュータ
> その他パスで、指定パスがルート
> しか選択できませんでした。
BROWSEINFO.lpfnでコールバックを指定して、
コールバックにBFFM_INITIALIZEDメッセージが来た時に
BFFM_SETSELECTIONメッセージを投げるコトで設定できるかと…
http://www.google.co.jp/search?q=SHBrowseForFolder+%E5%88%9D%E6%9C%9F%E3%83%95%
E3%82%A9%E3%83%AB%E3%83%80+%E6%8C%87%E5%AE%9A&ie=UTF-8&hl=ja&lr=lang_ja
> 昨今のアプリのディレクトリ選択ダイアログには
> 現在表示されているカレントディレクトリから親ディレクトリへ移動するための
> アイコンがついていますが、これはどのようにしたら表示できるのでしょうか?
ちょっとその機能がどんなものなのかわからないんですが
例えばどんなアプリで採用されてますか?
> GetOpenFileNameのようなインターフェースでディレクトリを選択する方法は
> ないものでしょうか?
フックして CDM_FILEOK をつかまえればできるかもしれません。
できました。
ありがとうございました。
googleで初期フォルダで調べればよかったんですね
ディレクトリ Win32 SHBrowseで調べたら山のようにでてきました;;
調べ方一つで簡単に解決できるんですね、反省・・(よく考えればわかったようなきもする
が・・;;
>ちょっとその機能がどんなものなのかわからないんですが
>例えばどんなアプリで採用されてますか?
たとえばVS.NETなどで新規プロジェクト作成時のダイアログとかですね
参照を選ぶとGetOpenFileNameのようなダイアログで親ディレクトリへ移動のアイコンがありま
す
>フックして CDM_FILEOK をつかまえればできるかもしれません。
これはどのようにしたらいいのでしょうか?
> たとえばVS.NETなどで新規プロジェクト作成時のダイアログとかですね
あぁ、SHBrowseForFolder じゃなくて、こういうのですか。
この「ひとつ上のフォルダへ」機能が欲しいと。
GetOpenFileName には普通にありますよね。
> >フックして CDM_FILEOK をつかまえればできるかもしれません。
> これはどのようにしたらいいのでしょうか?
OPENFILENAME 構造体の Flags メンバに OFN_ENABLEHOOK を加え
lpfnHook メンバに OFNHookProc 型のコールバック関数のアドレスを入れてやります。
すると、ダイアログの様々なイベントがコールバック関数に通知されて来ます。
OK を押すと、CDN_FILEOK メッセージが飛んでくるので、それを捕まえて
現在のフォルダパスを取得してやればできるんじゃないでしょうか。
#なんか VC++ がエラいことになってて試せません。
#新規プロジェクトが作れなくなっちゃった…
間違えました。
OK 押してもファイルが選択されてないと CDN_FILEOK が飛んでこない。
OnCommand でも捕まらない。
こうなったらもうサブクラス化しかないか…?
お返事ありがとうございました
試してみます。