C++打开选择文件夹对话框选择目录的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++打开选择⽂件夹对话框选择⽬录的操作需要添加头⽂件:
#ifdef WIN32
#include <shlobj.h>
#endif
调⽤⽂件对话框选择⽬录:
// 选择⽬录
void CustomInstalWndViewCtrl::OnSigBtnSelectInstallDir()
{
BROWSEINFO bi;
bi.hwndOwner = NULL;
bi.pidlRoot = CSIDL_DESKTOP;//⽂件夹的根⽬录,此处为桌⾯
bi.pszDisplayName = NULL;
bi.lpszTitle = NULL;//显⽰位于对话框左上部的提⽰信息
bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建⽂件夹按钮
bi.lpfn = NULL;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//调⽤选择对话框
if (pidl == NULL)
{
std::cout << "没有选择⽬录" << std::endl;
return;
}
TCHAR strFolder[MAX_PATH];
SHGetPathFromIDList(pidl, strFolder);
std::string sFolder = StringUtil::WStringToString(strFolder);
}
补充:c++ MFC选择⽂件夹
void openDir(){
//选择⽂件夹
string _Path,root;
TCHAR szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;//这个是输出缓冲区
bi.lpszTitle = _T("⽂件夹:"); //标题
bi.ulFlags = BIF_NEWDIALOGSTYLE;//使⽤新的界⾯,在win7中效果较好//BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);//弹出对话框
if (pidl == NULL)//点了取消,或者选择了⽆效的⽂件夹则返回NULL
return;
if (SHGetPathFromIDList(pidl, szDir)) {
int length = WideCharToMultiByte(CP_ACP, 0, szDir, -1, NULL, 0, NULL, NULL);
char ch[] = "";
WideCharToMultiByte(CP_ACP, 0, szDir, -1, ch, length, NULL, NULL);
root = string(ch);
}
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
如有错误或未考虑完全的地⽅,望不吝赐教。