需要添加头文件:
#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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。如有错误或未考虑完全的地方,望不吝赐教。
- 本文固定链接: https://zxbcw.cn/post/204009/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)