大家看一下下面这个特别的例子,在两种情况下有不同的结果,
LPCTSTR str = "Init data file(*.sql)|*.sql|All File (*.*)|*.*||";
CFileDialog  m_fileDlg(TRUE,".sql",NULL,OFN_HIDEREADONLY|OFN_HIDEREADONLY,str);
// 这样的话,结果正确,如果我改成这样
// CFileDialog m_fileDlg(TRUE);
// m_fileDlg.m_ofn.lpstrFilter = "Init data file(*.sql)|*.sql|All File
// (.*)|*.*||";
// 这样就不正确了,结果在生成的对话框中选择条件没有成为数组,而是一行写到
// 头
m_fileDlg.m_ofn.lpstrTitle = _T("选择数据库文件");
m_fileDlg.DoModal ();请遇到过类似问题的朋友们给点建议。谢谢

解决方案 »

  1.   

    m_fileDlg.m_ofn.lpstrFilter = "Init data file(*.sql)|*.sql|All File时CFileDialog的成员m_strFilter是空的
      

  2.   


    LPCTSTR str[] = "Init data file(*.sql)|*.sql|All File (*.*)|*.*||";
      

  3.   

    就像这样不行吗?
    char str[] = "Init data file(*.sql)|*.sql|All File (*.*)|*.*||";
    CFileDialog dlg;
    dlg.m_ofn.lpstrFilter=(LPCTSTR)str;
      

  4.   

    直接用
    m_fileDlg.m_ofn.lpstrFilter = "Init data file(*.sql)\0*.sql\0All File (*.*)\0*.*"
      

  5.   

    我现在不明白的是,我在上面定义的LPCTSTR str="Init data file(*.sql)|*.sql|...",但在生成的FileDlg中的文件过滤中还是原样.连"|"也一样显示.
      

  6.   

    cfiledialog是对common dialog的封装,在api这层要求的是类似"xxx\0yyy\0zzz\0\0"这样的字符串,在cfiledialog的构造函数里传"|"分隔的串是可以的,因为cfiledialog会帮你把所有"|"转换成"\0",但你自己直接设定filter成员变量的话,你就必须直接用\0分隔的字符串.