CFileDialog类示例

CFileDialog类示例一 示例代码在 MicrosoftVis 中编译通过 运行正常 CFileDialog 类 BOOLisOpen TRUE nbsp nbsp nbsp nbsp 是否打开 TRUE 为打开对话框 FALSE 为保存对话框 nbsp nbsp CStringdefau T C Users TF Documents nbsp 默认打开的文件路径 nbsp nbsp CStri

一、示例代码在Microsoft Visual Studio 2013中编译通过,运行正常。

//CFileDialog类

BOOL isOpen = TRUE;        //是否打开(TRUE为打开对话框,FALSE为保存对话框)    

CString defaultDir = _T(“C:\\Users\\TF\\Documents”);   //默认打开的文件路径    
CString defaultFile = L”test1.txt”;         //默认打开的文件名    
CString filter = L”文本(*.txt)|*.txt|所有类型(*.*)|*.*||”;   //文件过虑的类型    
CFileDialog openFileDlg(isOpen, NULL, defaultDir + “\\” + defaultFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL);
INT_PTR result = openFileDlg.DoModal();//是否选中文件,或取消了选择
if (result == IDOK)
{
CString pathName, fileName,titleName,extName;
pathName = openFileDlg.GetPathName();//得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt
fileName = openFileDlg.GetFileName();//得到完整的文件名,包括扩展名如:test1.txt
titleName=openFileDlg.GetFileTitle();//得到完整的文件名,不包括目录名和扩展名如:test1
extName = openFileDlg.GetFileExt();// 得到完整的文件扩展名,如:txt
MessageBox(pathName + “\r” + fileName + “\r” + titleName + “\r” + extName);//通过显示,注意几者区别

}

二、MSDN上查到的构造函数

explicit CFileDialog(

    BOOL bOpenFileDialog,    //显示的窗口,文件打开对话框或文件另存为对话框
    LPCTSTR lpszDefExt = NULL,    //默认的文件扩展名,会自动追加到文件名后。
    LPCTSTR lpszFileName = NULL,    //显示在文件名编辑栏的初始文件名。  
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,    //用来自定义对话框的标志组合(后详)  
    LPCTSTR lpszFilter = NULL,    //文件筛选(结构见后述)  
    CWnd* pParentWnd = NULL,    //父窗口指针(通常都NULL) 
    DWORD dwSize = 0,    //The size of the OPENFILENAME structure.(找时间查查OPENFILENAME structure)  
    BOOL bVistaStyle = TRUE);    //显示Vista样式,为TRUE时使用new Vista file dialogs,为FALSE时将使用旧样式dialogs.

示例代码中:

给第1、3、5个参数进行了赋值。而第2、4、6个参数使用了构造函数中的缺省值。没有用到后两个参数(第7、8个)。

三、关于lpszFiler参数

用来筛选在文件列表中显示的文件的类型。

1、参数由“文件类型说明”和“扩展名”组成,之间用“|”来分隔。例如示例中的

    “文本(*.txt)|*.txt”。其中“文本(*.txt)”是文件类型说明,*.txt是扩展名,中间用|分隔。

2、同种类型文件的扩展名间用“;”列出。例如,”数据文件()|*.dat;*.log;*.txt”。

3、各种文件类型间也用“|”来分隔。例如示例中的”文本(*.txt)|*.txt|所有类型(*.*)|*.*||”里的第二个“|”。

4、参数结束由两个“||”来表示。

多说一句,好吧,这个lpszFilter参数里面,有三种含义的“|”符号,感觉设计者够懒的,体会一下就懂了。

四、关于dwFlags参数

1、来自于“OPENFILENAME”结构中的成员“DWORD Flags;”(可在MSDN中查询OPENFILENAME structure)

2、MSDN原文:

Flags

Type: DWORD

A set of bit flags you can use to initialize the dialog box. When the dialog box returns, it sets these flags to indicate the user’s input. This member can be a combination of the following flags.

3、MSDN上还有各个flags的Value和Meaning的表格。简化版如下:

#define OFN_READONLY                        0x00000001
#define OFN_OVERWRITEPROMPT          0x00000002
#define OFN_HIDEREADONLY                0x00000004
#define OFN_NOCHANGEDIR                 0x00000008
#define OFN_SHOWHELP                      0x00000010
#define OFN_ENABLEHOOK                   0x00000020
#define OFN_ENABLETEMPLATE           0x00000040
#define OFN_ENABLETEMPLATEHANDLE     0x00000080
#define OFN_NOVALIDATE                     0x00000100
#define OFN_ALLOWMULTISELECT         0x00000200
#define OFN_EXTENSIONDIFFERENT       0x00000400
#define OFN_PATHMUSTEXIST              0x00000800
#define OFN_FILEMUSTEXIST                0x00001000
#define OFN_CREATEPROMPT               0x00002000
#define OFN_SHAREAWARE                  0x00004000
#define OFN_NOREADONLYRETURN        0x00008000
#define OFN_NOTESTFILECREATE                   0x00010000
#define OFN_NONETWORKBUTTON        0x00020000
#define OFN_NOLONGNAMES                        0x00040000    


















五、关于多文件选择。(未深入,用到记得要注意)

六、关于路径。有文章指出,使用CFileDialog后,会把程序的当前路径设置成选中文件的路径。

2、https://www.cnblogs.com/kex1n/p/3595800.html《CFileDialog使用总结》文中倒数第3行。

