CFileManager::CFileManager():
m_OpenFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"音乐文件(*mid,*mp3,*adpcm)|*mid,*mp3,*adpcm|工程文件(*.LST)|*LST|所有文件(*.*)|*.*||"),
m_SaveFileDialog(FALSE,".LST","*.LST",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"工程文件(*.LST)|*.LST|所有文件(*.*)|*.*||") 
{
}CFileManager::~CFileManager()
{}
//得到文件名
BOOL CFileManager::GetOpenFileName(CString &FullFileName,CString& FileName,int Flag)
{

//char buff[200] ;
//memset(buff,0,200) ;
CString strFilter;
if(Flag == 1)
{
strFilter="音乐文件(*.mid)|*.mid|所有文件(*.*)|*.*||";
//strFilter="所有文件(*.*)|*.*";
}
else if(Flag ==2)
{
strFilter="工程文件(*.LST)|*.LST|所有文件(*.*)|*.*||";
}
m_OpenFileDialog.m_ofn.lpstrFilter  = strFilter ;

int iReturn = m_OpenFileDialog.DoModal() ;
if(iReturn != IDOK )
return FALSE ;
    FullFileName = m_OpenFileDialog.GetPathName() ;
FileName = m_OpenFileDialog.GetFileName() ; if( FileName.GetLength() == 0 )
return FALSE ;

else
return TRUE ;

}
请问我打开文件对话框的是时候,怎么不能起到过滤的作用?
大家有空帮我看看!

解决方案 »

  1.   

    后面是不是多了个| ?strFilter="音乐文件(*.mid)|*.mid|所有文件(*.*)|*.*|";
      

  2.   

    (*mid,*mp3,*adpcm)|*mid;*mp3;*adpcm|工程文件(*.LST)|*LST|所有文件(*.*)|*.*||use ;, not ,
      

  3.   

    static OPENFILENAME ofn={0};

    TCHAR szName[MAX_PATH];
    *szName = 0;

    // Fill in standard structure fields
    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = AfxGetMainWnd()->GetSafeHwnd();
    ofn.lpstrFilter       = "txt files\0*.txt\0All files\0*.*\0";
    ofn.lpstrCustomFilter = NULL;
    ofn.nFilterIndex      = 1;
    ofn.lpstrFile         = szName;
    ofn.nMaxFile          = MAX_PATH;
    ofn.lpstrTitle        = TEXT("Open File...\0");
    ofn.lpstrFileTitle    = NULL;
    ofn.lpstrDefExt       = TEXT("*\0");
    ofn.Flags             = OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST;


    // Create the standard file open dialog and return its result
    GetOpenFileName((LPOPENFILENAME)&ofn);
    AfxMessageBox(ofn.lpstrFile);
      

  4.   

    谢谢大家了!
    if(Flag == 1)
    {
    //strFilter="音乐文件(*.mid)|*.mid|所有文件(*.*)|*.*||";
    //strFilter="所有文件(*.*)|*.*";
                      m_OpenFileDialog.m_ofn.lpstrFilter="音乐文件(*.mid;*.mp3;*.adpcm)\0*.mid;*.mp3;*.adpcm\0所有的文件(*.*)\0*.*\0";
    }
    //这样写是正确的
    但我如果这样写就有问题了,不知道为什么的?
    CString str=""
    str="音乐文件(*.mid;*.mp3;*.adpcm)\0*.mid;*.mp3;*.adpcm\0所有的文件(*.*)\0*.*\0";
    m_OpenFileDialog.m_ofn.lpstrFilter=str;
      

  5.   

    但我如果这样写就有问题了,不知道为什么的?
    ---  不知道,没有试过,回家试一下,
    m_OpenFileDialog.m_ofn.lpstrFilter=(LPCTSTR)str;  这样呢
      

  6.   

    CString str=""
    str="音乐文件(*.mid;*.mp3;*.adpcm)\0*.mid;*.mp3;*.adpcm\0所有的文件(*.*)\0*.*\0";这样写最后str=="音乐文件(*.mid;*.mp3;*.adpcm)",因为它把\0当作字符串结束
      

  7.   

    m_OpenFileDialog.m_ofn.lpstrFilter="音乐文件(*.mid;*.mp3;*.adpcm)\0*.mid;*.mp3;*.adpcm\0所有的文件(*.*)\0*.*\0";
    等号后面就是一个字符串了.
    这是msdn中的解释:
    lpstrFilter :
    Pointer to a buffer containing pairs of null-terminated filter strings. The last string in the buffer must be terminated by two NULL characters. 
    The first string in each pair is a display string that describes the filter (for example, "Text Files"), and the second string specifies the filter pattern (for example, "*.TXT"). To specify multiple filter patterns for a single display string, use a semicolon to separate the patterns (for example, "*.TXT;*.DOC;*.BAK"). A pattern string can be a combination of valid file name characters and the asterisk (*) wildcard character. Do not include spaces in the pattern string. The system does not change the order of the filters. It displays them in the File Types combo box in the order specified in lpstrFilter. If lpstrFilter is NULL, the dialog box does not display any filters.