Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1612981
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类: C/C++

2012-01-27 01:57:37

C基于文档视图打开/保存对话框的重载
分类: 2.1 VC++/MFC 325人阅读 评论(1) 收藏 举报

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

阅读(452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~