VC基于文档视图打开/保存对话框的重载

有时候我们需要指定单文档/多文档的“打开”或“保存”对话框的文件类型来过滤不需要的类型。我们可以重载它们,具体它们的消息默认响应可以看这里MFC浅析(1) 文档视图结构中,缺省的命令处理 。

这是“打开”菜单的重载:

void  CMainFrame::OnFileOpen() 

    CFileDialog dlg( true , NULL, NULL, OFN_OVERWRITEPROMPT,  "All Files(*.*)|*.*|C/C++ Files(*.c;*.cpp;*.h;*.hpp)|*.c;*.cpp;*.h;*.hpp|C# Files(*.cs)|*.cs|Java Files(*.java)|*.java||" , NULL); 
     if  (dlg.DoModal() == IDOK) 
    { 
        CString m_szFileName = dlg.GetPathName();         
        CString type = dlg.GetFileExt(); //得到文件扩展名 
         if  (type.CompareNoCase(_T( "exe" )) || type.CompareNoCase(_T( "chm" )) || type.CompareNoCase(_T( "pdf" ))|| type.CompareNoCase(_T( "doc" )) || type.CompareNoCase(_T( "jpg" ))) 
        { 
            MessageBox(_T( "您打开了不支持的文件类型!"),_T(" 提示信息"),MB_ICONERROR|MB_OK); 
             return
        } 
        AfxGetApp()->OpenDocumentFile(m_szFileName); //一定要有这句话 
    } 
}

这是“保存”菜单的重载:

BOOL CCoolFormat2Doc::DoSave(LPCTSTR lpszPathName, BOOL bReplace) 

     if ( lpszPathName == NULL )  
    { 
        TCHAR szPath[MAX_PATH]; 
        LPCTSTR pszFilter=_T( "All Files(*.*)|*.*|C/C++ Files(*.c;*.cpp;*.h;*.hpp)|*.c;*.cpp;*.h;*.hpp|C# Files(*.cs)|*.cs|Java Files(*.java)|*.java||" ); 
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXTENSIONDIFFERENT;     
        CFileDialog dlg(FALSE, NULL, _T( ".txt" ), dwFlags, pszFilter, NULL);         
         if ( dlg.DoModal() == IDOK ) 
        { 
            CString strTemp = dlg.GetPathName();             
             switch  (dlg.m_ofn.nFilterIndex) 
            { 
                 case   1 :     break
                 case   2 :    strTemp += _T( ".cpp" );  break
                 case   3 :    strTemp += _T( ".cs" );  break
                 case   4 :    strTemp += _T( ".java" );  break
                 defaultbreak
            }                                         
            lstrcpy(szPath, strTemp.GetBuffer( 0 )); 
            lpszPathName = szPath;                 
        } 
         else  
             return   FALSE; 
    } 
     return  CDocument::DoSave(lpszPathName, bReplace); 
}

具体的效果可以看CoolFormat 第二版。

你可能感兴趣的:(null,文档,mfc,exe,Path,chm)