MFC-日期控件DataTime的使用详述

来源:互联网 发布:淘宝二手铁艺设备 编辑:程序博客网 时间:2024/05/29 17:02
这里我们想做一个日期控件的小demo,空间名为Datatimepicker,定义两个日期窗口,并且在edit窗口中显示两个日期空间所显示时间之间相差的年月日时分秒。以下为本人一步步的x详细操作:

  首先前面板的控件就那么三个,前两个是日期控件,后一个为编辑框,用来显示时间间隔,效果图如下:

这里写图片描述

相应的id号改好,并将编辑文本框控件改成可换行,这可以在属性里设置。

  这里附加上日期格式初始化的方式,WIndows里日期的标准格式为“yyyy-MM-dd HH:mm:ss”年月日时分秒,首先右键时间控件框添加俩变量,我这里命名为m_data_begin、m_data_end.在面板初始化函数里添加相应的代码:  *(BOOL CDataTimeDemoDlg::OnInitDialog)*
m_data_begin.SetFormat(L"yyyy-MM-dd HH:mm:ss");    m_data_end.SetFormat(L"yyyy-MM-dd HH:mm:ss");//设置为标准的时间格式

这里写图片描述


 既然我们的目的是计算出时间间隔,因此每次在控件的时间发生改变的时候都要响应某一个消息函数,分别点击两个控件右键类向导,添加相应的处理程序:

这里写图片描述

 出现如下两个消息函数:

这里写图片描述

现在便是要在这个函数中获取当前时间,且将时间间隔输出到文本框控件中,添加如下的代码:
    SYSTEMTIME time_begin={0},time_end={0};    m_data_begin.GetTime(&time_begin);//获取当前控件的时间    m_data_end.GetTime(&time_end);//获取另一控件的时间     /*WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds;SYSTEMTIME该结构体包含详细的年月日时分秒并不适于计算*/    FILETIME ft_begin,ft_end;       //从160111日到今天的纳秒数,是另一种类型结构体    SystemTimeToFileTime(&time_begin,&ft_begin);    SystemTimeToFileTime(&time_end,&ft_end);       //相当于对filetime进行的初始化    /*typedef struct _FILETIME {    DWORD dwLowDateTime;    DWORD dwHighDateTime;包括高位和低位,并不能直接相减,这里引入一个联合体ULARGE_INTEGER*/      ULARGE_INTEGER u_begin,u_end;    u_begin.u.HighPart=ft_begin.dwHighDateTime;    u_begin.u.LowPart=ft_begin.dwLowDateTime;    u_end.u.HighPart=ft_end.dwHighDateTime;    u_end.u.LowPart=ft_end.dwLowDateTime;    ULONGLONG ull_span;//用来存差值(纳秒)    ull_span=u_begin.QuadPart>=u_end.QuadPart?(u_begin.QuadPart-u_end.QuadPart):(u_end.QuadPart-u_begin.QuadPart); //三目运算符    ULONGLONG ull_seconds=ull_span/10000000;    int n_minutes=ull_seconds/60;    int n_hours=n_minutes/60;    int n_day=n_hours/24;//计算相应的日时分秒CString StrOutput;    StrOutput.Format(L"秒数:%d\r\n分钟数:%d\r\n小时数:%d\r\n天数:%d\r\n",(int)ull_seconds,n_minutes,n_hours,n_day);    SetDlgItemTextW(IDC_EDIT_OUTPUT,StrOutput);

编译一下,大功告成!
这里写图片描述

0 0
原创粉丝点击