初期フォルダを指定するにはコールバック関数が必要と、めんどくさいよ。
// 初期フォルダ指定コールバック関数
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);
}
}