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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    Oracle PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功)Oracle PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功)  本篇主要内容如下:2.1   PL/SQL块2.2   PL/SQL结构2.3   标识符2.4   PL/SQL 变量类型2.4.1  变量类型2.4.2  复合类型2.4.2.1 记录类型2.4.2.2 数组类型2.4.2.3 使用%TYPE

    2022年6月17日
    28
  • 浏览器对url长度限制_url过长怎么解决

    浏览器对url长度限制_url过长怎么解决HTTP1.0的格式request(HTTP请求消息)结构:一个请求行.部分消息头,以及实体内容,其中的一些消息内容都是可选择的.消息头和实体内容之间要用空行分开.GET/index.htmlHTTP/1.1//请求头,下面都是消息头.Accept:*/*Accept-Languang:en-usConnection:keep-aliveHost:localhostReferer:HTTP…

    2022年8月24日
    55
  • mysql中phpmyadmin安装教程_安装phpMyAdmin图文教程[通俗易懂]

    mysql中phpmyadmin安装教程_安装phpMyAdmin图文教程[通俗易懂]phpmyadmin的安装配置已经是老生常谈的话题了,网络上到处都可以找到相关的配置教程。但是,那些大多都是手动配置的,稍不留神,容易出错。因此站长今天在这里介绍的是,被很多phpmyadmin用户所忽略的phpmyadmin自带的安装程序,下面我们就开始一步一步来安装phpmyadmin。1、首先下载phpmyadmin3.4.11,这是目前最稳定无bug的版本,点击下载2、在你的web根目录新…

    2022年6月1日
    28
  • webpack的性能优化_webpack不是内部或外部命令

    webpack的性能优化_webpack不是内部或外部命令webpack版本过高,会出现很多问题,因此可以降低版本高度1.可以直接覆盖原版本,可以输入`cnpmiwebpack需要降低的版本-g比如我们要降低到’3.6.0’’cnpmiwebpack@3.6.0-g’2.卸载当前版本,在重新下载需要的版本卸载命令:’npmuninstallwebpack-g’如果是局部安装,也可以在文件夹中找到node-modules中webpack模块删除。安装命令:’npminstallwebpack@3.6.0-g’

    2022年8月10日
    4
  • Tess4j maven demo[通俗易懂]

    Tess4j maven demo[通俗易懂]tess4j实现文字识别Demo,下面为内容实现源码,内容仅为一个demo,demo下载地址:tess4jDemopublicclassTess4JTest{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(newLoggHelper().toString());staticfinaldo…

    2022年6月14日
    30
  • mysql中如何修改表的名字?修改表名?

    mysql中如何修改表的名字?修改表名?mysql>createtablets01liketi_o_sms;#创建表结构.这样的建表方式,不仅仅是表的结构,连带着索引也会同时创建.QueryOK,0rowsaffected(0.02sec)mysql>altertablets01renametots01_new;#修改表名的语法:altertablerenameto/asnew_tablename;QueryOK,0rowsaffected(0.00s.

    2022年5月31日
    60

发表回复

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

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