打怪升级之CFileDialog类介绍

CFileDialog类

CFileDialog封装用于文件打开操作或文件保存操作的常见对话框。信息来源自Windows官方文档:https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cfiledialog-class?view=msvc-170

这里重点介绍几个常用的函数功能:

构造函数

explicit CFileDialog(
    BOOL bOpenFileDialog,
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL,
    DWORD dwSize = 0,
    BOOL bVistaStyle = TRUE);

参数:

1.bOpenFileDialog
[in] 参数,指定要创建的对话框类型。 将其设置为 TRUE 可构造“文件 > 打开”对话框。 将其设置为 FALSE 可构造“文件 > 另存为”对话框。

2.lpszDefExt
[in] 默认的文件扩展名。 如果用户不包含已知扩展名 (在文件名框中) 用户计算机上具有关联的扩展, 则 lpszDefExt 指定的扩展名会自动追加到文件名中。 如果此参数为 NULL,则不会追加任何扩展名。

3.lpszFileName
[in] “文件名”框中显示的初始文件名。 如果为 NULL,则不会显示初始文件名。

4.dwFlags
[in] 一个或多个标志的组合,可用于自定义对话框。 有关这些标志的说明,请参阅 Windows SDK 中的 OPENFILENAME 结构。 如果修改 m_ofn.Flags 结构成员,请在更改中使用按位或运算符以保持默认行为不变。

5.lpszFilter
[in] 一系列字符串对,用于指定可应用于文件的筛选器。 如果指定文件筛选器,则只有与筛选条件匹配的文件才会显示在“文件”列表中。 请参阅“注解”部分,详细了解如何使用文件筛选器。

6.pParentWnd
[in] 一个指针,指向文件对话框的父窗口或所有者窗口。

7.dwSize
[in] OPENFILENAME 结构的大小。 此值取决于操作系统版本。 MFC 使用了此参数来确定要创建的相应对话框类型。 默认大小为 0 表示 MFC 代码将根据运行程序的操作系统版本确定要使用的正确的对话框大小。

8.bVistaStyle
[in] 注意 此参数在 Visual Studio 2008 及更高版本中可用,因此,仅当你在 Windows Vista 或更高版本中运行时,才使用新样式对话框。

指定文件对话框样式的参数。 将其设置为 TRUE 可使用新 Vista 样式文件对话框。 否则将使用旧样式的对话框。 请参阅“注解”部分,详细了解如何在 Vista 下运行。

显示函数

virtual INT_PTR DoModal();

返回值:

IDOK 或 IDCANCEL。 如果返回 IDCANCEL,请调用 Windows CommDlgExtendedError 函数以确定是否发生了错误。

IDOK 和 IDCANCEL 是常量,指示用户选择了“确定”按钮还是“取消”按钮。

返回的INT_PTR是常量,要么是IDOK,要么是IDCANCEL。如果有选中文件,那么就是IDOK,没有选中文件无法定义IDOK。

获取路径名、文件名等信息

if (result == IDOK)//如果有选中文件,那么result就是IDOK
{
	CString pathName, fileName, titleName, extName;
	pathName = openDlg.GetPathName();//得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt
	fileName = openDlg.GetFileName();//得到完整的文件名,包括扩展名如:test1.txt
	titleName = openDlg.GetFileTitle();//得到完整的文件名,不包括目录名和扩展名如:test1
	extName = openDlg.GetFileExt();// 得到完整的文件扩展名,如:txt
	MessageBox(pathName + "\r" + fileName + "\r" + titleName + "\r" + extName);//通过显示,注意几者区别
}

如此便成功将选择文件夹信息提取称为了CString。

实战案例

void CMFCCSVSENDDlg::OnBnClickedOpen()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog openDlg(
		TRUE,
		_T("CLS File(*.csv)|*.csv"),
		NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		_T("CLS File(*.csv)|*.csv||"),
		this
	);
	INT_PTR result = openDlg.DoModal();//以模态方式创建打开文件对话框
	if (result == IDOK)//如果有选中文件,那么result就是IDOK
	{
		CString pathName, fileName, titleName, extName;
		pathName = openDlg.GetPathName();//得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt
		fileName = openDlg.GetFileName();//得到完整的文件名,包括扩展名如:test1.txt
		titleName = openDlg.GetFileTitle();//得到完整的文件名,不包括目录名和扩展名如:test1
		extName = openDlg.GetFileExt();// 得到完整的文件扩展名,如:txt
		MessageBox(pathName + "\r" + fileName + "\r" + titleName + "\r" + extName);//通过显示,注意几者区别
	}
}

效果:

在这里插入图片描述

注意:

1.很多时候我们只需要路径和文件名就可以了,所以没有必要非得在串口类里加CFileDialog类。

2.所谓保存,其实也不是CFileDialog存的,这个类确定了一个位置和文件后,需要你手动添加代码实现才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考琪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值