Folder 選択ダイアログの表示 (Win95/NT40)
LPMALLOC pMalloc;
// IMallocインターフェイスへのポインタを取得します。
if( ::SHGetMalloc( &pMalloc ) != NOERROR )
return ;
char pszPath[_MAX_PATH];
LPITEMIDLIST pidlRoot, pidlBrowse;
::SHGetSpecialFolderLocation(this->GetSafeHwnd(), CSIDL_DRIVES, &pidlRoot);
BROWSEINFO bi;
::ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = pidlRoot; // NULL の時マイコンピュータから表示
bi.pszDisplayName = pszPath;
bi.lpszTitle = "フォルダを選択してください";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
//bi.lParam
//bi.iImage
pidlBrowse = ::SHBrowseForFolder(&bi);
::SHGetPathFromIDList(pidlBrowse, pszPath);
if( pidlRoot != NULL )
pMalloc->Free( pidlRoot );
if( pidlBrowse != NULL )
pMalloc->Free( pidlBrowse );
pMalloc->Release();
で、pszPath に選択したフォルダのパスが入っている。
Win95、NT4.0以上で使える。(NT3.5とかは、CFileDialog をカスタマイズするらしい。)
stdafx.h 内の #define VC_EXTRALEAN をコメントにするか、shlobj.h を別途インクルードすること。