none
如何获取CFileDialog的用户选择的文件过滤器 RRS feed

  • 问题

  •  

         假如在一个另存为对话框中有多个文件过滤器,如何获取用户选择的文件过滤器呢?

      比如我现在有这样一个“另存为”的CFileDialog,代码大致如下:

    CFileDialog  dlg(false,  "bmp",  NULL,  OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,  "BMP FILE(*.bmp)|*.bmp|JPG FIlE(*.jpg)|*.jpg||");

    if(IDOK=dlg.Domodal())
    {
      // 在这里假如用户在下拉列表选择了BMP FILE(*.bmp).,就获取BMP FILE(*.bmp),假如用户选择了JPG FIlE(*.jpg)|*,
    // 就获取JPG FIlE(*.jpg)|*,

    }

      我使用dlg的GetOFN函数获取OPENFILENAME结构体的信息,但是里面的成员变量LPCTSTR lpstrFilter保存的只是“BMP FILE(*.bmp)”.如何获取JPG FIlE(*.jpg)呢?

            一个笨办法是,使用
    switch(dlg.m_ofn.nFilterIndex) 
      { 
      case  1: 
        // BMP FILE(*.bmp)
      case  2: 
        // JPG FIlE(*.jpg)

      根据dlg.m_ofn.nFilterIndex的值对"BMP FILE(*.bmp)|*.bmp|JPG FIlE(*.jpg)|*.jpg||"进行分割获取。

    不知有没有更好的办法?

          我的编译环境是:VS 2005+sp1.
    2008年11月13日 1:25

答案

  • 在选择完文件之后, 必须会返回一个文件名, 你只要判断一下这个文件名的后缀名是BMP还是JPG不就行了吗?
    2008年11月13日 6:02
    版主

全部回复

  • 在选择完文件之后, 必须会返回一个文件名, 你只要判断一下这个文件名的后缀名是BMP还是JPG不就行了吗?
    2008年11月13日 6:02
    版主
  •  虚拟闲人 写:
    在选择完文件之后, 必须会返回一个文件名, 你只要判断一下这个文件名的后缀名是BMP还是JPG不就行了吗?

     

             大侠,是“另存为”对话框,并非打开对话框。

    2008年11月20日 2:49