关于VC弹出选择文件夹对话框

VC编程中经常需要弹出选择文件夹对话框供用户选择目标文件夹

基本实现的源码如下

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           = NULL; 
	bi.lParam         = 0;
	bi.iImage         = 0; 

	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	if (pidl == NULL)
	{
		return;
	}

	if (SHGetPathFromIDList(pidl, pszPath))
	{
		AfxMessageBox(pszPath);
	}
}

这一般均能够满足要求,但有时还是需要在此基础上增强一些功能。

比如在弹出选择文件夹对话框时选中默认的文件夹,或在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);
	}
}

附图片:


当然也可以设置选择文件对话框的其他样式,比如使其具有新增文件夹的功能,可如下实现

bi.ulFlags        =        BIF_USENEWUI        

附图:(改图来源于www.VCKBASE.com,本人电脑上安装的是VC6,不支持BIF_USENEWUI,请在VC2003+上尝试)


具体请参照MSDN


  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值