首页 > 技术 > 系统 > Windows > Windows下,文件(夹)选择/打开对话框的三种创建方式

Windows下,文件(夹)选择/打开对话框的三种创建方式

2017-01-11 浏览()

Windows编程时,常用到打开文件(夹)对话框,选择文件或者多个文件的功能。Windows提供了好几种方式,现在做个总结,也好方便以后的使用。
常用的方式有三种:

1.1 使用OPENFILENAME这个结构体和GetOpenFileName()函数

这种方式在于能够可以实现单选文件或者多选文件的功能。多选时,只需按照字符串的拼接格式进行split即可。

打开单文件的代码:

    char szFilePath[1024] = {0};   // 所选择的文件最终的路径
    OPENFILENAME ofn= {0};   
    ofn.lStructSize = sizeof(ofn);   
    ofn.hwndOwner = m_hWnd;   
    ofn.lpstrFilter = "txt文件(*.txt)\0";//要选择的文件后缀   
    ofn.lpstrInitialDir = "./";//默认的文件路径   
    ofn.lpstrFile = szFilePath;//存放文件的缓冲区   
    ofn.nMaxFile = sizeof(szFilePath)/sizeof(*szFilePath);   
    ofn.nFilterIndex = 0;   
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER ; //标志如果是多选要加上OFN_ALLOWMULTISELECT 
    if (!GetOpenFileName(&ofn))
    {
        return ;
    }
    if (strcmp(szFilePath, "") == 0)
    {
        // 检验是否获取成功
        return ;
    }

效果图:
效果图

1.2 使用SHBrowseForFolder调用

此种功能,是产生文件浏览的特效。可以选择文件或者文件夹。

选择文件代码示例:

    char szFilePath[1024] = {0};   // 所选择的文件最终的路径
    BROWSEINFO bi;   
    ZeroMemory(&bi,sizeof(BROWSEINFO));   
    bi.hwndOwner = NULL;   
    bi.pszDisplayName = szFilePath;   
    bi.lpszTitle = ("从下面选择文件或文件夹:");   
    bi.ulFlags = BIF_BROWSEINCLUDEFILES;   
    LPITEMIDLIST idl = SHBrowseForFolder(&bi);   
    if (NULL == idl)   
    {   
        return;   
    }   
    SHGetPathFromIDList(idl,szFilePath);  
    if (strcmp(szFilePath, "") == 0)
    {
        // 检验是否获取成功
        return ;
    }

效果图:
效果图2

1.3 使用系统的CFileDialog

CFileDialog是系统提供的打开和保存文件对话框类。可以弹出打开文件对话框,也可以弹出保存文件对话框。功能相比比较丰富。

在介绍如何使用之前,着重介绍其构造函数的定义。这是关键。

1.3.1 构造函数 CFileDialog()

CFileDialog::CFileDialog( 
        BOOL bOpenFileDialog, 
        LPCTSTR lpszDefExt = NULL, 
        LPCTSTR lpszFileName = NULL, 
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        LPCTSTR lpszFilter = NULL, 
        CWnd* pParentWnd = NULL );

参数意义如下:
- bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
- lpszDefExt 指定默认的文件扩展名。
- lpszFileName 指定默认的文件名。
- dwFlags 指明一些特定风格。
- lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。

参数格式如:
"Worksheet Files (*.xls)|*.xls;*.xlsx|text Files (*.txt)|*.txt|All Files (*.*)|*.*||";
文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
- pParentWnd 指明父窗口

该函数未指明选择文件对话框的默认选择路径,一般情况是当前路径。

1.3.2 选择打开文件对话框的使用

一般情况下,通过构造函数构造一个CFileDialog类对象,通过doModel函数来弹出相应的对话框,用户在对话框中选中文件,点击确定,即可获取到该文件的路径。保存文件对话框类似。

打开文件对话框示例代码:

    char szFilePath[1024] = {'\0'};
    CString filter("文本文档(*.txt)|*.txt|All Files (*.*)|*.*||");  
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);  
    if(dlg.DoModal()==IDOK)  
    {  
        strcpy(szFilePath, dlg.GetPathName().GetBuffer(0)) ;
    }  
    else
    {
        return ;
    }

    if (strcmp(szFilePath, "") == 0)
    {
        return ;
    }

效果图:
效果图3

相关推荐

感谢关注 Ithao123Windows频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

关键词:

文章点评:


精选专题

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责

Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。