【MFC】选择文件夹时,记忆上一次路径

参考

https://www.cnblogs.com/Hisin/archive/2012/02/27/2370614.html
https://www.cnblogs.com/ranjiewen/p/5697219.html

代码

CString s_save_path;//存放选择的目录
CMutex g_mtx;

//选择文件夹对话框回调函数  
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 OnSelectPath(){
	g_mtx.Lock();
	char szPath[MAX_PATH];     //存放选择的目录路径 
	//CString str;
	char* tmp = s_save_path.GetBuffer();//获取上一次路径,CString->char*
	ZeroMemory(szPath, sizeof(szPath));

	BROWSEINFO bi;
	bi.hwndOwner = this->GetSafeHwnd();
	bi.pidlRoot = NULL;
	bi.pszDisplayName = szPath;
	bi.lpszTitle = "请选择需要打包的目录:";
	bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_STATUSTEXT;
	bi.lpfn = BrowseCallBackFun;//回调函数
	bi.lParam = (LPARAM)TEXT(tmp);//上一次路径
	bi.iImage = 0;
	//弹出选择目录对话框
	LPITEMIDLIST lp = SHBrowseForFolder(&bi);

	if (lp && SHGetPathFromIDList(lp, szPath))
	{
		//str.Format("选择的目录为 %s", szPath);
		s_save_path.Format("%s", szPath);//获得新路径
		//AfxMessageBox(str);
	}
	else
		AfxMessageBox("无效的目录,请重新选择");
	g_mtx.Unlock();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值