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