Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

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

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