您的位置:首页 > 其它

调用系统对话框,选择指定文件夹路径

2017-05-17 13:29 363 查看
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)

{
switch (uMsg)
{
case BFFM_INITIALIZED:
{
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData);
}
break;
default:
break;
}
return 0;

}

BOOL CEliteTubeCut::SetAndGetSavePath(CString& foldPath)

{
TCHAR szBuffer[MAX_PATH] = { 0 };
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
CComPtr<IDispatch> swDis;
iSwApp->Frame(&swDis);
CComPtr<IFrame> swFrame;
swDis->QueryInterface(__uuidof(IFrame), (void**)&swFrame);
if (NULL == swFrame)
{
return FALSE;
}
long long hw = 0;
swFrame->GetHWndx64(&hw);

bi.hwndOwner = (HWND)hw;
bi.pszDisplayName = szBuffer;
bi.lpszTitle = _T("选择存储路径文件位置:");
bi.ulFlags = 0x0040 | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS | BIF_USENEWUI /*包含一个编辑框 用户可以手动填写路径 对话框可以调整大小之类的..;*/
| BIF_UAHINT /*带TIPS提示*/ /*| BIF_NONEWFOLDERBUTTON 不带新建文件夹按钮*/;
bi.lpfn = BrowseCallbackProc;
TCHAR sDesktopDir[_MAX_PATH]; // 当前电脑桌面路径
SHGetSpecialFolderPath(NULL, sDesktopDir, CSIDL_DESKTOP, 0);

CString strDefaultPath(sDesktopDir);
bi.lParam = (LPARAM)(LPCTSTR)(strDefaultPath);
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if (NULL == idl)
{
return FALSE;
}
SHGetPathFromIDList(idl, szBuffer);
return TRUE;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: