• ベストアンサー

ディレクトリを選択するコモンダイアログボックス

Windows APIに関する質問です。 GetOpenFileNameを使うとファイルを選択するコモンダイアログボックスが使えますが、ファイルではなくディレクトリ(フォルダー)を選択するコモンダイアログボックというのは存在するのでしょうか?

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

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

★シェル関数『SHBrowseForFolder』を使う ・下にサンプルを載せます。 ●実装例 static int CALLBACK FuncCallBackProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData ) {  if ( uMsg == BFFM_INITIALIZED ){   if ( HIWORD(lpData) ){    SendMessage( hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)lpData );   }  }  UNREFERENCED_PARAMETER( lParam );  return( 0 ); } extern BOOL FuncSelectFolder( HWND hWnd, LPTSTR lpGetPath, LPCTSTR lpDefPath, LPCTSTR lpTitle ) {  ITEMIDLIST *lpIDlist;  LPMALLOC lpMalloc;  BROWSEINFO bi;    if ( SUCCEEDED(SHGetMalloc(&lpMalloc)) ){   if ( HIWORD(lpDefPath) ){    bi.pidlRoot = NULL;   }   else{    bi.pidlRoot = (LPCITEMIDLIST)lpDefPath;   }   bi.hwndOwner = hWnd;   bi.pszDisplayName = NULL;   bi.lpszTitle = lpTitle;   bi.ulFlags = BIF_RETURNONLYFSDIRS;   bi.lpfn = FuncCallBackProc;   bi.lParam = (LPARAM)lpDefPath;   bi.iImage = 0;      if ( (lpIDlist = SHBrowseForFolder(&bi)) != NULL ){    SHGetPathFromIDList( lpIDlist, lpGetPath );    lpMalloc->Free( lpIDlist );    lpMalloc->Release();    return( TRUE );   }   lpMalloc->Release();  }  lstrcpy( lpGetPath, "" );  return( FALSE ); } 最後に: ・『FuncSelectFolder( hWnd, szBuff, (LPCTSTR)(INT64)CSIDL_FAVORITES, TEXT("お気に入り") );』  とすると『お気に入り』フォルダの選択画面になるよ。 ・『hWnd』にウインドウ・ハンドルを指定 ・『lpGetPath』に選択フォルダ名を取得 ・『lpDefPath』に初期フォルダ名を指定 ・『lpTitle』にタイトル文字列を指定 ・戻り値は選択されれば TRUE、キャンセルならば FALSE を返す。 ・以上。おわり。

BearCave
質問者

お礼

ありがとうございました!サンプルも参考になりました。

その他の回答 (1)

  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

SHBrowseForFolder()でフォルダ選択が可能です。

参考URL:
http://msdn2.microsoft.com/en-gb/library/ms647664.aspx
BearCave
質問者

お礼

ありがとうございました!

