• ベストアンサー

ダイアログでフォルダ名を取得したい。

VC++6 で簡単なプログラムを作成しており、その入力として、ダイアログで任意のフォルダパスをユーザに指定させます。 ここで、Win32 API の GetOpenFilename() は、ユーザにフォルダを指定させることができるでしょうか? 色々組んではみたのですが、上記関数ではどうしてもフォルダの指定ができなかったため、フリーで簡単ライブラリと評判の(?) http://www.fox-toolkit.org/ FOX Toolkit を試してはいます。 一応それなりに FXFileDialog::getOpenDirectory() は動作してくれるのですが、パスの中に日本語があると、返却される文字列がおかしくなります。これはどうも UTF-8 でエンコーディングされているようで、自前で UTF-16 に変換し更に wcstombs() などを使用して Shift_JIS (Windows-31J) に変換したら通るようになったのですが、半角カナはダイアログ内の処理自体が通してくれないようで、ダイアログの「OK」ボタンが押せなくなります。これは何か対処方法があるでしょうか。 そのほか、何かほかに良い方法があったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★OS は Windows ですよね。 ・過去に似たような質問がありました。 ・http://oshiete1.goo.ne.jp/qa2711037.html→『ディレクトリを選択するコモンダイアログボックス』 ・回答 No.2 にサンプルを載せてあるので参照して下さい。 ・それでユーザにフォルダを選択させるには、シェル関数の『SHBrowseForFolder()』を使います。  『GetOpenFilename()』はファイル名の選択ですので、フォルダ名の選択は出来ません。 ・『FOX Toolkit』についてはアドバイスできませんので、SHBrowseForFolder() 関数で実現してみたら  よいと思います。これならば『日本語』にも対応していると思います。→確認していませんが…。 ・以上。おわり。→参考にして下さい。

参考URL:
http://oshiete1.goo.ne.jp/qa2711037.html
beubeu
質問者

お礼

すみません、既出でしたか。検索が足りませんでした。 SHBrowseForFolder を使用して半角カナを含めた日本語のパス名も取得することができました。ありがとうございます。 ただ、ちょっと GetOpenFileName() とは見た目が違ってしまうのですね。

その他の回答 (1)

  • yukimican
  • ベストアンサー率70% (112/159)
回答No.1

一般的には、SHBrowseForFolder()を使います。 使い方は、探せばたくさん出てきます。 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E9%81%B8%E6%8A%9E%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0&num=50 ただし、このAPIはWin95/98/NTといった古いOSの場合、 IEのバージョンによって使えなかったり、機能が制限されていたりします。 (バージョン5.0以降であれば問題ありません)

beubeu
質問者

お礼

なるほど、ありがとうございます。

関連するQ&A