需要添加头文件:
1
2
3
|
#ifdef WIN32 #include <shlobj.h> #endif |
调用文件对话框选择目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// 选择目录 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选择文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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://blog.csdn.net/llmys/article/details/87893661