关于VC弹出选择文件夹对话框
Posted daggex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于VC弹出选择文件夹对话框相关的知识,希望对你有一定的参考价值。
VC编程中经常需要弹出选择文件夹对话框供用户选择目标文件夹
基本实现的源码如下:
1 void CTestDlg::OnBtnTest() 2 { 3 // TODO: Add your control notification handler code here 4 TCHAR pszPath[MAX_PATH]; 5 BROWSEINFO bi; 6 bi.hwndOwner = this->GetSafeHwnd(); 7 bi.pidlRoot = NULL; 8 bi.pszDisplayName = NULL; 9 bi.lpszTitle = TEXT("请选择文件夹"); 10 bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; 11 bi.lpfn = NULL; 12 bi.lParam = 0; 13 bi.iImage = 0; 14 15 LPITEMIDLIST pidl = SHBrowseForFolder(&bi); 16 if (pidl == NULL) 17 { 18 return; 19 } 20 21 if (SHGetPathFromIDList(pidl, pszPath)) 22 { 23 AfxMessageBox(pszPath); 24 } 25 }
这一般均能够满足要求,但有时还是需要在此基础上增强一些功能。
比如在弹出选择文件夹对话框时选中默认的文件夹,或在STATUSTEXT区域显示一些信息等等。这需要在BrowseCallbackProc回调函数中实现。具体实现的源码如下:
(具体BrowseCallBackFun回调函数的用法请参照MSDN)
//选择文件夹对话框回调函数 int CALLBACK BrowseCallBackFun(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { switch(uMsg) { case BFFM_INITIALIZED: //选择文件夹对话框初始化 //设置默认路径为lpData即‘D:‘ ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); //在STATUSTEXT区域显示当前路径 ::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, lpData); //设置选择文件夹对话框的标题 ::SetWindowText(hwnd, TEXT("请先设置个工作目录")); break; case BFFM_SELCHANGED: //选择文件夹变更时 { TCHAR pszPath[MAX_PATH]; //获取当前选择路径 SHGetPathFromIDList((LPCITEMIDLIST)lParam, pszPath); //在STATUSTEXT区域显示当前路径 ::SendMessage(hwnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)pszPath); } break; } return 0; } void CTestDlg::OnBtnTest() { // TODO: Add your control notification handler code here TCHAR pszPath[MAX_PATH]; BROWSEINFO bi; bi.hwndOwner = this->GetSafeHwnd(); bi.pidlRoot = NULL; bi.pszDisplayName = NULL; bi.lpszTitle = TEXT("请选择文件夹"); bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; bi.lpfn = BrowseCallBackFun; //回调函数 bi.lParam = (LPARAM)TEXT("D:\"); //传给回调函数的参数,设置默认路径 bi.iImage = 0; LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if (pidl == NULL) { return; } if (SHGetPathFromIDList(pidl, pszPath)) { AfxMessageBox(pszPath); } }
以上是关于关于VC弹出选择文件夹对话框的主要内容,如果未能解决你的问题,请参考以下文章
windows10家庭版,下载一个VC++,打开安装包的时弹出了一个对话框,说“文件名、目录名或卷语法不确
VC++ MFC关于全局勾子的执行次数问题,高手帮助!成功调用以后,按下F9会弹出两次对话框,求解?只要执行一