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 第二版。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值