%y 不带年代前缀的年数,值在00到99之间。
%Y 带年代前缀的年数。
%z 简写的时区名称。
%Z 不简写的时区名称。
%% 百分号标志。
这个程序的代码如下:
CTime m_time=CTime::GetCurrentTime();
CString s1=m_time。Format(〃%A;%B;%d;%Y〃);
CString s2=m_time。Format(〃%U〃);
…………………………………………………………Page 626……………………………………………………………
CString m_str=〃当前时间是:〃+s1+〃n〃+〃本周是今年的第〃+s2+〃周〃;
MessageBox(m_str);
运行结果如图10。19所示。
图10。 19 显示当前时间
CTimeSpan类由下列成员函数:
CTimeSpan() 构造一个CTimeSpan类对象。
GetDays() 获得CTimeSpan类对象中包含的完整的天数。
GetHours() 获得当天的小时数,值在…23到23之间。
GetTotalHours()获得CTimeSpan类对象中包含的完整的小时数。
GetMinutes() 获得当前小时包含的分数,值在…59到59之间。
GetTotalMinutes() 获得CTimeSpan类对象中包含的完整的分数。
GetSeconds() 获得当前分钟包含的秒数,值在…59到59之间。
GetTotalSeconds() 获得CTimeSpan类对象中包含的完整的秒数。
Format() 将一个CTimeSpan对象转换成格式字符串。
operator = 赋予新的时间范围值。
operator ???? 增加或减小CTimsSpan对象。
operator ???????CTimeSpan对象增加或减去一个CTimeSpan对象。
operator ??,?? ,?,?,??,?? 比较两个CTimeSpan对象的大小。
下面的程序将构造一个CTimeSpan对象,并获取其中的完整天数、小
时数、分数和秒数,代码如下:
…………………………………………………………Page 627……………………………………………………………
CTimeSpan m_timespan(3;4;5;6);
//构造一个CTimeSpan对象
LONG m_totalDays=m_timespan。GetDays();
//获得完整天数
LONG m_totalHours=m_timespan。GetTotalHours();
//获得完整小时数
LONG m_totalMinutes=m_timespan。GetTotalMinutes();
//获得完整分数
LONG m_totalSeconds=m_timespan。GetTotalSeconds();
//获得完整秒数
char s1'8';s2'8';s3'8';s4'8';
wsprintf(s1;〃%ld〃;m_totalDays);
wsprintf(s2;〃%ld〃;m_totalHours);
wsprintf(s3;〃%ld〃;m_totalMinutes);
wsprintf(s4;〃%ld〃;m_totalSeconds);
CString m_str=〃此时间范围包含:n完整天数 :〃+CString(s1)+
〃n完整小时数:〃+CString(s2)+〃n完整分数 :〃+CString(s3)+
〃n完整秒数 :〃+CString(s4);
MessageBox(m_str);
图10。 20 获取时间范围量包含的天、小时、分和秒数
这段代码主要让读者体会使用CTimeSpan处理时间范围量的便捷。运
行结果如图10。20所示,消息框中显示了希望获得的信息。
…………………………………………………………Page 628……………………………………………………………
第十一章 异常处理和诊断
编写程序时出一些错误是难免的,在C++中称在软件或硬件中发生的
不期望或不需要的事件为异常 (Exception)。MFC提供了两种异常处
理机制:
l C++异常,在MFC 3。0和更高版本中可以使用
l MFC异常,在MFC 1。0和更高版本中可以使用
在程序出错误后需要调试程序,MFC提供了许多诊断服务,可以让用
户轻松的调试程序,这些诊断服务大多以特定宏和全局函数形式出
现。
本章将向读者介绍以下内容:
l 处理C++异常
l MFC异常
l 诊断服务
第一节 处理C++异常
C++使用try、catch、throw三个关键字来实现异常处理。使用C++的
异常处理能够使你的程序从异常状态中恢复。这些异常由处于正常控
制流之外的代码来处理。
l 注意:
l 新的32位的异常处理机制支持C和C++。但是,它并非为C++专门设
计的。你应 当保证你的代码非常适合于C++的异常处理,并且C++
的异常处理是相当灵活的,它可以处理任何类型的异常。
异常处理机制允许程序对严重的和没有预料到的问题做出响应。一个
异常块由下列三个部分组成:
l try块
标志你认为可能会出现异常的代码。
l catch块
…………………………………………………………Page 629……………………………………………………………
紧跟着try块,里面包含了处理异常的代码。
l throw块
抛出一个异常,激活catch块中的相应的异常处理代码。
异常处理的机制比较简单,首先你将有可能出现问题的代码放在try
块中,然后在catch块中放进用来处理异常的代码。如果在try块中的
代码抛出一个异常,try块迅速退出执行,程序将转入catch块中执行
相应的异常处理代码。
第二节 MFC异常
在MFC中CException类是所有异常类的基类,它是一个抽象类,你不
能使用它的对象,只能创建它的派生类的对象。它有两个公用方法:
GetErrorMessage 和ReportError ,分别用于查找描述异常的
信息和为用户显示一个错误信息的信息对话框。
CException类包含以下基类 (如图11。1所示),并提供了THROW、
THROW_LAST、TRY、CATC、 AND_CATCH、 END_CATCH这些宏用来处理
异常。
图11。 1 CException的基类
(1) CArchiveException
一个CArchiveException用来描述序列化异常状态。它包含了一个数
据成员m_cause用来表现异常的原因。它可能为以下值:
…………………………………………………………Page 630……………………………………………………………
none :没有错误发生
generic:未指定的错误
readOnly:试图写入一个为载入而打开的文档
endOfFile:当读取一个文档时到达文档尾部
writeOnly:试图读取一个为存储而打开的文档
badIndex:非法文件格式
badClass:试图读一个对象到一个错误类型对象中
badSchema:试图读一个对象,它带有不同的类的版本
另外MFC还提供AfxThrowArchiveException 函数来抛出一个存档
文件异常,形式如下:
void AfxThrowArchiveException( int cause; LPCTSTR lpszArchiveName );
(2) CDaoException
一个CDaoException类对象用来表示基于数据访问对象 (DAO;data
access objects)的MFC数据库类的异常。这个异常类包含三个决定
异常原因的成员变量,这三个成员变量是:
m_scode:描述与异常相关的SCODE代码
m_pErrorInfo:包含用于所有MFC的DAO类的所有异常的扩展错误代码
m_nAfxDaoError:包含DAO错误对象的指向CDaoErrorInfo结构的指针
这个类有下列两个操作:
GetErrorCount 获取在数据库引擎异常集合中的异常数 目
GetErrorInfo 获取在异常集合中相似对象的错误信息
MFC中的AfxThrowDaoException()函数抛出一个CDaoException类型的
异常,使用如下形式:
void AFXAPI AfxThrowDaoException( int nAfxDaoError = NO_AFX_DAO_ERROR; SCODE
scode = S_OK );
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 其他
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 其他
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 其他
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 其他
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章