関連するQ&A

  • コモンダイアログの設定

    コモンダイアログを表示させると「読み取り専用ファイルとして開く」というチェックボックスがダイアログの下のほうに出ていますが、このチェックボックスを表示させないようにするにはどうすればいいのでしょうか? コモンダイアログはGetOpenFileName関数で表示させています。 また、APIを利用する上で参考になるサイトをご存知でしたら教えてください。

  • フォルダ参照ダイアログボックス

    今、コモンダイアログボックスの使い方を学んだばかりの初心者です。 ファイル名の指定ではなく、フォルダまでのディレクトリを指定するのに、同じようにダイアログボックスを使ってやりたいと思っているのですが、どのようにしたら良いのでしょうか? コモンダイアログボックスですと、ファイルを指定しなければなりませんよね・・・ どなたか教えていただけませんか? よろしくお願いします。

  • コモンダイアログボックスの並び順が逆順になって戻らない。。

    OSは、Windows XP homeです。 いろいろなアプリケーションで 「ファイルを開く」や「名前をつけて保存」する時などに表示される 「コモンダイアログボックス」について質問です。 この「コモンダイアログボックス」、通常ならば表示したときに [名前の正順]でアイコンが並んでいると思うのですが、 これがなぜか、[名前の逆順]で表示されるようになってしまいました。 特定のアプリケーションだけでなく、全てのアプリケーションで同じ症状です。 いちいち、[右クリック]-[アイコンの整列]-[名前]で元に戻すのも 全アプリケーションで毎回となると手間に感じます。 どうすれば、以前のように「コモンダイアログボックス」が[名前の正順]で開かれるのでしょうか? ちなみに、一度[名前の正順]に戻しても、コモンダイアログボックスを開き直すと また[名前の逆順]表示に戻ってしまいます。 どうか直し方を教えてください、お願いします。

  • コモンダイアログのファイルを開くについて

    Windowsのファイルを開くダイアログで、ファイルを開くダイアログから エクセルファイルを選択し、開くボタンを押したら、選択された エクセルファイルを開きたいのですが、ヘルプで参照したところコモンダイアログ があるのを知りました。 ダイアログを開くところまでは、できたのですが、次にエクセルファイルを選択 し、開くボタンを押したときのイベントってどうやってとればよいのかわかりません。 開くボタンを押時に、選択されているパスを取りたいのですが、それもどうやって 取ればよいのやら、、、(+_+) ご教示ねがえませんでしょうか? よろしくお願いいたします。

  • リストボックスのリストをコモンダイアログを使って保存

    タイトルにあるようにリストボックスの内容をテキストファイルにコモンダイアログを使って保存したいのですが、どのようにするのでしょうか? ちなみにコモンダイアログの「名前をつけて保存」は表示させることが出来ます。 宜しくお願いします

  • ファイルとフォルダのどちらも選択できるダイアログ

    環境  OS:Win2000及びWinXP  バージョン:VB6.0 SP5 ファイルとフォルダのどちらも選択できるダイアログを使用する為のAPIを探しています。 詳しく言うと、Windowsのエクスプローラ上で右クリックから新規のショートカットを作成した際の、 ウィザードにて参照ボタンを押下した際に表示される使用されているダイアログのようなものです。 フォルダまたはファイルだけのダイアログをAPIにて表示できる方法は調べて分かったのですが、 フォルダとファイルをどちらでも選択できるダイアログが見つかりませんでした。 逆にフォルダまたはファイルだけのダイアログのAPIのオプションの違いなのでしょうか? ヒント・キーワード・参考サイトだけでも良いので、 よろしくお願いします。

  • コモンダイアログを表示したい

    Windows98/VisualBasic5.0を使用しています。 ファイル名を指定させるために、コモンダイアログを表示したいのですが方法がわかりません。 コントロールを貼り付ければよいのでしょうか? 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • コモンダイアログからExcelへ

    コモンダイアログから既存のExcelファイルを表示させたいのですが、わかりません。 コモンダイアログの「開く」を押すとフルパスが取得されるというのは理解できたのですが、実際にプログラムをどう書いていいのかわかりません。 ファイルのパスを使うとはどういうことでしょうか? またshell関数をどう使えばいいのでしょうか? 基本的な質問で申し訳ありませんが、よろしくお願いします。

  • EXCEL2000のVBAで、ディレクトリを指定するダイアログボックスを出したい

    VBA歴日も間もない者です。仕事上でVBAをいろいろいじくっています。 Excel2000VBAで、ディレクトリの指定をできるダイアログ画面はないのでしょうか? ユーザーにディレクトリを入力してもらいたいのですが、方法としては、1)直接手で打ってもらうか、2)ダイアログで指定できるようにするかにしたいのですが、あいにく Application.Dialogs(xlDialogOpen).Show Application.GetOpenFilename で「ファイルを開く」でディレクトリを割り出す方法しか分かりませんでした。 できれば、ディレクトリ指定のダイアログ画面をだしたいのですけど、他に方法があれば教えてください。よろしくお願いします。

  • コモンダイアログの表示座標

    フルスクリーンモードで、WinAPIの「GetOpenFileName」や 「GetSaveFileName」などのコモンダイアログを使用する際、 稀にダイアログが表示されない時がありました。 おそらくフルスクリーンモードで表示されている領域よりも外側に 表示されていると思うので、ダイアログを表示する座標を指定したいのですが、 その方法が分からず困っております。 ご存知の方いらっしゃいましたらお教えください、 宜しくお願い致します。

専門家に質問してみよう