现在的位置: 首页 > 综合 > 正文

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

2013年12月07日 ⁄ 综合 ⁄ 共 1997字 ⁄ 字号 评论关闭

有时候我们需要指定单文档/多文档的“打开”或“保存”对话框的文件类型来过滤不需要的类型。我们可以重载它们,具体它们的消息默认响应可以看这里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

                default
break

            }                                         
            lstrcpy(szPath, strTemp.GetBuffer(0
)); 
            lpszPathName = szPath;                 
        } 
        else
 
            return
 
FALSE; 
    } 
    return
 CDocument::DoSave(lpszPathName, bReplace); 
}

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

抱歉!评论已关闭.