SHBrowseForFolderのエディットボックスの取得方法

[戻る]
lise 2004/01/10(土) 15:59:52
SHBrowseForFolderをBIF_EDITのフラグを立てて呼び出すことで、
エディットボックスが作成されますが、
これの入力値を取得する方法はあるのでしょうか。

利用方法としてフォルダ選択をしたパスに対して、
エディットボックスに入力した名称のフォルダを作成しようと考えております。
(新規フォルダ作成ボタンでも同じ機能を実現できなくはないですが。。。)

シャノン 2004/01/10(土) 17:17:48
私の環境では、そのエディットボックスはコントロール ID が 0x3744 らしいので、コ
ールバック関数内で GetDlgItemText でも呼んでやれば取得できるでしょう。
が、すべての OS で ID が 0x3744 であることは保障できないので、あまりおすすめは
できません。

新しいフォルダを作成する目的でしたら、なぜ新規フォルダ作成ボタンを使わないので
しょうか?
Win9x 系を考慮するためというのでしたら止むを得ませんが、そうでないなら標準の機
能を使っておくべきかと思います。

どうしても自作するのでしたら、BIF_EDIT を使わずに、自分で ID を決めたエディット
ボックスを作ってやれば、すべての環境で同じ ID になるでしょう。

n [E-Mail] 2004/01/10(土) 17:18:20
エディットボックスの入力はそのまま親に通知されるので(spy++で確認)、
親をサブクラス化すればOKでは。

シャノン 2004/01/10(土) 18:11:18
BIF_EDITBOX ってフラグを普段使わないので、的確なアドバイスができませんでした。
ごめんなさい。

フラグに BIF_VALIDATE を含めてやれば、OK を押したときにエディットボックスに無効
なパスが入っていると、コールバック関数に BFFM_VALIDATEFAILED が飛んできますね。
この lParam が、エディットボックスに入力した文字列になっています。

ここでフォルダ作成処理を行えばいいと思います。
それを中央のツリービューに反映させたいのであればその処理も行う必要があります
ね。

lise 2004/01/11(日) 11:39:37
[[解決]]
シャノンさん、nさん、ご回答いただきましてありがとうございます。

新規フォルダボタンを使わない理由としては、
ユーザのオペレーションが多少煩雑になってしまうことを懸念したからです。

BIF_VALIDATEのフラグを立てることでエディットボックスの文字列を
確認することができました。これで想定する機能を実現できそうです。
ありがとうございます。

古いスレッドには追加発言できません。