在Visual C++6.0 中增加了日期时间拾取控件(Date Time Picker简称DTP控件)和月历控件,对应的类为CDateTimeCtrl,CMonthCalCtrl.
这两个控件允许用户选择日期、时间和月份并可对其进行操作。
两者区别: CDateTimeCtrl 拥有一个子月历控件,可通过CMonthCalCtrl* GetMonthCalCtrl() const;获取.
再DTP控件中,用户可调整现实的日期。缺省时,用户可单击控件的右边的下拉按钮,
即可弹出月历控件以供用户选择日期,通过风格的改变还可在DTP控件内显示时间。
在月历控件中,用户可按击控件左右两边的箭头按钮,可前后翻页显示相关的月份。
一、DTP控件和月历控件的风格及其设置
(1)DTP控件
DTP控件的风格分别如下:
|
DTS_APPCANPARSE |
允许用户对输入消息进行必要的处理。 |
DTS_LONGDATEFORMAT |
用长格式显示日期,如"1999年6月22日"。 | |
DTS_RIGHTALIGN |
下拉月历右对齐控件。 | |
DTS_SHOWNONE |
在控件中可能没有当前日期。使用此风格时,控件显示一个复选框,当用户选中时,方可键入或选择一个日期。DTS_SHORTDATEFORMAT用短格式显示日期,如“ | |
DTS_TIMEFORMAT |
在控件内显示时间。 | |
DTS_UPDOWN |
在控件的右边出现一个旋转按钮用来调整日期。若此风格没指定,则控件的右边是一个下拉按钮用来弹出月历。 |
这些风格可在CDateTimeCtrl::Create函数中加以设定,也可通过DTP控件的Styles属
性对话框进行设置(如图6.9所示),相关属性说明如下:
|
.Format |
DTP控件的格式有:ShortDate(短格式)、LongDate(长格式)、Time(显示 时 间 ) 。 分别与DTS_SHORTDATEFORMAT 、DTS_LONGDATEFORMAT、DTS_TIMEFORMAT相同。 |
.Right Align |
同DTS_RIGHTALIGN。 | |
.Use Spin Control |
同DTS_UPDOWN。 | |
.Show None |
同DTS_SHOWNONE。 | |
.Allow Edit |
DTP控件允许编辑。 |
(2)月历控件
月历控件的风格有:
|
MCS_DAYSTATE |
此风格将某一天的显示变成粗体。 |
MCS_MULTISELECT |
允许用户在控件中选择日期范围。缺省时,最大的范围为一周。 | |
MCS_NOTODAY |
在控件的下边不再显示今天的日期。 | |
MCS_NOTODAYCIRCLE |
不圈定今天的日期。 | |
MCS_WEEKNUMBERS |
在控件的每行左边显示周数(1-52)。 |
这些风格可在CMonthCalCtrl::Create函数中加以设定,也可通过月历控件的Styles属性
对话框进行设置,相关属性说明如下:
|
.Day States |
同MCS_DAYSTATE。 |
.Multi Select |
同MCS_MULTISELECT。 | |
.No Today Circle |
同MCS_NOTODAYCIRCLE。 | |
.No Today |
同MCS_NOTODAY。 | |
.Week Numbers |
同MCS_WEEKNUMBERS。 |
二、基本操作
(1)DTP控件
字体、颜色的操作DTP控件可改变月历对话框的字体,成员函数CDateTimeCtrl::SetMonthCalFont
可实现此操作,其函数原型如下:
void SetMonthCalFont(HFONT hFont,BOOL bRedraw=TRUE);
参数:
|
hFont |
要设置的字体句柄. |
|
bRedraw |
当字体设置后,是否立即重画。 |
与此函数相对应的是获得字体的成员函数CDateTimeCtrl::GetMonthCalFont.改变DTP控件
中的月历颜色可用成员函数CDateTimeCtrl::SetMonthCalColor,其原型如下:
COlORREF SetMonthCalColor(int iColor,COLORREF ref);
此函数成功时将返回月历先前的颜色,否则返回-1。
参数:
|
iColor |
指定月历控件中要设置颜色的部位,它可以是下列值之一
| ||||||||||||
|
ref |
指定的颜色。 |
与其相对应的成员函数CDateTimeCtrl::GetMonthCalColor可用来获得相关颜色。在DTP控件
中还可调用成员函数CDateTimeCtrl::GetMonthCalCtrl来获得下拉月历指针。
设置显示的格式
成员函数CDateTimeCtrl::SetFormat是用来设置DTP控件的显示格式,其原型如下:
BOOL SetFormat(LPCTSTR pstrFormat);
参数pstrFormat是用来指定显示格式,若为NULL则使用缺省的格式。该参数可包含下列格式字符:
|
"d" |
1或2位日期。 |
|
"dd" |
两位日期,日期为1位数字时,在前加0. |
|
"ddd" |
星期缩写成三个字符。 |
|
"dddd" |
星期全名。 |
|
"h" |
在12小时格式中,显示1位或2位。 |
|
"hh" |
12小时格式的两位数显,不足时前补0。 |
|
"H" |
24小时格式的1位或2位数显。 |
|
"HH" |
24小时格式的两位数显,不足时前补0。 |
|
"m" |
分钟的1位或2位数显。 |
|
"mm" |
分钟的两位数显,不足时前补0。 |
|
"M" |
月份的1位或2位数显。 |
|
"MM" |
月份的两位数显,不足时前补0. |
|
"MMM" |
月份缩写成三个字符. |
|
"MMMM" |
月份全名。 |
|
"t" |
AM/PM缩写成一个字符如AM缩写成"A"。 |
|
"tt" |
AM/PM。 |
|
"y" |
年号的最后1位数,显如1999年显示为9. |
|
"yy" |
年号的最后2位数显。 |
|
"yyy" |
整个年号,如1999。 |
设置或获取时间
成员函数CDateTimeCtrl::SetTime和CDateTimeCtrl::GetTime分别用来设置和获取DTP
控件中的时间。其函数原型如下:
BOOL SetTime(const COIeDateTime& timeNew);
BOOL SetTime(const CTime* pTimeNew);
BOOL SetTime(LPSYSTEMTIME pTimeNew=NULL);
函数第三个形式中的参数pTimeNew是指向SYSTEMTIME结构的指针,其结构如下:
typedef struct_SYSTEMTIME{ //st
WORD wYear; //年
WORD wMonth; //月,0=1月,以此类推
WORD wDayOfWeek; //一周的某一天,0=星期天,以此类推
WORD wDay; //天数
WORD wHour; //小时
WORD wMinute; //分针
WORD wSecond; //秒
WORD wMilliseconds; //百万分之一秒
} SYSTEMTIME;
BOOL GetTime(COIeDateTime& timeDest)const;
DWORD GetTime(CTime& timeDest)const;
DWORD GetTime(LPSYSTEMTIME pTimeDest)const;
(2)月历控件
颜色的设置
在CMonthCalCtrl中,成员函数GetColor和SetColor是用来获取或设置月历控件的有关颜色的,
其定义同DTP控件的同名函数。
设置或获取今天的日期
在CMonthCalCtrl中,成员函数GetToday和SetToday是用来获取或设置月历控件的今
天日期的。其函数原型如下:
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);
设置或获取当前选择项
在CMonthCalCtrl中,成员函数GetCurSel和SetCurSel是用来获取或设置月历控件当
前选择项的。其函数原型如下:
BOOL GetCurSel(COleDateTime& refDateTime)const;
BOOL GetCurSel(CTime& refDateTime)const;
BOOL GetCurSel(LPSYSTEMTIME pDateTime)const;
BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL GetCurSel(const CTime& refDateTime);
BOOL GetCurSel(const LPSYSTEMTIME pDateTime);
三、通知消息
DTP控件的通知消息有:
|
DTN_DROPDOWN |
DTP控件中的月历控件将要显示。 |
|
DTN_CLOSEUP |
DTP控件中的月历控件将要关闭。 |
|
DTN_DATETIMECHANGEDTP |
控件中的内容已发生改变。 |
|
DTN_FORMAT |
文本需要显示在回调域中。 |
|
DTN_FORMATQUERY |
文本显示所需最大尺寸。 |
|
DTN_USERSTRING |
用户已完成DTP控件的编辑。 |
|
DTN_WMKEYDOWN |
用户单击回调域。 |
月历控件的通知消息有:
|
MCN_GETDAYSTATE |
获得日期的定制风格。 |
|
MCN_SELCHANGE |
当前选择项已被改变。 |
|
MCN_SELECT |
在月历控件中选择一个日期。 |
|
NM_RELEASEDCAPTURE |
释放鼠标的捕获消息。 |
以上这些消息均可用ClassWizard加以映射。