選択したフォルダパスを取得する。
// 特定のフォルダを選択するコールバック
int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if( uMsg == BFFM_INITIALIZED ){
SendMessage( hwnd, BFFM_SETSELECTION, TRUE, lpData );
}
return 0;
}
void xxxxxx::GetSelectFolderPath(CString& SelectFolderPath)
{
BROWSEINFO bInfo;
LPITEMIDLIST pIDList;
TCHAR szDisplayName[MAX_PATH];
// BROWSEINFO構造体に値を設定
// ダイアログの親ウインドウのハンドル
bInfo.hwndOwner = AfxGetMainWnd()->m_hWnd;
// ルートフォルダを示すITEMIDLISTのポインタ (NULLの場合デスクトップフォルダが使われます)
bInfo.pidlRoot = NULL;
// 選択されたフォルダ名を受け取るバッファのポインタ
bInfo.pszDisplayName = szDisplayName;
// ツリービューの上部に表示される文字列
bInfo.lpszTitle = _T("フォルダの選択");
// 表示されるフォルダの種類を示すフラグ
bInfo.ulFlags = BIF_RETURNONLYFSDIRS;
// BrowseCallbackProc関数のポインタ
// デフォルトのフォルダパスを指定する場合、BrowseCallbackProc
bInfo.lpfn = NULL;
// コールバック関数に渡す値
// LPCTSTR文字列で、「デフォルトのフォルダパスを指定」
bInfo.lParam = (LPARAM)0;
// フォルダ選択ダイアログを表示
pIDList = ::SHBrowseForFolder(&bInfo);
if(pIDList == NULL){
// 戻り値がNULLの場合、フォルダが選択されずにダイアログが閉じられたことを意味します。
SelectFolderPath = "";
}else{
// ItemIDListをパス名に変換します
if(!::SHGetPathFromIDList(pIDList, szDisplayName)){
// エラー処理
}
// szDisplayNameに選択されたフォルダのパスが入っています
// 最後にpIDListのポイントしているメモリを開放します
SelectFolderPath = szDisplayName;
::CoTaskMemFree( pIDList );
}
}
// 特定のフォルダを選択するコールバック
int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if( uMsg == BFFM_INITIALIZED ){
SendMessage( hwnd, BFFM_SETSELECTION, TRUE, lpData );
}
return 0;
}
void xxxxxx::GetSelectFolderPath(CString& SelectFolderPath)
{
BROWSEINFO bInfo;
LPITEMIDLIST pIDList;
TCHAR szDisplayName[MAX_PATH];
// BROWSEINFO構造体に値を設定
// ダイアログの親ウインドウのハンドル
bInfo.hwndOwner = AfxGetMainWnd()->m_hWnd;
// ルートフォルダを示すITEMIDLISTのポインタ (NULLの場合デスクトップフォルダが使われます)
bInfo.pidlRoot = NULL;
// 選択されたフォルダ名を受け取るバッファのポインタ
bInfo.pszDisplayName = szDisplayName;
// ツリービューの上部に表示される文字列
bInfo.lpszTitle = _T("フォルダの選択");
// 表示されるフォルダの種類を示すフラグ
bInfo.ulFlags = BIF_RETURNONLYFSDIRS;
// BrowseCallbackProc関数のポインタ
// デフォルトのフォルダパスを指定する場合、BrowseCallbackProc
bInfo.lpfn = NULL;
// コールバック関数に渡す値
// LPCTSTR文字列で、「デフォルトのフォルダパスを指定」
bInfo.lParam = (LPARAM)0;
// フォルダ選択ダイアログを表示
pIDList = ::SHBrowseForFolder(&bInfo);
if(pIDList == NULL){
// 戻り値がNULLの場合、フォルダが選択されずにダイアログが閉じられたことを意味します。
SelectFolderPath = "";
}else{
// ItemIDListをパス名に変換します
if(!::SHGetPathFromIDList(pIDList, szDisplayName)){
// エラー処理
}
// szDisplayNameに選択されたフォルダのパスが入っています
// 最後にpIDListのポイントしているメモリを開放します
SelectFolderPath = szDisplayName;
::CoTaskMemFree( pIDList );
}
}
PR
この記事にコメントする