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

原创 2017年01月03日 20:49:04

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

弹出文件选择对话框(支持多选)

不多说,贴出代码
  • wwkaven
  • wwkaven
  • 2014年07月03日 09:31
  • 2072

js点击某个图标或按钮弹出文件选择框

最近项目需求,不显示一个传统的文件选择,实现一个js点击某个图标或按钮,弹出文件选择框,选择完图片后,回显选择的图片。但是编写的过程中,出现不少问题,我总结一下。 废话不说了,上代码再说问题。 ...
  • u010509052
  • u010509052
  • 2015年09月24日 14:50
  • 12795

[Win32]打开文件/保存文件/选择文件夹对话框

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: 1。打开文件对话框:GetOpenFileName函数 函数原形:BOOL WINAPI...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年08月12日 17:31
  • 10650

MFC——文件打开和保存对话框(CFileDialog)

最近要做一个文件打开和保存的对话框,现将相关的代码记录如下,用以备忘! 所用控件: 2个静态标签(Static Text):用以显示功能标签; 2个文本框(Edit):用以显示打开的文件路径全名要保存...
  • luoweifu
  • luoweifu
  • 2014年04月28日 22:42
  • 57107

C++文件(夹)选择对话框

由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有。今遇到这个情况已经解决,特写下这篇博文。 1.打开文件对话框常用的方法是使用系统的CFileDialog。这里介绍另外...
  • xdrt81y
  • xdrt81y
  • 2013年11月06日 12:05
  • 22402

带新建文件夹功能的文件夹选择

BROWSEINFO bi;  char buffer[MAX_PATH];  ZeroMemory(buffer, MAX_PATH);  bi.hwndOwner = GetSafeHwnd...
  • diablof
  • diablof
  • 2012年11月30日 10:41
  • 200

vs2013 MFC打开文件或文件夹对话框(有图有真相)

vs2013环境要求比vc6.0严格些。以前的代码不能直接拿来用,做了些修改。有效果图。...
  • ruanjiayou123
  • ruanjiayou123
  • 2015年09月23日 16:58
  • 8746

VC打开浏览文件对话框、浏览文件夹对话框

今天,又看了这些东西,在VC里面创建浏览文件对话框比创建浏览文件夹对话框要简单一些。              一、创建“浏览文件对话框”        用CFileDialog类实现,比如:    ...
  • one_dollar
  • one_dollar
  • 2009年07月28日 19:22
  • 9582

C#选择文件和文件夹

C#选择文件      OpenFileDialog fileDialog = new OpenFileDialog();            fileDialog.InitialDirectory...
  • ytc666
  • ytc666
  • 2010年02月21日 10:10
  • 16682

windows API实现用户选择文件路径的对话框

在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出来,以图形化的方式供用户选择文件路径,而...
  • lanuage
  • lanuage
  • 2015年12月22日 20:12
  • 2472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows下,文件(夹)选择/打开对话框的三种创建方式
举报原因:
原因补充:

(最多只允许输入30个字)