MFC常用类-CTimeSpan类
CTimeSpan类
CTimeSpan
CTimeSpan没有基类。
一个CTimeSpan对象代表一个相对的时间段。
CTimeSpan引入了ANSI time_t数据及与之相关的运行时函数。
这些函数将秒转换为日,时,分和秒的各种组合。
一个CTimeSpan对象以秒为单位保存时间。
由于CTimeSpan对象以带符号的四字节数存储,所以最大的时间跨度近似为+-68年。
另外一个与CTimeSpan对应的类是CTime,它描述的是绝对时间。
CTimeSpan是两个CTime对象之间的差。
CTime和CTimeSpan类不可派生。
因为没有虚函数,所以CTime和CTimeSpan对象的大小都正好是四字节。
大多数成员函数都是内联函数。
有关使用CTime的更多信息,参见“Visual C++程序员指南”中的文章“日期和时间”,以及“Microsoft Visual C++ 6.0参考库”的“Microsoft Visual C++ 6.0运行时库参考”卷中的“时间管理”。
#include <afx.h>
请参阅:
Run-time functions: asctime, _ftime, gmtime, localtime, strftime, time
CTimeSpan类成员。
mfc程序中字符串类型
mfc程序中字符串类型MFC程序中字符串类型: 了解CString类及其使用方法【引言】在MFC程序开发中,字符串类型是必不可少的。
字符串在程序中通常用于存储和操作文本数据。
MFC提供了一个强大而方便的字符串类CString,它能够简化字符串的操作并提供了许多有用的方法。
本篇文章将逐步介绍CString类及其使用方法,帮助读者更好地使用字符串类型。
【正文】一、CString类简介CString是MFC中提供的用于字符串操作的高级类。
它是对传统C语言字符串进行了封装,提供了更加方便、安全和高效的字符串操作方法。
CString类内部使用了动态内存管理技术,能够根据实际需要自动调整字符串长度。
在使用CString类之前,我们需要包含头文件`<afxwin.h>`。
二、创建CString对象使用CString类首先需要创建一个CString对象,可以通过以下几种方式进行创建:1. 无参构造函数:`CString str;`这种方式创建的CString对象没有初始值,需要在后续使用中进行赋值操作。
2. 带参构造函数:`CString str("Hello World");`这种方式创建的CString对象包含了初始化的字符串值。
三、字符串操作方法CString类提供了许多方便的方法来进行字符串操作,下面我们逐一介绍其中常用的几种方法:1. 获取字符串长度:`int len = str.GetLength();`这个方法用于获取CString对象存储的字符串的长度。
2. 字符串拼接:`str += " MFC";`通过重载的`+=`运算符,可以将两个字符串进行连接操作,将一个字符串附加在另一个字符串的后面。
3. 字符串比较:`int result = pare("Hello MFC");`使用Compare方法可以对两个字符串进行比较,并返回比较结果。
mfc 知识点总结
mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。
2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。
3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。
4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。
文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。
5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。
MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。
1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。
MFC提供了消息映射机制来进行消息处理。
通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。
例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。
MFC提供了CDialog类和CDialogEx类来封装对话框。
开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。
对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。
CImage的一般使用方法和技巧
我们知道,Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。
因此,想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码。
现在,MFC和ATL共享的新类CImage为图像处理提供了许多相应的方法,这使得Visual C++在图像方面的缺憾一去不复返了。
CImage类概述CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。
由于CImage在不同的Windows操作系统中其某些性能是不一样的,因此在使用时要特别注意。
例如,CImage::PlgBlt和CImage::MaskBlt只能在Windows NT 4.0 或更高版本中使用,但不能运行在Windows 95/98 应用程序中。
CImage::AlphaBlend和CImage::TransparentBlt也只能在Windows 2000/98或其更高版本中使用。
即使在Windows 2000运行程序还必须将stdafx.h文件中的WINVER和_WIN32_WINNT的预定义修改成0x0500才能正常使用。
CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素。
它具有下列最酷特性:1、AlphaBlend支持像素级的颜色混合,从而实现透明和半透明的效果。
2、PlgBlt能使一个矩形区域的位图映射到一个平行四边形区域中,而且还可能使用位屏蔽操作。
3、TransparentBlt在目标区域中产生透明图像,SetTransparentColor用来设置某种颜色是透明色。
4、MaskBlt在目标区域中产生源位图与屏蔽位图合成的效果。
使用CImage的一般方法使用CImage的一般方法是这样的过程:(1) 打开应用程序的stdafx.h文件添加CImage类的包含文件:#include <atlimage.h>(2) 定义一个CImage类对象,然后调用CImage::Load方法装载一个外部图像文件。
VS2010和MFC编程入门之42(MFC常用类:CString类)
VS2010MFC编程入门之四十二(MFC常用类:CString类)理解了分割窗口的有关知识,这里开始讲解MFC的一些常用类,先来说说CString类。
CString类简介CString类作为MFC的常用类,当之无愧。
可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。
因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的欢迎。
大家使用VS2010的话,可能会见到CStringT,实际上它是一个操作可变长度字符串的模板类。
CStringT模板类有三个实例:CString、CStringA和CStringW,它们分别提供对TCHAR、char和wchar_t字符类型的字符串的操作。
char类型定义的是Ansi字符,wchar_t类型定义的是Unicode字符,而TCHAR取决于MFC工程的属性对话框中的Configuration Properties->General->Character Set属性,如果此属性为Use Multi-Byte Character Set,则TCHAR类型定义的是Ansi字符,而如果为Use Unicode Character Set,则TCHAR类型定义的是Unicode字符。
三个字符串类的操作是一样的,只是处理的字符类型不同。
鸡啄米以CString类为讲解对象。
CString类的字符串操作1. CString类的构造函数CString类有很多构造函数,这里只介绍几个比较常用的:CString(constCString&stringSrc);将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。
例如:C++代码CString str1(_T("")); // 将常量字符串拷贝到str1 CString str2(str1); // 将str1的内容拷贝到str2CString(LPCTSTR lpch, intnLength);将字符串lpch中的前nLength个字符拷贝到该CString对象。
C语言获取当前系统时间的几种方式
C语言中如何获取时间?精度如何?1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒6 要获取高精度时间,可以使用BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。
7 Multimedia Timer FunctionsThe following functions are used with multimedia timers.timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime//*********************************************************************//用标准C实现获取当前系统时间的函数一.time()函数time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。
#include "time.h"void main (){time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );printf ( "\007The current date/time is: %s", asctime (timeinfo) );exit(0);}=================#include -- 必须的时间函数头文件time_t -- 时间类型(time.h 定义是typedef long time_t; 追根溯源,time_t是long)struct tm -- 时间结构,time.h 定义如下:int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;time ( &rawtime ); -- 获取时间,以秒计,从1970年1月一日起算,存于rawtimelocaltime ( &rawtime ); -- 转为当地时间,tm 时间结构asctime ()-- 转为标准ASCII时间格式:星期月日时:分:秒年-----------------------------------------------------------------------------二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
mfc计算时间差
mfc计算时间差MFC是Microsoft Foundation Class的缩写,是微软公司为Windows操作系统开发的一套类库。
它提供了丰富的功能和工具,方便开发人员快速搭建Windows应用程序。
在MFC中,我们可以使用CDateTime类来计算时间差。
计算时间差是指计算两个时间点之间的时间间隔。
在实际开发中,我们经常需要计算两个时间点之间的时间差,比如计算某个任务的执行时间,或者计算两个事件的间隔时间等。
MFC提供了一系列的函数和方法来实现时间差的计算。
我们需要获取两个时间点的值。
在MFC中,可以通过CDateTime 类来表示一个时间点。
CDateTime类提供了获取当前时间的方法,可以使用GetTime方法获取当前时间的值。
例如,下面的代码可以获取当前时间的值:```cppCDateTime currentTime;currentTime.GetTime();```获取时间差的方法有很多种,下面介绍其中一种常用的方法。
我们可以使用COleDateTime类来表示一个时间点,并使用COleDateTimeSpan类来表示两个时间点之间的时间间隔。
COleDateTime类提供了从CDateTime类获取时间值的方法,可以使用GetTime方法获取时间值。
COleDateTimeSpan类提供了计算时间差的方法,可以使用COleDateTimeSpan的构造函数来计算时间差。
例如,下面的代码可以计算两个时间点之间的时间差:```cppCDateTime startTime;CDateTime endTime;// 获取开始时间和结束时间的值startTime.GetTime();endTime.GetTime();// 计算时间差COleDateTimeSpan timeSpan(endTime - startTime);// 获取时间差的各个部分int hours = timeSpan.GetHours();int minutes = timeSpan.GetMinutes();int seconds = timeSpan.GetSeconds();```上述代码中,我们首先获取开始时间和结束时间的值,然后使用COleDateTimeSpan类的构造函数计算时间差,最后使用COleDateTimeSpan类的GetHours、GetMinutes和GetSeconds方法获取时间差的小时、分钟和秒数。
mfc 时间转换函数
mfc 时间转换函数MFC 时间转换函数在MFC 编程中,时间转换函数是非常常用的一个功能。
它可以将不同的时间格式相互转换,方便开发者在不同场景下使用。
一、将字符串转换为时间格式在实际开发中,我们经常会遇到将字符串转换为时间格式的需求。
比如,从用户输入的日期字符串中获取具体的年、月、日等信息。
这时,可以使用 MFC 提供的函数 CString::Format 进行转换。
例如,我们有一个日期字符串"2021-01-01",我们想要获取其中的年份。
可以使用以下代码实现:```cppCString strDate = "2021-01-01";int nYear = 0;sscanf_s(strDate, "%d", &nYear);```这样,变量nYear 就存储了字符串中的年份值。
同样的道理,我们也可以获取月份和日期的值。
二、将时间格式转换为字符串除了将字符串转换为时间格式,有时我们还需要将时间格式转换为字符串,以便于展示给用户或保存到文件中。
MFC 提供了一系列的格式化输出函数,可以方便地实现这个功能。
例如,我们有一个时间变量dt,表示当前的日期和时间。
我们可以使用以下代码将其转换为字符串:```cppCTime dt = CTime::GetCurrentTime();CString strDate = dt.Format("%Y-%m-%d");```这样,strDate 就存储了当前日期的字符串表示,格式为"2021-01-01"。
三、其他时间转换函数除了上述的字符串转换函数,MFC 还提供了一些其他的时间转换函数,用于处理更复杂的时间操作。
比如,CTimeSpan 类可以用来计算两个时间之间的时间间隔,CTime 类提供了一些日期和时间的基本操作。
四、总结MFC 时间转换函数是开发中经常使用的功能之一,能够方便地实现字符串和时间格式之间的相互转换。
MFC常见数据类型转换
1.CTime--〉CStringCTime t;t=CTime::GetCurrentTime();CString sur;sur.Format("%s",t.Format("%Y-%m-%d")); MessageBox(sur);2.long --> CStringlong a ;CString b;b.format("%ld",a);3.double --->CStringdouble a;CString b;b.format("%f",a);4.CString--〉CTimeCString sur;sur="2006-08-09";COleDateTime time1;time1.ParseDateTime(sur);SYSTEMTIME systime; VariantTimeToSystemTime(time1, &systime); CTime tm(systime);m_time=tm;UpdateData(false);5.CString和int,float之间的转换。
5.1 int <->CString1) int ->CStringint n = 1;str.Format("%d",n);2) CString->intCString str = "1";int n = _ttoi(str);5.2 char* 与CString1)char*->CStringchar sz[128];CString str;str.Format("%s",sz);2) CString-> char*CString str;int nLength = str.GetLength();char* sz = new char[nLength];sz = str.GetBuffer(0);5.3 float<->CString1)float/double->CStringfloat f = 0.0;CString str;str.Format("%f",f);2) CString->float/doubleCString str = "0.0";float f = _tto(str);Format函数第一个参数是要转的那个数的类型我现在的程序是int a = 21;double b = 3.45;str.Format("%03d%02.4f" , a , b);现在得到的结果是"0213.4500"%02.4f对b的整数部分不起作用我想要得到一个形如aaabb.bbbb的字符串("02103.4500"),如果a不足3位,用0补齐,如果b的整数和小数不足2位和4位也要用0补齐CString::Format("%d",xx);其中xx不能为双精度,不然会转化错误,应该使用CString::Format("%d",(LONG)xx);例:DOUBLE d = 22.443;CString str;str.Format("%d", d);转化后的str = "1924145349",这是错误的!1、CString to char*经过类型强制转换,可以将CString类型转换成char*,例如: CString cStr = "Hello,world!"; char* zStr = (char*)(LPCTSTR)cStr;2、char* to CStringchar*类型可以直接给CString,完成自动转换,例如: char* zStr = "Hello,world!"; CString cStr = zStr;3、CString to LPCSTR将CString转换成LPCSTR,需要获得CString的长度,例如: CString cStr = _T("Hello,world!"); int nLen = cStr.GetLength();LPCSTR lpszBuf = cStr.GetBuffer(nLen);4、CString to LPSTR这个和第3个技巧是一样的,例如: CString cStr = _T("Hello,world!"); int nLen = str.GetLength();LPSTR lpszBuf = str.GetBuffer(nLen);5、Char[] to int将字符串类型转换成整数型,可以使用atoi函数,例如:char c[10];int n; n = atoi(c)6、Char[] to float和第5个技巧一样,使用atof()函数可以转换成float型,例如: char c[10]; float f; f = atof(c);7、Char* to int和第5个技巧完全一样,例如: char *str = "100"; int i;i = atoi(str);一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long) ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型 strcpy(temp,"123");短整型(int)i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i); 浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username;CString转字符数组:int a;char ch[20];CString str;strcpy(ch,CW2A(str));Int转char[]字符数组Int m_insA_Vchar insA_V[10] = {0};itoa(m_insA_V,insA_V,10);Float转char[]字符数组函数名: gcvt把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数用法: char *gcvt(double value, int ndigit, char *buf);参数value——被转换的值。
MFC 提供了两个 日期 和 时间 类CTime和CTimeSpan
time_t mktime(struct tm * timeptr);
其返回值就是转化后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作了,
下面的例子可以计算出1997年7月1日是星期几:
#include "time.h"
二、总结
首先看几个函数的原型的声明(在time.h中):
clock_t clock( void ) clock_t是用来保存时间的数据类型,是long型
double difftime(time_t time1, time_t time0);取时间间隔的函数
time_t time(time_t * timer);日历时间函数
中,这样的程序虽然可以编译通过,但运行时会异常终止。
5.还知道了一个system()函数,是执行DOS命令的,system("某DOS命令");头文件是stdlib.h?windows.h
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
int tm_min; /*分-取值区间为[0,59] */
int tm_hour; /*时-取值区间为[0,23] */
int tm_mday; /*一个月中的日期-取值区间为[1,31] */
VS2010中MFC利用CImage类显示图像
VS2010中MFC利用CImage类显示图像我们知道,Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。
因此,想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码。
现在,MFC和ATL共享的新类CImage为图像处理提供了许多相应的方法,这使得Visual C++在图像方面的缺憾一去不复返了。
一、CImage类概述CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。
由于CImage在不同的Windows操作系统中其某些性能是不一样的,因此在使用时要特别注意。
例如,CImage::PlgBlt和CImage::MaskBlt只能在Windows NT 4.0 更高版本中使用,但不能运行在Windows 95/98 应用程序中。
CImage::AlphaBlend和CImage::TransparentBlt也只能在Windows 2000/98或其更高版本中使用。
即使在Windows 2000运行程序还必须将stdafx.h文件中的WINVER和_WIN32_WINNT的预定义修改成0x0500才能正常使用。
二、MFC中使用CImage类显示图像在图像控件(pictureControler)上(1)环境:Visual Studio 2010(2)如何使用?在使用的类头文件中,加入头文件“#include "atlimage.h"”(3)解决:1.类试图中,通过向导为Picture控件添加变量,如果不成功,则手动添加。
参考(VS2010为Picture Control手动添加变量)2.在对应的函数里添加如下代码:CImage image; //创建图片类image.Load(rphoto); //根据图片路径加载图片CRect rect;//定义矩形类int cx = image.GetWidth();//获取图片宽度int cy = image.GetHeight();//获取图片高度GetDlgItem(IDC_PICTURE)->GetWindowRect(&rect);//将窗口矩形选中到picture控件上ScreenToClient(&rect);//将客户区选中到Picture控件表示的矩形区域内GetDlgItem(IDC_PICTURE)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);//将窗口移动到Picture控件表示的矩形区域CWnd *pWnd=GetDlgItem(IDC_PICTURE);//获得pictrue控件窗口的句柄pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域CDC *pDC=pWnd->GetDC();//获得pictrue控件的DCimage.Draw(pDC->m_hDC, rect); //将图片画到Picture控件表示的矩形区域18. ReleaseDC(pDC);//释放picture控件的DC CImage image; //创建图片类image.Load(rphoto); //根据图片路径加载图片CRect rect;//定义矩形类int cx = image.GetWidth();//获取图片宽度int cy = image.GetHeight();//获取图片高度GetDlgItem(IDC_PICTURE)->GetWindowRect(&rect); //将窗口矩形选中到picture控件上ScreenToClient(&rect);//将客户区选中到Picture控件表示的矩形区域内GetDlgItem(IDC_PICTURE)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);//将窗口移动到Picture控件表示的矩形区域CWnd *pWnd=GetDlgItem(IDC_PICTURE);//获得pictrue控件窗口的句柄pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域CDC *pDC=pWnd->GetDC();//获得pictrue控件的DC image.Draw(pDC->m_hDC, rect); //将图片画到Picture控件表示的矩形区域ReleaseDC(pDC);//释放picture 控件的DC3.编译,运行。
MFC常用类-CTime类
CTime类1.构造和初始化CTime类对象CTi me类有下列构造函数:CTi me();CTi me(const CTi me& timeSrc );CTi me(time_t time );CTi me(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 );CTi me(WORD wDosDate, WORD wDosTime, int nDST = -1);CTi me(const SYSTEMTIME& sysTi me, int nDST = -1 );CTi me(const FILETIME& fileTi me, int nDST = -1);说明:以不同的方式构造一个CTi me对象。
可以用一个已经存在的CTi me对象或一个time_t(在ti me.h中被定义为long)类型变量来构造和初始化CTi me对象,也可以用年、月、日、小时、分、秒来构造和初始化CTi me对象,还可以用SYSTEMTIME、FILETIME结构来构造和初始化CTime对象。
SYSTEMTIME、FILETIME结构定义如下:typedef struct _SYSTEMTIME {WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds;} SYSTEMTIME;typedef struct _FILETIME {DWORD dwLowDateTime; /* low 32 bits */DWORD dwHighDateTime; /* high 32 bits */} FILETIME, *PFILETIME, *LPFILETIME;2.时间值的提取函数(1)GetCurrentTime()获取系统当前时间。
MFC-CDockablePane使用心得
MFC-CDockablePane使⽤⼼得m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// BOTTOM(4)第四种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFT// 注意这⾥,将0放在1上⾯m_Panes[0].DockToWindow(&m_Panes[1], CBRS_TOP);(5)第五种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFTCDockablePane* pTabbedBar = NULL;// 放到同⼀个选项卡中,并默认选择1m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar);(6)第六种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFTDockPane(&m_Panes[2]);// LEFTm_Panes[0].DockToWindow(&m_Panes[2], CBRS_TOP);CDockablePane* pTabbedBar = NULL;m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar);(7)第七种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMCDockablePane* pTabbedBar = NULL;m_Panes[0].DockToWindow(&m_Panes[1], CBRS_LEFT);(8)第⼋种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[3].Create(_T("Pane 3"), this, CRect(0, 0, 200, 100), TRUE, 1003, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[4].Create(_T("Pane 4"), this, CRect(0, 0, 200, 100), TRUE, 1004, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);m_Panes[3].EnableDocking(CBRS_ALIGN_ANY);m_Panes[4].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMDockPane(&m_Panes[2]);// LEFTDockPane(&m_Panes[3]);// LEFTDockPane(&m_Panes[4]);// RIGHTCDockablePane* pTabbedBar = NULL;m_Panes[0].DockToWindow(&m_Panes[1], CBRS_LEFT);m_Panes[3].AttachToTabWnd(&m_Panes[2], DM_SHOW, TRUE, &pTabbedBar);(9)第九种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[3].Create(_T("Pane 3"), this, CRect(0, 0, 200, 100), TRUE, 1003, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[4].Create(_T("Pane 4"), this, CRect(0, 0, 200, 100), TRUE, 1004, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);m_Panes[3].EnableDocking(CBRS_ALIGN_ANY);m_Panes[4].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMDockPane(&m_Panes[2]);// LEFTDockPane(&m_Panes[3]);// LEFTDockPane(&m_Panes[4]);// RIGHTCDockablePane* pTabbedBar = NULL;m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar); m_Panes[3].AttachToTabWnd(&m_Panes[2], DM_SHOW, TRUE, &pTabbedBar);转⾃:/kikaylee/article/details/8936953。
VS2010和MFC编程入门之43(MFC常用类:CTime类和CTimeSpan类)
VS2010MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)理解了MFC常用类CString类的用法,这里继续讲另外两个MFC常用类-日期和时间类CTime类和CTimeSpan类。
日期和时间类简介CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。
CTimeSpan类的对象表示的是时间间隔。
CTime类和CTimeSpan类一般不会被继承使用。
两者对象的大小都是8个字节。
CTime表示的日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM GMT。
CTime类的主要成员函数下面列出CTime类的主要成员函数,并加以讲解。
CTime();构造一个未经初始化的CTime对象。
此构造函数使我们可以定义一个CTime对象的数组,在使用数组前需要以有效的时间值为其初始化。
CTime(__time64_t time);以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个CTime对象。
参数time是一个__time64_t类型的值,表示自GMT时间1970年1月1日零点以来的秒数,这里要注意的是,参数time代表的时间会转换为本地时间保存到构造的CTime对象中。
例如,我们传递参数0构造一个CTime对象,然后调用CTime对象的GetHour成员函数将返回8,因为参数0代表的GMT时间转换为北京时间后为1970年1月1日 8:00:00。
CTime(intnYear,intnMonth,intnDay,intnHour,intnMin,intnSec,intnDST = -1);以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造CTime对象。
参数nYear、nMonth、nDay、nHour、nMin、nSec分别表示年、月、日、小时、分钟、秒,取值范围如下:时间分量取值范围nYear1970-3000nMonth 1-12nDay 1-31nHour 0-23nMin 0-59nSec 0-59参数nDST指定是否实行夏令时,为0时表示实行标准时间,为正数时表示实行夏令时,为负数时由系统自动计算实行的是标准时间还是夏令时。
MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类
MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类MFC数组类CByteArray:CDWordArray:CPtrArray:CUIntArray:CWordArray:CStringArray:常用成员函数1.int Add( ARG_TYPE newElement ); throw( CMemoryException );2.TYPE& ElementAt( int nIndex );3.void FreeExtra();4.TYPE GetAt( int nIndex ) const5.int GetSize() const;6.int GetUpperBound() const;7.(1)void InsertAt( int nIndex, ARG_TYPE newElement, int nCount = 1 );throw( CMemoryException );(2)void InsertAt( int nStartIndex, CArray* pNewArray );throw( CMemoryException );8.void RemoveAll();9.void SetAt( int nIndex, ARG_TYPE newElement );10.void SetAtGrow( int nIndex, ARG_TYPE newElement ); throw( CMemoryException);11.void SetSize( int nNewSize, int nGrowBy = -1 ); throw( CMemoryException );例:CStringArray m_strArraym_strArray.SetSize(5,5);m_strArray[0] = "111111111111";m_strArray[2] = "333333333333";m_strArray[4] = "555555555555";增加元素int m_nIndex = 0;CString m_strValue = "Default";int m_nRadio = 0;if (m_nRadio == 0)m_strArray.SetAtGrow(m_nIndex, m_strValue);else if (m_nRadio == 1)m_strArray.Add(m_strValue);elsem_strArray.InsertAt(m_nIndex, m_strValue, 1);删除int m_nIndex= 0;m_strArray.RemoveAt(m_nIndex);MFC的链表类模板类 Clist CTypedPtrList非模板类 CObList CPtrList CStringListMFC链表类的常用成员函数——以Clist为例1.CList( int nBlockSize = 10 );2.TYPE GetHead() const;3.TYPE GetTail() const;4.RemoveHead()5.RemoveTail()6.原型1:POSITION AddHead( ARG_TYPE newElement );原型2:void AddHead( CList* pNewList );7.原型1:POSITION AddTail( ARG_TYPE newElement );原型2:void AddTail( CList* pNewList );8.RemoveAll()9.POSITION GetHeadPosition() const;10.POSITION GetTailPosition() const;11.TYPE GetNext( POSITION& rPosition ) const;12.TYPE GetPrev( POSITION& rPosition ) const;13.TYPE GetAt( POSITION position ) const;14.void SetAt( POSITION pos, ARG_TYPE newElement );15.void RemoveAt( POSITION position );16.POSITION InsertBefore( POSITION position, ARG_TYPE newElement ); 17.POSITION InsertAfter( POSITION position, ARG_TYPE newElement ); 18.POSITION Find( ARG_TYPE searchValue, POSITION startAfter = NULL) const; 19.POSITION FindIndex( int nIndex ) const;20.int GetCount() const;21.BOOL IsEmpty() const;例题struct CStudent{CString m_strName;int m_nScore;};CPtrList m_List;向添加链表中添加元素CStudent* m_pStudent = new CStudent;m_pStudent->m_strName = m_strName;m_pStudent->m_nScore = m_nScore;m_List.AddTail(m_pStudent);删除节点int nNumber;CStudent* m_pStudent = NULL;if (m_List.IsEmpty())MessageBox("结点已经全部删除!";else{if (m_nRadio == 0)m_pStudent = (CStudent*)m_List.RemoveHead();else if(m_nRadio == 1)m_pStudent = (CStudent*)m_List.RemoveTail();else{if(nNumber < m_List.GetCount()){POSITION pos = m_List.FindIndex(m_nNumber);POSITION pos1 = pos;m_pStudent = (CStudent*)m_List.GetNext(pos1);m_List.RemoveAt(pos);}else{MessageBox("指定结点超出范围!";}}if(m_pStudent)delete m_pStudent;}遍历链表POSITION pos = m_List.GetHeadPosition();while (pos != NULL){CStudent* m_pStudent = (CStudent*) m_List.GetNext(pos);char s[81];wsprintf(s, " 的成绩是 %d.",m_pStudent->m_nScore);CString m_string=m_pStudent->m_strName+s;}CString类一、常用成员函数1.int GetLength() const;说明:获取CString类对象包含字符串的长度(字符数)。
VS2010_MFC编程入门之四十四(MFC常用类:定时器Timer)-软件开发-鸡啄米
5. UINT nMsg, // WM_TIMER 6. 7. UINT nIDEvent // timer identification 8. 9. DWORD dwTime // system time 10. 11. );
参数hWnd为调用SetTimer成员函数的CWnd对象的句柄,即拥有此定时器的窗口的句柄;参数n Msg为WM_TIMER,而且总是为WM_TIMER;参数nIDEvent为定时器ID;参数dwTime为系统启动以 来的毫秒数,即GetTickCount函数的返回值。
C++代 码
1. void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
2. {
3.
// TODO: Add your message handler code here and/or call default
4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. }
分类标签: 编程入门
VS2010
VC++
MFC
前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器。定时 器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSp an之后讲解。
站内搜索 请输入搜索内容..
定时器简介
定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系统传入一 个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期性的自动操作。例 如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为1个小时,那么每隔1个小时系统 就会采集一次数据,这样就可以在无人操作的情况下准确的进行操作。
任国威整理Ctimeclass详解
对于MFC中每个从CObject派生的类来说,都有一个相关的CRuntimeClass结构体,在程序运行时可以访问该结构体来获取对象及其基类的信息。
CRuntimeClass是一个结构体,并且其本身并没有基类。
在运行时确定一个对象的类型是很重要的,尤其是在做类型检查时;而c++语言本身并不支持运行时类信息。
CObject和CRuntimeClass是MFC中两个非常重要的类/结构,绝大部分MFC类都是以CObject做为基类,CRuntimeClass结构同CObject 密不可分,了解它们对于深入理解MFC具有重要意义。
CRuntimeClass 的定义如下:01 struct CRuntimeClass02 {03 // Attributes04 LPCSTR m_lpszClassName; //类名,一般是指包含CRuntimeClass对象的类的名称05 int m_nObjectSize; //包含CRuntimeClass对象的类sizeof的大小,不包括它分配的内存06 UINT m_wSchema; // schema number of the loaded class07 CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class 指向一个建立实例的构造函数0809 #ifdef _AFXDLL10 CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();11 #else12 CRuntimeClass* m_pBaseClass; //m_pBaseClass的指针(函数)是MFC运行时确定类层次的关键,它一个简单的单向链表13 #endif1415 // Operations16 //这个函数给予CObject 派生类运行时动态建立的能力17 CObject* CreateObject();1819 //这个函数使用 m_pBaseClass或 m_pfnGetBaseClass遍历整个类层次确定是否pBaseClass指向的类是基类,20 //使用它可以判断某类是否是从pBaseClass指向的类在派生来。
第三讲:MFC框架下的CTime类
第三讲:MFC框架下的CTime类很多的时候我们需要在处理数据的时候获取当前的日期和时间,这对于某一些功能,例如系统日志、销售记录等等来说是必须的,但是通常我们在C++中并不能够直接的保存这些数据。
当然,按照我们学过的思维,我们可以构造一个Date类完成这件事情,但是重新构造一个类无疑是浪费了我们的宝贵时间,毕竟项目很大代码很多,如果再为了时间和日期专门构建一个Date类又要废上很多事情了。
另外还有一件很可怕的事情,倘若你构造了Date类,那么你势必要使用Get、Set函数。
这就会造成后期用户可以随意的更改日期,这对于一些不可更改时间的事情来说是很危险的。
那么有没有一种类可以让我们轻松的解决这种问题,让我们不需要构造类型还能够准确的获取当前系统的时间避免由用户自己输入呢?【CTime类初识】CTime类专门用于表示时间和日期的概念,它是MFC常用类中的提供的强大的时间日期类。
使用它可以完成常见的有关日期和时间的操作。
CTime类表示一个绝对的时间和日期,它是MFC框架中唯一独立存在的,没有继承关系的类,因此我们并不能够将它的对象转换为CObject类型。
【使用CTime类建立对象】使用CTime类建立对象的方式有很多种,在这里我只列出最常见的几种方式:1、通过默认构造函数构造空的CTime对象:2、通过复制构造函数构造CTime对象:3、使用CTime类的有参构造函数构造对象:【CTime获取当前时间】在MFC中,若想获取当前系统的时间,我们则需要使用CTime类的静态成员函数GetCurrentTime,其含义为创建一个取值为当前时间的CTime对象。
故此我们可以这样使用它:当然你也可以把GetCurrentTime 函数换成GetTickCount,其效果相同没有什么差别。
【获取当前的日期】怎样才能够让我们获取CTime类对象中的日期呢?此时我们需要借助三个成员函数GetYear、GetMonth 以及GetSecound函数完成这件事情,当然他们的含义我相信你还是可以懂的吧!这里我就不一一介绍了,接下来我们来介绍一下他们的用法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CTimeSpan类
1.构造函数。
CTimeSpan类有下列构造函数:
(1)CTimeSpan();
(2)CTimeSpan(const CTimeSpan& timeSpanSrc );
(3)CTimeSpan(time_t time );
(4)CTimeSpan(LONG lDays, int nHours, int nMins, int nSecs );
参数timeSpanSrc为一个已存在的CTimeSpan 对象,time为一个time_t 类型的时间值,lDays, nHours, nMins, nSecs分别为天数、小时数、
分数和秒数。
2.时间值的提取函数
(1)GetDays()获得CTimeSpan类对象中包含的完整的天数。
(2)GetHours()获得当天的小时数,值在-23到23之间。
(3)GetTotalHours()获得CTimeSpan类对象中包含的完整的小时数。
(4)GetMinutes()获得当前小时包含的分数,值在-59到59之间。
(5)GetTotalMinutes()获得CTimeSpan类对象中包含的完整的分数。
(6)GetSeconds()获得当前分钟包含的秒数,值在-59到59之间。
(7)GetTotalSeconds()获得CTimeSpan类对象中包含的完整的秒数。
格式化时间
Format()将一个CTimeSpan对象转换成格式字符串。
使用方式与CTime类似,格式化字符包括以下几个:
%D: CTimeSpan的总天数;
%H:不足整天的小时数;
%M:不足1小时的分数;
%S:不足1分钟的秒数;
%%:百分号。
4.重载运算符
CTimeSpan类也重载了运算符“=”,“+”,“-”,“+=”,“-=”,“==”,“!=”,“<”,“>”,“<=”,“>=”,用于CTimeSpan对象的赋值、加减运
算及两个CTimeSpan对象的比较。
例子代码
构造一个CTimeSpan对象,并获取其中的完整天数、小时数、分数和秒数,将获得的信息在信息框中显示。
CTimeSpan m_timespan(3,4,5,6); // 3天,4小时,5分,6秒
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);
运行结果在信息框中显示5行,其中s1的内容为“3”,s2的内容为“76”(3*24+4),s3的内容为“4565”(76*60+5),s4的内容为“273906”
(4565*60+6)。