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

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


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!

关键词:

精选专题

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

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为海量的数据提供了计算。

产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计

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