zoukankan      html  css  js  c++  java
  • 文件打开对话框

      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);
        }
    ....
    }
  • 相关阅读:
    C. Shaass and Lights 解析(思維、組合)
    D. Binary String To Subsequences(队列)(贪心)
    CodeForces 1384B2. Koa and the Beach (Hard Version)(贪心)
    CodeForces 1384B1. Koa and the Beach (Easy Version)(搜索)
    CodeForces 1384C. String Transformation 1(贪心)(并查集)
    CodeForces 1384A. Common Prefixes
    POJ-2516 Minimum Cost(最小费用最大流)
    POJ3261-Milk Patterns(后缀数组)
    HDU-1300 Pearls(斜率DP)
    HDU-4528 小明系列故事-捉迷藏(BFS)
  • 原文地址:https://www.cnblogs.com/1314NNNKKK/p/3479240.html
Copyright © 2011-2022 走看看