方式一:使用结构体
void FolderPicker()
{
TCHAR szBuffer[MAX_PATH] = { 0 };
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = NULL;
bi.pszDisplayName = szBuffer;
bi.lpszTitle = _T("从下面选文件夹目录:");
bi.ulFlags = BIF_RETURNFSANCESTORS;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM)TEXT("f:\\data\\if1001\\");
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if (NULL == idl)
{
return;
}
SHGetPathFromIDList(idl, szBuffer);
m_path = szBuffer;
}
//设置工作目录
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
break;
}
return 0;
}
方式二:使用CFolderPickerDialog封装类
void FolderPicker()
{
CFolderPickerDialog fd(NULL, 0, this, 0);
if (fd.DoModal()== IDOK)
{
CString des;
des = fd.GetFolderPath();
MessageBox(des);
}
}