友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第48章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                        END_CATCH_ALL 



                    THROW 宏相当于C++ 语言中的throw 指令;你以什么类型做为THROW 的参数,就 



                   会有一个相对应的AfxThrow_  函数被调用(这是台面下的行为): 



                    MFC Exception Type      MFC Throw Function              DOS support  Windows support 



                    CException                                              v            v 



                    CMemoryException        AfxThrowMemoryException         v            v 



                    CFileException          AfxThrowFileException           v            v 



                    CArchiveException       AfxThrowArchiveException        v            v 



                    CNotSupportedException  AfxThrowNotSupportedException   v            v 



                    CResourceException      AfxThrowResourceException                    v 



                    COleException           AfxThrowOleException                         v 



                    COleDispatchException   AfxThrowOleDispatchException                 v 



                    CDBException            AfxThrowDBException                          v 



                    CDaoException           AfxThrowDaoException                         v 



                    CUserException          AfxThrowUserException                        v 



                    以下是MFC 4。x  的exceptions 宏定义: 



                    // in AFX。H 

                    //////////////////////////////////////////////////////////////////////// 

                    // Exception macros using try; catch and throw 

                    //  (for backward patibility to previous versions of MFC) 



                    #ifndef _AFX_OLD_EXCEPTIONS 



                    #define TRY { AFX_EXCEPTION_LINK _afxExceptionLink; try { 



98 


…………………………………………………………Page 161……………………………………………………………

                                                       第2章  C++ 的重要性伲�



#define CATCH(class; e) } catch (class* e)  

        { ASSERT(e…》IsKindOf(RUNTIME_CLASS(class)));  

                _afxExceptionLink。m_pException = e; 



#define AND_CATCH(class; e) } catch (class* e)  

        { ASSERT(e…》IsKindOf(RUNTIME_CLASS(class)));  

                _afxExceptionLink。m_pException = e; 



#define END_CATCH } } 



#define THROW(e) throw e 

#define THROW_LAST() (AfxThrowLastCleanup(); throw) 



// Advanced macros for smaller code 

#define CATCH_ALL(e) } catch (CException* e)  

        { { ASSERT(e…》IsKindOf(RUNTIME_CLASS(CException)));  

                _afxExceptionLink。m_pException = e; 



#define AND_CATCH_ALL(e) } catch (CException* e)  

        { { ASSERT(e…》IsKindOf(RUNTIME_CLASS(CException)));  

                _afxExceptionLink。m_pException = e; 



#define END_CATCH_ALL } } } 



#define END_TRY } catch (CException* e)  

        { ASSERT(e…》IsKindOf(RUNTIME_CLASS(CException)));  

                _afxExceptionLink。m_pException = e; } } 



#else //_AFX_OLD_EXCEPTIONS 



//////////////////////////////////////////////////////////////////////// 

// Exception macros using setjmp and longjmp 

//  (for portability to pilers with no support for C++ exception handling) 



#define TRY  

        { AFX_EXCEPTION_LINK _afxExceptionLink;  

        if (::setjmp(_afxExceptionLink。m_jumpBuf) == 0) 



#define CATCH(class; e)  

        else if (::AfxCatchProc(RUNTIME_CLASS(class)))  

        { class* e = (class*)_afxExceptionLink。m_pException; 



#define AND_CATCH(class; e)  

        } else if (::AfxCatchProc(RUNTIME_CLASS(class)))  

        { class* e = (class*)_afxExceptionLink。m_pException; 



                                                                                       99 


…………………………………………………………Page 162……………………………………………………………

                 第篇  勿在浮砂築高台 



                 #define END_CATCH  

                         } else { ::AfxThrow(NULL); } } 



                 #define THROW(e) AfxThrow(e) 

                 #define THROW_LAST() AfxThrow(NULL) 



                 // Advanced macros for smaller code 

                 #define CATCH_ALL(e)  

                         else { CException* e = _afxExceptionLink。m_pException; 



                 #define AND_CATCH_ALL(e)  

                         } else { CException* e = _afxExceptionLink。m_pException; 



                 #define END_CATCH_ALL } } 



                 #define END_TRY } 



                 #endif //_AFX_OLD_EXCEPTIONS 



          Template 



                 这并不是一本C++ 书籍,我也并不打算介绍太多距离「运用MFC 」主题太远的C++ 论 



                 题。Template 虽然很重要,但它与「运用MFC 」有什么关系?有!第8章当我们开始 



                 设计Scribble 程序时,需要用到MFC  的collection classes ,而这一组类别自从MFC 3。0 



                 以来就有了template 版本(因为Visual C++ 编译器从2。0 版开始支持C++ template)。 



                 运用之前,我们总该了解一下新的语法、精神、以及应用。 



                 好,到底什么是template?重要性如何?Kaare Christian 在1994/01/25 的PC…Magazine 



                 上有一篇文章,说得很好: 



                 无性生殖并不只是存在于遗传工程上,对程序员而言它也是一个由来已久的动作。过去, 



                 我们只不过是以一个简单而基本的工具,也就是一个文字编辑器,重制我们的程序代码。 



                 今天,C++ 提供给我们一个更好的繁殖方法:template 。 



                 复制一段既有程序代码的一个最平常的理由就是为了改变数据类型。举个例子,假设你写 



                 了一个绘图函数,使用整数x; y 坐标;突然之间你需要相同的程序代码,但坐标值改采 



100 


…………………………………………………………Page 163……………………………………………………………

                                                       第2章  C++ 的重要性伲�



          long。你当然可以使用一个文字编辑器把这段码拷贝一份,然后把其中的数据类型改变 



          过来。有了C++,你甚至可以使用多载(overloaded )函数,那么你就可以仍旧使用相
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!