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

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

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

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

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

在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出来,以图形化的方式供用户选择文件路径,而...
  • lanuage
  • lanuage
  • 2015年12月22日 20:12
  • 2134

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

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

常用对话框:文件对话框

文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出...

文件对话框

1,Swing提供了JFileChoose类,特可以显示一个文件对话框。 2,JFileChoose类并不是JDialog类的子类。需要调用showOpenDialog,而不是调用setVisibel...

windows api打开文件对话框

用windows api 写打开文件对话框 1.主要使用OPENFILENAME ,GetOpenFileName, GetSaveFileName; OPENFILENAME 结构体介绍...
  • whatday
  • whatday
  • 2014年04月09日 18:07
  • 6155

MD5加密算法原理及实现

未知原博客位置,在此感谢作者。 MD5加密算法原理及实现 MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要。 以下所描述...

python多重继承C3算法

python多重继承的MRO算法选择: 经典方式、Python2.2 新式算法、Python2.3 新式算法(C3)。Python 3中只保留了最后一种,即C3算法 C3算法的解析: 1.多继承U...
  • fmblzf
  • fmblzf
  • 2016年09月12日 11:36
  • 1163

Android创建对话框的三种方式

  • 2015年03月17日 10:59
  • 951KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows下,文件(夹)选择/打开对话框的三种创建方式
举报原因:
原因补充:

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