网上找了很多设置默认文件夹得方法,但是大多不尽如人意,最后找到了如下代码(自已也改了一些),发现比较合适,给大家分享下。
int CALLBACK BrowserCallbackProc
(//回调函数
HWND hWnd,
UINT uMsg,
LPARAM lParam,
LPARAM lpData
)
{
switch(uMsg)
{
case BFFM_INITIALIZED: //设置默认选择的文件夹
::SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);
break;
default:
break;
}
return 0;
}
//strTitle 为对话框标题 strDir为默认路径调用结束后strDir为选择的路径
bool SelDirectory(HWND hWnd,LPCTSTR strTitle,CString& strDir)
{
BROWSEINFO bi;
char szDisplayName[MAX_PATH] = {0};
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = strTitle;
bi.ulFlags = BFFM_SETSELECTION;
bi.lpfn = BrowserCallbackProc;
bi.lParam = (LPARAM)(LPCTSTR)strDir;
bi.iImage = NULL;
// 显示目录选择对话框,如果按了取消,那么piid为NULL
ITEMIDLIST* piid = ::SHBrowseForFolder(&bi);
if(piid==NULL)
{
return false;
}
// 得到选择的目录
BOOL bValidPath = ::SHGetPathFromIDList(piid,szDisplayName);
if (!bValidPath)
{
return false;
}
LPMALLOC lpMalloc;
VERIFY(NOERROR==::SHGetMalloc(&lpMalloc));
lpMalloc->Free(piid);
lpMalloc->Release();
if('/0'==szDisplayName[0])
{
return false; //用户选择的可能的虚拟文件系统
}
strDir = szDisplayName;
strDir.TrimRight("//");
return true;
}
调用代码:
CString path;
path="D://实用软件//VC6MSDN";
SelDirectory (GetSafeHwnd(),"设置了默认文件夹哦",path);