没想到使用CFileDialog封装的CFileDialog类获得文件路径(一)

前言:没想到2022年还有很多工业软件公司还在使用MFC,微软一直在更新MFC库。这次我用MFC封装的CFileDialog类写了一个方法来获取选中的文件路径、名称和扩展名。程序。

个人技术博客(文章整理+源码):

最终结果:

1.CFileDialog的使用

CFileDialog是MFC的FileDialog for windows api的简单封装,增加了一些接口,其构造函数只有一个:

explicit CFileDialog(
BOOL bOpenFileDialog,

图片[1]-没想到使用CFileDialog封装的CFileDialog类获得文件路径(一)-唐朝资源网

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

第一个参数bOpenFileDialog为TRUE打开文件对话框,FALSE保存文件对话框。也是我们必须填写的,其他都有默认值。

第二个参数 lpszFileName 指定默认文件扩展名。是txt,exe之类的。

第三个参数 lpszFileName 指定默认文件名。一般用于保存文件盒。

第四个参数dwFlags指定了一些具体的样式,比如多选对话框、可读文件、不显示的隐藏文件等。

图片[2]-没想到使用CFileDialog封装的CFileDialog类获得文件路径(一)-唐朝资源网

第五个参数lpszFilter表示过滤器。在法国写博客很乱,但是微软官方给出了一种可读性很强的写法。

static TCHAR BASED_CODE szFilter[] = _T(“图表文件(*.xlc)|*.xlc|”)

_T(“工作表文件(*.xls)|*.xls|数据文件(*.xlc;*.xls)|”)

_T(“*.xlc;*.xls|所有文件(*.*)|*.*||”);

第六个参数pParentWnd指定父窗口的指针。

第七个参数dwSize是指OPENFILENAME结构的大小,取决于操作系统版本。 MFC 使用此参数来确定要创建的适当类型的对话框。默认大小 0 意味着 MFC 代码将根据程序运行的操作系统版本确定要使用的正确对话框大小。

第八个参数bVistaStyle默认为true。其实是因为微软在vs2008之后设计了新的对话框样式。所以使用bool类型来表示新旧样式。 (微软不考虑使用宏或枚举,以防将来发布第 3 样式版本..)

2.DoModal() 函数

和QT中的show函数一样,虽然CFileDialog dlg在内存中创建了一个对话框对象,但它需要一个特殊的函数DoModal()来显示给人们看。

“调用此函数显示Windows常用文件对话框,允许用户浏览文件和目录并输入文件名。”名字。

3.DoModal() 函数返回 IDOK 和 IDCANCEL

在窗口的生命周期结束后,domodal 还会返回一个值,告诉我们一些事情。但是这里MFC的设计很烦人,纯IDCANCEL只能告诉我们有问题。至于是什么问题,还是需要调用一个CommDlgExtendedError函数才能知道。 (至于为什么不设计返回结构,直接包含错误信息,估计1990年代MFC开发的时候,电脑性能不够?)

源代码:

    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("All FILE|*.*|"),NULL,NULL,1);
    if (dlg.DoModal() != IDOK)
    {
        CommDlgExtendedError();

图片[3]-没想到使用CFileDialog封装的CFileDialog类获得文件路径(一)-唐朝资源网

}
else { CString filePathName = dlg.GetPathName(); CString fileName = dlg.GetFileName(); // return only filename CString fileExt = dlg.GetFileExt(); // return only ext CString fileTitle = dlg.GetFileTitle(); // return file title }

效果:

© 版权声明
THE END
喜欢就支持一下吧
点赞217赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容