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 を別途インクルードすること。


VC覚書きページ...