★シェル関数『SHBrowseForFolder』を使う
・下にサンプルを載せます。
●実装例
static int CALLBACK FuncCallBackProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData )
{
if ( uMsg == BFFM_INITIALIZED ){
if ( HIWORD(lpData) ){
SendMessage( hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)lpData );
}
}
UNREFERENCED_PARAMETER( lParam );
return( 0 );
}
extern BOOL FuncSelectFolder( HWND hWnd, LPTSTR lpGetPath, LPCTSTR lpDefPath, LPCTSTR lpTitle )
{
ITEMIDLIST *lpIDlist;
LPMALLOC lpMalloc;
BROWSEINFO bi;
if ( SUCCEEDED(SHGetMalloc(&lpMalloc)) ){
if ( HIWORD(lpDefPath) ){
bi.pidlRoot = NULL;
}
else{
bi.pidlRoot = (LPCITEMIDLIST)lpDefPath;
}
bi.hwndOwner = hWnd;
bi.pszDisplayName = NULL;
bi.lpszTitle = lpTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = FuncCallBackProc;
bi.lParam = (LPARAM)lpDefPath;
bi.iImage = 0;
if ( (lpIDlist = SHBrowseForFolder(&bi)) != NULL ){
SHGetPathFromIDList( lpIDlist, lpGetPath );
lpMalloc->Free( lpIDlist );
lpMalloc->Release();
return( TRUE );
}
lpMalloc->Release();
}
lstrcpy( lpGetPath, "" );
return( FALSE );
}
最後に:
・『FuncSelectFolder( hWnd, szBuff, (LPCTSTR)(INT64)CSIDL_FAVORITES, TEXT("お気に入り") );』
とすると『お気に入り』フォルダの選択画面になるよ。
・『hWnd』にウインドウ・ハンドルを指定
・『lpGetPath』に選択フォルダ名を取得
・『lpDefPath』に初期フォルダ名を指定
・『lpTitle』にタイトル文字列を指定
・戻り値は選択されれば TRUE、キャンセルならば FALSE を返す。
・以上。おわり。
お礼
ありがとうございました!サンプルも参考になりました。