好吧,编写代码测试一下。

在代码合适位置添加:

//显示未调用CFileDialog时的当前目录

TCHAR Buffer[MAX_PATH];//用于保存目录的字符数组
        CString currentDir
GetCurrentDirectory(MAX_PATH, Buffer);
currentDir=Buffer;
MessageBox(currentDir);



//显示调用CFileDialog后的当前目录
GetCurrentDirectory(MAX_PATH, Buffer);
currentDir = Buffer;
MessageBox(currentDir);



结果与网上的这些文章指出的情况不同!两次的显示的当前目录是一致的,没有因为调用CFileDialog发生改变。

最终代码:

//CFileDialog类
//显示未调用CFileDialog时的当前目录
TCHAR Buffer[MAX_PATH];//用于保存目录的字符数组
CString currentDir;
GetCurrentDirectory(MAX_PATH, Buffer);
currentDir=Buffer;
MessageBox(currentDir);
BOOL isOpen = TRUE;        //是否打开(TRUE为打开对话框,FALSE为保存对话框)    
CString defaultDir = _T(“C:\\Users\\TF\\Documents”);   //默认打开的文件路径    
CString defaultFile = L”test1.txt”;         //默认打开的文件名    
CString filter = L”文本(*.txt)|*.txt|所有类型(*.*)|*.*||”;   //文件过虑的类型    
CFileDialog openFileDlg(isOpen, NULL, defaultDir + “\\” + defaultFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter, NULL);
INT_PTR result = openFileDlg.DoModal();//是否选中文件,或取消了选择
if (result == IDOK)
{

CString pathName, fileName,titleName,extName;
pathName = openFileDlg.GetPathName();//得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt
fileName = openFileDlg.GetFileName();//得到完整的文件名,包括扩展名如:test1.txt
titleName=openFileDlg.GetFileTitle();//得到完整的文件名,不包括目录名和扩展名如:test1
extName = openFileDlg.GetFileExt();// 得到完整的文件扩展名,如:txt
MessageBox(pathName + “\r” + fileName + “\r” + titleName + “\r” + extName);//通过显示,注意几者区别
//显示调用CFileDialog时的当前目录
GetCurrentDirectory(MAX_PATH, Buffer);
currentDir = Buffer;
MessageBox(currentDir);
}















































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213814.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:35
下一篇 2026年3月18日 下午5:35


相关推荐

  • 【问题解决】pycharm自动调整代码格式快捷键Alt+Ctrl+L无效

    【问题解决】pycharm自动调整代码格式快捷键Alt+Ctrl+L无效原因 其他软件占用了全局快捷键 Ctrl Alt L 常见的有 网易云音乐 网易云有道词典 解决方法 关闭这些软件 或者将这些软件的全局快捷键重新设置

    2026年3月17日
    2
  • 【面试真经】2020年7月 Linux运维面试题(含答案版)

    【面试真经】2020年7月 Linux运维面试题(含答案版)一.在当前文件目录下,有文件file1查询file1里面空行的所在行号查询file2以abc结尾的行打印出file1文件第一行到第3行二.如何将本地80端口的请求转发到8080端口,当前的主机IP为192.168.2.1三.crontab如何设置在11月份的每天早上6点到12点中,每隔2个小时执行/usr/bin/httpd.sh怎么实现四.编写个shell脚本将/usr/local/test目录下大于100K的文件转移到/tmp目录下五.简述raid0ra

    2022年6月10日
    35
  • 事业单位图形推理1000题及答案_小学生图形推理题

    事业单位图形推理1000题及答案_小学生图形推理题  2020年事业单位联考:《职测》判断推理神预测!   经过几个月的紧张备考,广大考生终于在今天走上了“战场”。经过小时的奋笔疾书,2020年下半年事业单位联考职业能力测试于今天上午拉下帷幕。根据学员的惊喜反馈,我们发现华图教育又双叒叕预测中题目了!!!   通过考生们对题目的回忆,华图教育惊喜地发现有4个考点跟我们考前给学员预测的大致相同!下面我们就一起来简单看一下:   一…

    2025年8月27日
    9
  • resnet网络结构示意图_resnet50网络结构详解

    resnet网络结构示意图_resnet50网络结构详解代码importtorchfromtorchimportnnimporttorchvisiondevice=torch.device(“cuda”iftorch.cuda.is_available()else”cpu”)resnet=torchvision.models.resnet101(pretrained=True)#pretrainedImageNetResNet-101print(resnet)输出:ResNet((conv1):Con

    2022年10月7日
    5
  • L2-021 点赞狂魔(排序)「建议收藏」

    L2-021 点赞狂魔(排序)「建议收藏」原题链接微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。输入格式:输入在第一行给出一个正整数N(≤100),是待统计的用户数。随后N行,每行列出一位用户的点赞标签。格式为“Name K F​1​

    2022年8月8日
    5
  • 网络分析工具——WireShark的使用(超详细)[通俗易懂]

    网络分析工具——WireShark的使用(超详细)[通俗易懂]网络分析工具——WireShark的使用简介WireShark软件安装Wireshark开始抓包示例WireShark抓包界面WireShark主要分为这几个界面TCP包的具体内容Wireshark过滤器设置wireshark过滤器表达式的规则Wireshark抓包分析TCP三次握手Wireshark分析常用操作简介WireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程中各种问题定位。本文主要内容包括:1、Wireshark软件下载和安装以

    2022年6月21日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号