一、日期时间拾取控件CDateTimeCtrl
1.属性值
Day States 将某一天的显示变为粗体
Multi Select 允许用户在控件中选择日期范围,否则只允许选择一个日期
No Today Circle 不用红色圈定今天的日期
No Today 在控件的下边不再显示今天的日期
Week Numbers 在控件的每行左边显示周数
2.基本操作
日期时间拾取控件可改变月历对话框的字体
void SetMonthCalFont(HFONT hFont,BOOL bRedraw=TRUE)
bRedraw表示当字体设置后,是否立即重画
对应的是CDateTimeCtrl::GetMonthCalFont()获取当前日历字体格式
改变月历颜色函数:
COLORREF SetMonthCalColor(int iColor,COLORREF ref);
成功时将返回月历先前的颜色,否则返回-1
iColor指定月历设置颜色的部位,是一个索引值,参数ref指定颜色
月历颜色修改部位标志:
MCSC_BACKGROUND 设置月份之间的背景颜色
MCSC_MONTHBK 设置月份中的背景颜色
MCSC_TEXT 设置月份中的文本颜色
MCSC_TITLEBK 设置月历标题的背景色
MCSC_TITLETEXT 设置月历被踢的文本色
MCSC_TRAILINGTEXT 设置当月份向前后翻页时,与今日相同的日期的颜色
与之对应的成员函数CDateTimeCtrl::GetMonthCalColor()可用来获得相关颜色
在DTP(DateTimeCtrl)控件中还可调用成员函数:CDataTimeCtrl::GetMonthCalCtrl()来获得下拉月历指针
设置显示的格式:SetFont用来设置日期时间拾取控件的显示格式
有Short Data(短格式:”2010-9-21”)Long Data(长格式:”2010年9月21日”)或Time(显示时间,如”17:25:12”).
BOOL SetFormat(LPCTSTR pstrFormat);pstrFormat指定显示格式,若为NULL则使用默认格式
如:
SetFormat(“yyy’-‘MM’-‘dd’ ‘HH’:’mm’:’ss”)
设置或获取时间
SetTime();GetTiem()
BOOL SetTime(const COIeDateTime& timeNew);
BOOL SetTime(const CTime * pTimeNew);
BOOL SetTime(LPSYSTEMTIME pTimeNew=NULL);
第三个函数的pTimeNew是指向SYSTEMTIME结构的指针,其结构如下:
typedef struct _SYSTEMTIME {
WORD wYear;//年
WORD wMonth;//月
WORD wDayOfWeek;//一周的某一天,0=星期天,以此类推
WORD wDay;//天数
WORD wHour;//小时
WORD wMinute;//分
WORD wSecond; //秒
WORD wMilliseconds;//百万分之一秒
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
BOOL GetTime(COIeDateTime& timeDest)const;
DWORD GetTime(CTime& timeDest)const;
DWORD GetTime(LPSYSTEMTIME pTimeDest)const;
二、月历控件CMonthCalCtrl
1.颜色设置
SetColor(),GetColor()设置或获取月历控件的有关颜色
2.设置或获取月历内容
SetToday(),GetToday()设置或获取月历控件的今天日期
BOOL GetToday(COleDateTime& refDateTime)const;
BOOL GetToday(CTime& refDateTime)const;
BOOL GetToday(LPSYSTEMTIME pDateTime)const;
void SetToday(const COleDateTime& refDateTime);
void SetToday(const LPSYSTEMTIME pDateTime);
设置或获取当前选择项
BOOL GetCurSel(COleDateTime& refDateTime)const;
BOOL GetCurSel(CTime& refDateTime)const;
BOOL GetCurSel(LPSYSTEMTIME pDateTime)const;
BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL SetCurSel(const CTime& refDateTime);
BOOL SetCurSel(const LPSYSTEMTIME pDateTime);
3.通知消息
DTP控件
DTN_DROPDOWN DTP控件中的月历控件将要显示
DTN_CLOSEUP DTP控件中的月历控件将要关闭
DTN_DATETCHANGEDTP 控件中的内容已发生改变
DTN_FORMAT 文本需要显示在回调域
DTN_FORMATQUERY 文本显示所需最大尺寸
DTN_USERSTRING 用户已完成DTP控件的编辑
DTN_WMKEYDOWN 用户单击回调域
月历控件
MCN_GETDAYSTATE 获得日期的定制风格
MCN_SELCHANGE 当前选择项已被改变
MCN_SELECT 在月历控件中选择一个日期
NM_RELEASEDCAPTURE 释放鼠标的捕获信息
以上均可用向导添加映射
实例:
1.创建一个基于对话框的MFC应用程序exe,功能:使用日期时间拾取控件,实现设定日期和时间的功能。
2.设置对话框:
添加一个ID改为IDC_DTPDATETIME的日期时间拾取控件(日期时间选取器VC++6.0版本的称呼),并用向导设置一个成员变成名为:m_DateTime,其 为Control类型(CDateTimeCtrl)
设置一个名为IDC_MESSAGE的静态文本用于输出选择的日期信息。
静态文本内容为空
3.为了实现选择日历控件中的日期后,产生反馈信息给静态文本并且显示,我们需要一个名叫:DTN_DATETIMECHANGE的消息,用它来实现点击日期后的作出相应的反馈信息。
该消息是在IDC_DTPDATETIME的对象消息,只对日期时间拾取控件负责
void CMonthCalDlg::OnDatetimechangeDtpdatetime(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString strMessage;
CTime time;
m_DateTime.GetTime(time);//日期时间拾取控件调用GetTime会自动选择得到的是选中的那个日期时间。
//从DTP日期时间拾取控件中获得设定的日期
strMessage=time.Format("设定时间为%Y年%m月%d日 %H:%M:%S");
//这些%Y,%m,%d,%H,%M,%S都为从日历控件的当前被选中日期获取的信息对应着“年 月 日 时 分 秒”
GetDlgItem(IDC_MESSAGE)->SetWindowText(strMessage);//将格式化的信息传送
*pResult = 0;
}
经过试验发现,就算是在这个日期时间拾取控件还没完善,例如:时间只获取了创建那一瞬间的时间,时间不会流动,一些其他的在这里说过的函数都没用过,测试很不理想。