SHBrowseForFolder可以用来得到一个用户选择的目录。
可是有时候会有需要去指定一个初始目录,比如希望上次用户选择的目录可以保存下来。这该如何去做?
在BROWSEINFO结构体中提供了一个成员,这是一个指向函数的指针,通过这个回调函数,可以处理初始化的时候需要做的一些事情。
具体写法如下:
static TCHAR g_szLastSelDir[MAX_PATH] ;
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT msg, LPARAM lp, LPARAM pData)
{
if (msg == BFFM_INITIALIZED )
{
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)g_szLastSelDir);
}
return 0;
}
BOOL BrowseDirectory(HWND hwnd, LPSTR lpszDir, DWORD dwLen)
{
lstrcpyn(g_szLastSelDir, lpszDir, sizeof(g_szLastSelDir)) ;
BROWSEINFO bi;
bi.hwndOwner=hwnd;
bi.pidlRoot=0;
bi.pszDisplayName=0;
bi.lpszTitle="Browse Directory";
bi.lpfn=BrowseCallbackProc;
bi.lParam=0;
bi.ulFlags= BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pidl ;
if (pidl = SHBrowseForFolder(&bi))
{
SHGetPathFromIDList(pidl, lpszDir);
_tcscpy(g_szLastSelDir, lpszDir);
return TRUE ;
}
return FALSE ;
}