• 文件打开对话框


      CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。

      1 要使用CFileDialog,先用CFileDialog构造函数构造一个对象,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则显示保存文件对话框
    • lpszFileName 指定默认的文件名。
    • dwFlags 指明一些特定风格。
    • lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
      "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
      文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
    • pParentWnd 为父窗口指针。

      2  当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。m_ofn结构是OPENFILENAME类型的

    typedef struct tagOFN {
    DWORD lStructSize;
    HWND hwndOwner;
    HINSTANCE hInstance;
    LPCTSTR lpstrFilter;
    LPTSTR lpstrCustomFilter;
    DWORD nMaxCustFilter;
    DWORD nFilterIndex;
    LPTSTR lpstrFile;
    DWORD nMaxFile;
    LPTSTR lpstrFileTitle;
    DWORD nMaxFileTitle;
    LPCTSTR lpstrInitialDir;
    LPCTSTR lpstrTitle;
    DWORD Flags;
    WORD nFileOffset;
    WORD nFileExtension;
    LPCTSTR lpstrDefExt;
    LPARAM lCustData;
    LPOFNHOOKPROC lpfnHook;
    LPCTSTR lpTemplateName;
    #if (_WIN32_WINNT >= 0x0500)
    void * pvReserved;
    DWORD dwReserved;
    DWORD FlagsEx;
    #endif // (_WIN32_WINNT >= 0x0500)
    } OPENFILENAME, *LPOPENFILENAME;

      具体信息请看百度百科http://baike.baidu.com/link?url=NIYFyOpTc_eTI8YwIHH6jjjSwUH3KEWo1x4GLQfQxrKML9IgLvv-aMxOnoQMCJ8VOh2V5iG7lsqqyTI_Gc6Ai_

      3 初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。

    CFileDialog   //构造一个CFileDialog对象操作
    DoModal       //显示对话框并使用户可以进行选择
    GetPathName   //返回选定文件的完整路径
    GetFileName    //返回选定文件的文件名
    GetFileExt     //返回选定文件的扩展文件名
    GetFileTitle   //返回选定文件的标题
    GetNextPathName  //返回下一个选定文件的完整路径
    GetReadOnlyPref   //返回选定文件的只读状态
    GetStartPosition   //返回文件名列表的第一个元素位置覆盖的函数
    假如选择的文件是C:WINDOWSTEST.EXE
    则:
    (1)GetPathName();取文件名全称,包括完整路径。取回C:WINDOWSTEST.EXE
    (2)GetFileName();取文件全名:TEST.EXE
    (3)GetFileTitle();取回TEST
    (4)GetFileExt();取扩展名EXE
    补充: 在控制台下使用这个类需要设置在静态库中使用MFC,然后构造 AfxSetResourceHandle(GetModuleHandle(NULL));
    4 析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog
    5 要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal之前进行此操作。另外,必须用m_ofn.lpstrFile指向的缓冲区字节数来设置m_ofn.nMaxFile

            实例代码如下,打开初始目录为C盘,选择其中的图片文件:

    BOOL COpenFileDlgDlg::OnInitDialog()
    {
    ....
    
        TCHAR fileter[] = _T("图像(*.bmp;*.tif;*.jpg;*.JEPG) | *.bmp; *.tif; *.jpg;*.JEPG | All Files(*.*) | *.* ||");
    
        //文件对话框
        CFileDialog fdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, fileter);
    
        //设置初始文件目录
        fdlg.m_ofn.lpstrInitialDir = _T("c:\");
    
        //弹出对话框,如果点击OK
        if(fdlg.DoModal() == IDOK)
        {
            //获取打开文件的文件名
            CString fileName = fdlg.GetPathName();
    
            CString tip("当前打开的文件名为:");
            tip += fileName;
       
            MessageBox(tip.GetString(),NULL, MB_OK);
        }
    ....
    }
  • 相关阅读:
    Spring中配置文件applicationContext.xml配置详解
    Web.xml配置详解
    linux基础命令学习(七)samba服务器配置
    linux基础命令学习(六)DHCP服务器配置
    linux基础命令学习五(软件包管理、下载管理)
    linux基础命令学习(四)计划任务
    linux上安装php
    linux上安装hadoop
    Redis(二)Jedis操作Redis
    Redis(一)简介及安装、测试
  • 原文地址:https://www.cnblogs.com/1314NNNKKK/p/3479240.html
Copyright © 2020-2023  润新知