ディレクトリオープンダイアログについて – プログラミング – Home

ディレクトリオープンダイアログについて
 
通知
すべてクリア

[解決済] ディレクトリオープンダイアログについて


saitama
 saitama
(@saitama)
ゲスト
結合: 21年前
投稿: 12
Topic starter  

Win32でSHBrowseForFolderを使用して、ダイアログを出していますが
いくつか不明な点があるのでおたずねします。

昨今のアプリのディレクトリ選択ダイアログには
現在表示されているカレントディレクトリから親ディレクトリへ移動するための
アイコンがついていますが、これはどのようにしたら表示できるのでしょうか?

また、SHBrowseForFolderだと
ディレクトリ選択ダイアログを開いたときに最初に表示されるディレクトリ位置は
BROWSEINFO.pidlRootが
NULLでマイコンピュータ
その他パスで、指定パスがルート
しか選択できませんでした。

私としては、ダイアログが開いたときに、
カレントディレクトリが表示されており親ディレクトリの階層などへ移動できるようにしたいの
ですが・・・
たいていの市販アプリはできますよね・・?

またGetOpenFileNameのようなインターフェースでディレクトリを選択する方法はないものでし
ょうか?
これができるならSHBrowseForFolderを使わなくてすむし、一気に問題は解決するのです
が・・

以上よろしくお願いします


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

> また、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


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

> 昨今のアプリのディレクトリ選択ダイアログには
> 現在表示されているカレントディレクトリから親ディレクトリへ移動するための
> アイコンがついていますが、これはどのようにしたら表示できるのでしょうか?

ちょっとその機能がどんなものなのかわからないんですが
例えばどんなアプリで採用されてますか?

> GetOpenFileNameのようなインターフェースでディレクトリを選択する方法は
> ないものでしょうか?

フックして CDM_FILEOK をつかまえればできるかもしれません。


返信引用
saitama
 saitama
(@saitama)
ゲスト
結合: 21年前
投稿: 12
Topic starter  

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

googleで初期フォルダで調べればよかったんですね
ディレクトリ Win32 SHBrowseで調べたら山のようにでてきました;;
調べ方一つで簡単に解決できるんですね、反省・・(よく考えればわかったようなきもする
が・・;;


返信引用
saitama
 saitama
(@saitama)
ゲスト
結合: 21年前
投稿: 12
Topic starter  

>ちょっとその機能がどんなものなのかわからないんですが
>例えばどんなアプリで採用されてますか?
たとえばVS.NETなどで新規プロジェクト作成時のダイアログとかですね
参照を選ぶとGetOpenFileNameのようなダイアログで親ディレクトリへ移動のアイコンがありま

>フックして CDM_FILEOK をつかまえればできるかもしれません。
これはどのようにしたらいいのでしょうか?


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

> たとえばVS.NETなどで新規プロジェクト作成時のダイアログとかですね
あぁ、SHBrowseForFolder じゃなくて、こういうのですか。
この「ひとつ上のフォルダへ」機能が欲しいと。
GetOpenFileName には普通にありますよね。

> >フックして CDM_FILEOK をつかまえればできるかもしれません。
> これはどのようにしたらいいのでしょうか?
OPENFILENAME 構造体の Flags メンバに OFN_ENABLEHOOK を加え
lpfnHook メンバに OFNHookProc 型のコールバック関数のアドレスを入れてやります。
すると、ダイアログの様々なイベントがコールバック関数に通知されて来ます。
OK を押すと、CDN_FILEOK メッセージが飛んでくるので、それを捕まえて
現在のフォルダパスを取得してやればできるんじゃないでしょうか。

#なんか VC++ がエラいことになってて試せません。
#新規プロジェクトが作れなくなっちゃった…


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

間違えました。
OK 押してもファイルが選択されてないと CDN_FILEOK が飛んでこない。
OnCommand でも捕まらない。
こうなったらもうサブクラス化しかないか…?


返信引用
saitama
 saitama
(@saitama)
ゲスト
結合: 21年前
投稿: 12
Topic starter  

お返事ありがとうございました
試してみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました