CFileDialog类应用详解

CFileDialog类应用详解原文地址 http blog csdn net bxwang1 article details 构造函数原型 CFileDialog BOOLbOpenFil nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp LPCTSTRlpszD NULL nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp LPCTSTRlpszF NULL nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp D

原文地址:http://blog.csdn.net/bxwang1/article/details/

构造函数原型
CFileDialog(BOOL bOpenFileDialog,
            LPCTSTR lpszDefExt = NULL,
            LPCTSTR lpszFileName = NULL,
            DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            LPCTSTR lpszFilter = NULL,
            CWnd* pParentWnd = NULL
           );
参数: 
bOpenFileDialg
  如果为TRUE, 则创建文件打开对话框;如果为FALSE,则构造一个File Save As(另存为)对话框。 
lpszDefExt  缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。如果为NULL,则不添加扩展名。 
lpszFileName  初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。 
dwFlags  一个或多个标志的组合,使你可定制对话框。要了解这些标志的描述,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。如果你改变m_ofn.Flags结构成员,在改变中用OR操作保持缺省行为完整。 
lpszFilter  一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器,仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器。参数格式如:
“Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||”;文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

pParentWnd  指向文件对话框对象的父窗口或拥有者窗口。 
要使用CFileDialog,首先用构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的值来初始化对话框控件的值或状态。初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。
重要函数:

CString CFileDialog::GetPathName( ) 得到完整的文件名(包括目录名和扩展名)如c:/test/test1.txt 
CString CFileDialog::GetFileName( ) 得到完整的文件名(包括扩展名).如test1.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如txt 
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名,如test1 
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件的位置。 
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。



















打开大量文件:

示例:

以下是一个使用该类进行多文件名选择的例子。
#include “cderr.h”   
CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL);
CString fileName;
DWORD MAXFILE = 32*1024+13;  //可以适当大一些,但是不要太大,多了也是浪费!
/*虽然限制在32k字节以内,但是在运行时少于此值将会返回IDCANCEL及FNERR_BUFFERTOOSMALL错误。运行时我选择了800个文件只能读取564个文件路径和文件名列表,共计32781个字节*/
dlg.m_ofn.lpstrFile = fileName.GetBuffer(MAXFILE);
dlg.m_ofn.nMaxFile = MAXFILE;
fileName.ReleaseBuffer();
int iReturn = dlg.DoModal();
if(iReturn == IDOK)
{

int nCount = 0;
POSITION pos = dlg.GetStartPosition();
while (pos != NULL)
{

dlg.GetNextPathName(pos);
nCount++;
}
CString str;
str.Format(_T(“Successfully opened %d files “), nCount);
AfxMessageBox(str);
}
else if(iReturn == IDCANCEL)
     AfxMessageBox(_T(“Cancel”));
if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL)
     AfxMessageBox(_T(“BUFFERTOOSMALL”));

























/

CFileDialog



CObject
 └CCmdTarget
    └CWnd
       └CDialog
          └CCommonDialog
             └CFileDialog


CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。每种情况下,对话框都与标准MFC对话框一样工作。因为它们都是CCommonDialog类的派生类。
要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。m_ofn结构是OPENFILENAME类型的。要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。
初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。
当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。
CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。
可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。
析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog。
要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal之前进行此操作。另外,必须用m_ofn.lpstrFile指向的缓冲区字节数来设置m_ofn.nMaxFile。
CFileDialog依赖于Windows3.1及以后版本中的COMMDLG.DLL。
如果从CFileDialog中派生出一个新类,可用消息映射处理。要扩展消息处理,从CWnd中派生一个类,向新类中加入一个消息映射并为新消息提供成员函数,无须提供一个钩子函数来定制对话框。
要定制对话框,从CFileDialog中派生一个对象,提供一个定制对话模板,从扩展控件中加入一个消息映射,处理通知消息。任意未处理的消息将传递给基类。
无须定制钩子函数。
要了解有关使用CFileDialog的信息,可参阅联机文档“Visual C++程序员指南”中的“常用对话类”。
#include <afxdlgs.h>

CFileDialog类的成员

数据成员

m_ofn Windows OPENFILENAME结构,提供对基本文件对话框参数的访问


构造函数

CFileDialog 构造一个CFileDialog对象操作
DoModal 显示对话框并使用户可以进行选择
GetPathName 返回选定文件的完整路径
GetFileName 返回选定文件的文件名
GetFileExt 返回选定文件的扩展文件名
GetFileTitle 返回选定文件的标题
GetNextPathName 返回下一个选定文件的完整路径
GetReadOnlyPref 返回选定文件的只读状态
GetStartPosition 返回文件名列表的第一个元素位置


可覆盖的函数

OnShareViolation 发生共享冲突时调用
OnFileNameOK 确认键入对话框中的文件名
OnLBSelChangedNotify 当列表框选择改变时调用
OnInitDone 处理WM_NOTIFY CDN_INITDONE消息
OnFileNameChange 处理WM_NOTIFY CDN_SELCHANGE消息
OnFolderChange 处理WM_NOTIFY CDN_FOLDERCHANGE消息
OnTypeChange 处理WM_NOTIFY CDN_TYPECHANGE消息






















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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信小程序+java后台[通俗易懂]

    微信小程序+java后台[通俗易懂]      博主是大四学生,毕业设计做的是微信小程序+java后台。陆陆续续经历了三个月(因为白天要实习又碰上过年玩了一阵子),从对微信小程序一无所知到完成毕设,碰到许多问题,在跟大家分享一下自己的经历和一个小程序怎么从零开始。希望像我一样的小程序初学者看了这篇文章,可以少花费一些不必要的时间,少踩一点坑。          开发一个微信小程序需要https域名以及服务器,博主购买的是阿里…

    2022年7月8日
    49
  • navicat for mysql永久激活码最新【2022最新】「建议收藏」

    (navicat for mysql永久激活码最新)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2KLKA7BQFO-eyJsaWNlb…

    2022年4月1日
    5.0K
  • Pycharm Pro 2021.12.13激活【2021.10最新】「建议收藏」

    (Pycharm Pro 2021.12.13激活)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~00…

    2022年3月30日
    51
  • QCustomPlot鼠标跟随显示坐标值

    QCustomPlot鼠标跟随显示坐标值tags:QCustomPlothover背景Qt最大的优势就是各种库非常全,尤其在图表方面,在5.7版本之后虽然引入了原本企业版才有的QCharts,但相对于只有2个文件就可以引入库的QCustomPlot来说还是太臃肿了。这里解决一个使用图表的都会碰到的问题–跟随鼠标显示值,在QCustomPlot里非常简单,它早就给出了解决方案-QCPItemTracer.可以直接看下面…

    2022年10月16日
    4
  • 差分数组(简单易懂)

    差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

    2022年5月20日
    49
  • 命令提示符(cmd)中的tracert命令使用

    命令提示符(cmd)中的tracert命令使用转载自:https://jingyan.baidu.com/article/9c69d48f4df25713c8024e66.html在命令行中输入“tracert”并在后面加入一个IP地址,可以查询从本机到该IP地址所在的电脑要经过的路由器及其IP地址。下图中后面的IP地址为同一个路由器下的局域网中的另一个电脑的IP地址。从左到右的5条信息分别代表了“生存时间”(每途经一个路由器结点自增1)、“三次发送的ICMP包返回时间”(共计3个,单位为毫秒ms)和“途经路由器的IP地址”(如果有主机名,还会

    2025年6月2日
    3

发表回复

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

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