zoukankan      html  css  js  c++  java
  • VC++使用CFileDialog类选中多个文件

    • 版本

    VS2012

    • 实例说明

    在使用CFileDialog类选中文件时如果没有指定OFN_ALLOWMULTISELECT取值,就只能选中一个文件,本实例列出选中的对个文件

    • 界面

    • 关键技术

    本实例主要使用CFileDialog类的构造函数、GetStartPosition和GetNextPathName函数实现。

    (1)CFileDialog构造函数

    基本格式如下:

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

    参数说明如表所示

    CFileDialog函数的参数说明

    参数 说明
    bOpenFileDialog
    设置为true,创建打开对话框:设置为false,创建保存对话框
    lpszDefExt
    指定文件默认扩展名
    lpszFileName
    初始化文件名
    dwFlags
    指定对话框的风格
    lpszFilter
    过滤器,指明可供选择的文件类型和相应的扩展名
    pParentWnd
    父窗口指针

    说明

    参数lpszFilter格式如下:

    "Chart Files(*.xlc)|*.xlc|Worksheet Files(*.xls)|*.xls|Data Files(*.xlc;*.xls|*xlc;*.xlc|All Files(*.*)|*.*||";

    文件类型说明和扩展名间用“|”分隔,同种类型文件的扩展名间可以用“;”分隔,每种文件类型间用“|”分隔,末尾用“||”指明。

    (2)GetStartPosition函数

    对于选择了多个文件的情况,该函数用于获取第一个文件的位置。基本格式如下:

    POSITION GetStartPosition() const;

    返回值:返回用于迭代的POSITION类型变量。如果列表为空,返回NULL。

    (3)GetNextPathName函数

    对于选择了多个文件的清空得到下一个文件位置,并返回当前文件名。在此之前需先调用GetStartPosition函数得到最初的POSITION变量。基本格式如下:

    CString GetNextPathName(POSITION&pos)const;

    参数说明:

    pos:由GetNextPathName或GetStartPosition函数返回的POSITION变量的引用。

    返回值:返回文件的全路径

    • 设计过程

    (1)新建一个基于对话框的应用程序。

    (2)向窗体中添加一个按钮控件,执行OnOpen函数。添加列表框控件,显示所选文件。

    (3)主要代码如下:

    void CDemoDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        CFileDialog log(TRUE, "文件", "*.*", OFN_HIDEREADONLY|
            OFN_ALLOWMULTISELECT, "FILE(*.*)|*.*||", NULL);
        if (log.DoModal() == IDOK)
        {
            POSITION pos = log.GetStartPosition();
            while (pos != NULL)
            {
                CString pathname = log.GetNextPathName(pos);//获取文件名
                m_files.AddString(pathname);//添加到列表框控件
            }
        }
        
    }

    批量删除指定类型的文件

    按照本实例方法,获取所选文件的路径,调用静态方法CFile::Remove循环删除指定的文件。

    • 演示

    Caesar卢尚宇

    2021年1月30日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:......

    如有问题, 可在底部(留言)咨询.

  • 相关阅读:
    kafka不停止服务的情况下修改日志保留时间
    shell模拟“多线程”
    通过keepalived搭建MySQL双主模式的高可用集群系统
    解决Redis/Codis Connection with master lost(复制超时)问题
    codis服务部署前的操作及初始化
    Redis.conf配置文件内容详解
    ModuleNotFoundError: No module named 'sqlite'
    Python2.7升级至Python3.6
    linux与unix时间戳互转
    python的数据存储
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14351067.html
Copyright © 2011-2022 走看看