(7)MFC中的時間控件CDateTimeCtrl


在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

指定月歷控件中要設置顏色的部位,它可以是下列值之一

MCSC_BACKGROUND

設置在月份之間的背景色。

MCSC_MONTHBK

設置月份中的背景色。

MCSC_TEXT

設置月份中的文本色。

MCSC_TITLEBK

設置月歷題頭背景色。

MCSC_TITLETEXT

設置月歷題頭文本色。

MCSC_TRAILINGTEXT

設置當月份向前后翻頁時,與今日相同的日期的顏色。

 

 

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加以映射。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM