初期フォルダを指定するにはコールバック関数が必要と、めんどくさいよ。
// 初期フォルダ指定コールバック関数 TCHAR BrowseCallbackProc_buff[1024]=_T("c:\\"); int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData) { if(uMsg==BFFM_INITIALIZED){ // フォルダ指定 SendMessage(hwnd,BFFM_SETSELECTION,(WPARAM)TRUE,(LPARAM)BrowseCallbackProc_buff); } return 0; }
ダイアログ表示
// TODO: ここにコントロール通知ハンドラー コードを追加します。 CString wsResult = L""; BROWSEINFO bi; LPITEMIDLIST pidlRoot; // ブラウズのルートPIDL LPITEMIDLIST pidlBrowse; // ユーザーが選択したPIDL TCHAR lpBuffer[MAX_PATH]; // ダイアログ表示時のルートフォルダのPIDLを取得 SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidlRoot); // BROWSEINFO構造体の初期値設定 // ※BROWSEINFO構造体の各メンバの詳細説明もヘルプを参照 bi.hwndOwner = NULL; bi.pidlRoot = pidlRoot; bi.pszDisplayName = (TCHAR*)lpBuffer; bi.lpszTitle = _T("フォルダを選択して下さい"); bi.ulFlags = 0; bi.lpfn = BrowseCallbackProc; bi.lParam = 0; // フォルダ選択ダイアログの表示 pidlBrowse = SHBrowseForFolder(&bi); if (pidlBrowse != NULL) { // PIDL形式の戻り値のファイルシステムのパスに変換 wchar_t wcBuffer[MAX_PATH]; if (SHGetPathFromIDListW(pidlBrowse, wcBuffer)) { // 取得成功 wsResult = wcBuffer; // SetDlgItemTextW(this->m_hWnd,IDC_EDIT_FONTPATH,wcBuffer); // テキストボックスに入力 }else{ MessageBox(_T("フォルダの指定に失敗しました。"),_T("エラー"),MB_OK); } }