zoukankan      html  css  js  c++  java
  • 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则显示保存对话文件对话框。
    lpszDefExt 指定默认的文件扩展名。
    lpszFileName 指定默认的文件名。
    dwFlags 指明一些特定风格。
    lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
    "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
    pParentWnd 为父窗口指针。
    创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
    CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt
    CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
    CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
    CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1
    POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
    CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。


    如何进行文件操作

    取得文件名
    {
    CString
    FilePathName;
    CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框
    if(dlg.DoModal()==IDOK)
    FilePathName=dlg.GetPathName();
    }
    相关信息:CFileDialog 用于取文件名的几个成员函数:
    假如选择的文件是C:\WINDOWS\TEST.EXE
    则:
    (1)GetPathName();取文件名全称,包括完整路径。取回C:\WINDOWS\TEST.EXE
    (2)GetFileTitle();取文件全名:TEST.EXE
    (3)GetFileName();取回TEST
    (4)GetFileExt();取扩展名EXE

    打开文件
    CFile file("C:\HELLO.TXT",CFile::modeRead);///只读方式打开
    ///CFile::modeRead可改为 CFile::modeWrite(只写),CFile::modeReadWrite(读写),CFile::modeCreate(新建)
    例子:
    {
    CFile file;
    file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);
    ...
    ...
    }

    移动文件指针
    file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
    file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
    file.Seek(-30,CFile::current);///从当前位置往上移动30字节
    file.SeekToBegin();///移到文件头
    file.SeekToEnd();///移到文件尾

    读写文件
    读文件:
    char buffer[1000];
    file.Read(buffer,1000);
    写文件:
    CString string("这个世界只有偏执狂才能成功");
    file.Write(string,8);

    关闭文件
    file.Close();

    VC++ CFileDialog 读取多个文件
    CFileDialog dlg(TRUE,
        "DEM Files (*DEM)",
        NULL,
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,
        _T("Layer Files (*.DEM;*.TIFF;*.BMP;*.JPG)|*.DEM;*.TIFF;*.BMP;*.JPG;)||"),
        NULL);
    dlg.m_ofn.lpstrTitle="请加载相关图层";
    //最多可以打开100个文件
    dlg.m_ofn.nMaxFile = 100 * MAX_PATH;
    dlg.m_ofn.lpstrFile = new TCHAR[dlg.m_ofn.nMaxFile];
    ZeroMemory(dlg.m_ofn.lpstrFile, sizeof(TCHAR) * dlg.m_ofn.nMaxFile);

    //显示文件对话框,获得文件名集合
    int retval = dlg.DoModal();
    if(retval==IDCANCEL)
    return false;
    POSITION pos_file;
    pos_file = dlg.GetStartPosition();
    CArray ary_filename;
        while(pos_file != NULL)
    ary_filename.Add(dlg.GetNextPathName(pos_file));

    //根据扩展名读取相关文件
    for(int i=0; i<ary_filename.GetSize(); i++)
    {
    CString str_ext;
    str_ext = ary_filename.GetAt(i).Right(3);
    if((str_ext == "DEM")||(str_ext == "dem"))
    {
    }
    else if((str_ext == "TIFF")||(str_ext == "tiff"))
    {
    }
    else if((str_ext == "BMP")||(str_ext == "bmp"))
    {
    }
    else if((str_ext == "JPG")||(str_ext == "jpg"))
    {
    }
    else if((str_ext == "SHP")||(str_ext == "shp"))
    {
    }
    }
    return true

    转自 :http://blog.sina.com.cn/s/blog_51e82bab0100bjnq.html

  • 相关阅读:
    特效优化
    Jsp
    JRebel 热部署
    mysql
    行为树
    Medium | LeetCode 139. 单词拆分 | 动态规划
    Medium | LeetCode 31. 下一个排列
    Easy | LeetCode 27. 移除元素 | 快慢指针
    Medium | LeetCode 437. 路径总和 III | 树 + 回溯 + 前缀和
    Medium | LeetCode 337. 打家劫舍 III | 树后序遍历 + 动态规划
  • 原文地址:https://www.cnblogs.com/huipengkankan/p/2178555.html
Copyright © 2011-2022 走看看