本人新手,最近用CFileDialog的时候,发现了一个问题
CFileDialog dlg(
        FALSE, "BMP", [/color]NULL,
        OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
        "image files (*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||", NULL
        );
第二个参数,应该是控制保存文件的默认类型。可是为什么我代码如上,保存的却是JPEG格式呢?然后,第二个实验
CFileDialog dlg(
        FALSE, NULL, NULL,
        OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
        "image files (*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||", NULL
        );
这样子,保存的文件是没有类型的。最后,第三个实验
CFileDialog dlg(
        FALSE, "", NULL,
        OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
        "image files (*.jpeg; *.jpg; *.bmp) |*.bmp; *.jpg; *.jpeg | All Files (*.*) |*.*||", NULL
        );
我把bmp类型放到最前面,而第二个参数,随便给他了一个非NULL的值,结果,默认格式就变成bmp格式了因此,想问下明白的大大,告诉我下这些参数的具体作用,和产生这个结果的原因?还是说第二个参数控制的,只是是否用默认类型,而和默认类型是什么无关?

解决方案 »

  1.   

    lpszDefExt
    The default filename extension. If the user does not include an extension in the Filename edit box, the extension specified by lpszDefExt is automatically appended to the filename. If this parameter is NULL, no file extension is appended.
    ==================
    lpszFilter
    A series of string pairs that specify filters you can apply to the file. If you specify file filters, only selected files will appear in the Files list box. See the Res section for more information on how to work with file filters.
    ====================
    修改这里看看:
    CFileDialog dlg(
      FALSE, "BMP", [/color]NULL,
      OFN_HIDEREADONLY,
      "image files (*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||", NULL
      );
      

  2.   

    CFileDialog dlg(
      FALSE, "BMP", NULL,
      OFN_HIDEREADONLY,  "image files (*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||", NULL
      );
      

  3.   

    CFileDialog::CFileDialogCFileDialog(BOOL bOpenFileDialog,
                LPCTSTR lpszDefExt = NULL,
                LPCTSTR lpszFileName = NULL,
                DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                LPCTSTR lpszFilter = NULL,
                CWnd* pParentWnd = NULL
               );参数: 
    bOpenFileDialg 如果为TRUE, 则创建文件打开对话框;如果为FALSE,则构造一个File Save As(另存为)对话框。  
    lpszDefExt 缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。如果为NULL,则不添加扩展名。  
    lpszFileName 初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。  
    dwFlags 一个或多个标志的组合,使你可定制对话框。要了解这些标志的描述,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。如果你改变m_ofn.Flags结构成员,在改变中用OR操作保持缺省行为完整。  
    lpszFilter 一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器,仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器。  
    pParentWnd 指向文件对话框对象的父窗口或拥有者窗口。 
      

  4.   

    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 为父窗口指针。 
      

  5.   


    OFN_FILEMUSTEXIST 指定用户仅可以在文件名登录字段中输入已存在的文件的名字。如果这个标记被指定的并且用户输入了一个无效的名字,对话框程序显示一个等待消息框。如果这个标记被指定,OFN_PATHMUSTEXIST标记也被使用。
    OFN_PATHMUSTEXIST 指定用户仅能输入的路径和文件名。如果这个标记被使用并且用户在文件名输入字段中键入了一个用效的路径和文件名,对话框函数显示一个等待消息。
    OFN_HIDEREADONLY 隐藏只读复选框。所以,感觉跟第四个参数里的3个标记应该无关。而且我也实验过了,注释掉头两个标记,结果还是和原来一样。这个问题,虽然不影响效果,但是,就是想弄明白为什么