フォルダ選択ダイアログを表示する フォルダ選択ダイアログを表示するには、SHbrowseForFolder()関数を使います。
以下の関数はRootフォルダを指定することができます。
RootをNULLにすれば、MyComputerがルートになります。
AnsiString TForm1::SelectFolder(HWND Owner, AnsiString Root)
{
AnsiString s;
IMalloc *m;
if(SUCCEEDED(SHGetMalloc(&m)))
{
brOWSEINFO b;
LPITEMIdlIST pidl = NULL;
char path[MAX_PATH];
b.hwndOwner = Owner;
if(Root != "")pidl=GetPIdl(Root);
b.pidlRoot = pidl;
b.pszDisplayName = path;
b.lpszTitle = "フォルダを選択してください";
b.ulFlags = 0;
b.lpfn = NULL;
b.lParam=0;
b.iImage=0;
LPITEMIdlIST id=SHbrowseForFolder(&b);
if(id)
{
SHGetPathFromIdlist(id,path);
s=path;
m->Free(id);
}
m->Release();
}
return s;
}
LPITEMIdlIST TForm1::GetPIdl(AnsiString Dir)
{
LPSHELLFOLDER pshf = NULL;
LPITEMIdlIST pidl = NULL;
if(SUCCEEDED(SHGetDesktopFolder(&pshf)))
{
wchar_t lpszDisplayName[MAX_PATH];
StringToWideChar(Dir, lpszDisplayName, MAX_PATH);
if(!SUCCEEDED(pshf->ParseDisplayName(NULL, NULL, lpszDisplayName, NULL, &pidl, NULL)))
pidl=NULL;
pshf->Release();
}
return pidl;
}
目次に戻る
| Copyright(c) 2008 WoodenSoldier Software |
|