在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用短格式顯示日期,如“99-6-22"。 |
|
| 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加以映射。
