c++学习 | MFC —— u盘小偷的界面制作

问题描述:

实现选择保存路径的按钮功能,选择指定的文件夹并设置到编辑框中


实现代码:

.h文件中


public:
	afx_msg void OnBnClickedBtnBrowsePath(); //连接按钮点击事件
	BOOL GetCurrDirectory(LPTSTR lpBuffer, DWORD nBufferLength);  //声明函数。返回操作系统的当前目录.
	

.cpp文件中

BOOL C***Dlg::GetCurrDirectory(LPTSTR lpBuffer, DWORD nBufferLength)
//定义函数。返回操作系统的当前目录(指定一个预定义字串用于装载当前目录,缓冲区的长度)
{
	if (!lpBuffer || nBufferLength <= 0) return FALSE;
	//如果没有文件路径或路径长度小于0,则返回。为检验步骤。

	TCHAR szPath[MAX_PATH] = { 0 };
	
	DWORD dwRet = GetModuleFileName(NULL, szPath, MAX_PATH);
	/*
	需要获得程序当前的运行目录,这时就可以使用GetModuleFileNam
	DWORD WINAPI GetModuleFileName (
	HMODULE hodule, 		//要获取文件名的模块句柄, Null表示当前摸块
	LPTSTR lpFileName,		//参数用于存放地址的指针
	DWOED nSize				//lpFiieName参数的长度
	) ;
	
	返回值
	如果返回为成功,将在1pFileNane的缓冲区当中返回相应模块的路径,如果所设的nSize过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。
	如果函数失败,返回值将为0,利用GetLastError可获得异常代码。
	*/
	
	if (dwRet <= 0) return FALSE;
	
	DWORD dwPathLen = _tcslen(szPath);
	//获得当前路径的长度,存储在dwPathLen中。_tcslen是通用版
	
	for (DWORD dwIdx = dwPathLen - 1; dwIdx >= 0; --dwIdx)
	//从后向前遍历文件目录字符串,发现第一个\就去掉,换成结束符\0.
	{
		if (szPath[dwIdx] != '\\') continue;
		szPath[dwIdx] = '\0';
		break;
	}

	dwPathLen = _tcslen(szPath);//获取 处理过后的文件夹路径的 长度
	
	DWORD dwCopyLen = (nBufferLength - 1 <= dwPathLen) ? nBufferLength : dwPathLen;
	//判断一下nBufferLength(函数输入的缓存长度)与dwPathLen(最新的路径长度)。如果所设的缓存长度小,则用dwPathLen作为缓存长度dwCopyLen【作用:保证字符串长度能够完整存放路径】
	
	_tcsncpy_s(lpBuffer, nBufferLength, szPath, dwCopyLen);
	//把dwCopyLen作为结果传输到函数外

	return TRUE;
}





void C***Dlg::OnBnClickedBtnBrowsePath() //按钮点击事件
{
	// TODO: 在此添加控件通知处理程序代码

	TCHAR szCurrPath[MAX_PATH] = { 0 };//设置字符串数组,存储当前文件夹路径
	
	GetCurrDirectory(szCurrPath, MAX_PATH);//调用函数。返回操作系统的当前目录到szCurrPath
	
	CFolderPickerDialog dlg(szCurrPath);

	/*CFolderPickerDialog类封装了Windows常用的目录选择对话框,"文件夹拾取对话框"
	头文件:afxdlgs.h
	
	构造函数
	explicit CFolderPickerDialog (
	LPCTSTR lpszFolder =NULL,		//初始目录
	DWORD dwFlags = 0,				//个性化窗具标志位
	CVnd* pParent Wnd = NULL,		//父窗口句柄
	DWORD dwSize = 0				//OPENFILENAE结构的大小
	) :
	*/

	if (dlg.DoModal())
	{
		CString strFolderPath = dlg.GetPathName();
		TCHAR szDstDisk[MAX_PATH] = { 0 };
		_stprintf_s(szDstDisk, MAX_PATH, _T("%s\\%s\\"), strFolderPath, _T("xxxx"));//在路径后加上\\xxx\\,创建一个专用保存文件夹
		SetDlgItemText(IDC_EDIT_SAVE_PATH, szDstDisk); //设置编辑框内的文字。把处理过的路径,送到编辑框中显示出来(编辑框id,内容)
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值