Share via


關於日期和時間選擇器控制件

日期和時間選擇器 (DTP) 控制項提供簡單且直覺的介面,用來與使用者交換日期和時間資訊。 例如,使用 DTP 控制件,您可以要求使用者輸入日期,然後輕鬆地擷取選取範圍。

我們將討論下列主題:

注意

Windows 不支援 1601 之前的日期。 如需詳細資訊, 請參閱 FILETIME 結構。

控件是以 1753 年引進的公曆為基礎。 它不會計算與朱利安歷一致的日期。

日期和時間選擇器用戶介面

日期和時間選擇器 (DTP) 控制的工作區會顯示日期或時間資訊,或兩者,並做為使用者修改資訊的介面。 您可以從行事曆選取日期,或使用向上控件;您可以輸入控制件格式 字串所定義的欄位來變更時間。 選擇性地,控件會顯示複選框。 檢查時,可以擷取控件中的值;否則,控件會被視為未初始化。

下圖顯示包含三個日期選擇器控件的視窗。 第一個日期選擇器控件是使用 DTS_SHOWNONE 樣式建立的,第二個是 具有DTS_UPDOWN 樣式,第三個則沒有特殊樣式。 在第三個控件中,使用者已按下向下箭號以顯示行事曆。

screen shot of a window that demonstrates three styles of date-picker controls

下圖顯示包含時間的三個控件的視窗。

第一個控件已使用 DTS_TIMEFORMAT 樣式建立,並顯示預設時間中的時間,其中包含四個字段。 用戶可以在這些欄位中輸入有效的值,或使用向上鍵或箭頭鍵來選取字段並變更值。

第二個控件會顯示使用 DateTime_SetFormat所設定的自定義格式。 如同第一個控件,用戶可以輸入或使用箭頭鍵來變更時間字段。 從使用者按一下向下箭號時開啟的行事曆中選取日期,即可變更一周的日期。

第三個控件會顯示如何將任意文字新增至 控件。 用戶可以輸入、使用箭頭鍵,或使用向上控件來選取一小時(從 1 到 24)。

screen shot of a window that shows three controls that contain the time

DTP 控制項會根據使用者的輸入自動更新內部資訊。 控件會將下列內容辨識為有效的輸入。

輸入類別 描述
方向鍵 控件接受箭頭鍵來巡覽控件中的欄位並變更值。 使用者可以按下 或 鍵來移動控件 如果用戶嘗試以指定方向移動最後一個字段,鍵盤焦點會「四處換行」到控件對面的字段。 和索引鍵會以累加方式變更目前欄位中的值。
結束和首頁 控件會接受VK_END和VK_HOME虛擬索引鍵,將目前字段中的值分別變更為其上限和下限。
功能鍵 金鑰會啟動編輯模式。 機碼會讓控件顯示下拉式月曆控件(按下也這樣做)。
數字 控制件接受兩個字元區段中的數值輸入。 如果使用者輸入的值無效(例如將月份設定為 14),控件會拒絕它,並將顯示重設為先前的值。
加號和減號 控件會接受數字鍵台中的VK_ADD和VK_SUBTRACT虛擬索引鍵,以遞增和遞減目前字段中的值。

 

不使用DTS_UPDOWN樣式的 DTP 控件會顯示箭頭按鈕。 如果使用者按下此按鈕,月曆控件就會下拉式清單。 用戶可以按下行事曆的區域來選取特定日期。

日期和時間選擇器控件樣式和格式

日期和時間選擇器 (DTP) 控制項有數 個日期和時間選擇器控件樣式 ,可決定控件的外觀和行為。 使用 CreateWindowEx dwStyle 參數建立控件時,指定樣式。 若要在建立控件之後擷取或變更窗口樣式,請使用 GetWindowLongSetWindowLong。

默認格式

有三種預設格式可用來顯示日期,一種用於顯示時間。 選擇下列其中一個視窗樣式來設定這些格式。

格式 描述
DTS_LONGDATEFORMAT 顯示看起來會像:「1996年4月19日星期五」。。
DTS_SHORTDATEFORMAT 顯示看起來會像“4/19/96”。
DTS_SHORTDATECENTURYFORMAT 5.80 版。 顯示看起來會像“4/19/1996”。
DTS_TIMEFORMAT 顯示看起來會像:「下午 5:31:42」。

 

自訂格式

DTP 控制檔依賴格式字串來判斷其顯示資訊欄位的方式。 如果預設格式不夠,您可以藉由定義自己的格式字串來建立自定義格式。 自訂格式可為應用程式提供更大的彈性。 它們可讓您指定控件顯示資訊欄位的順序。 您可以包含內文文字,以及使用者要求資訊的回呼欄位。 建立字串之後,您可以使用DTM_SETFORMAT訊息將它指派給 DTP 控件

格式字串

DTP 格式字串是由一系列元素所組成,這些元素代表特定資訊片段並定義其顯示格式。 元素會依格式字串顯示的順序來顯示。

日期和時間格式專案將會取代為實際的日期和時間。 這些字元是由下列字元群組所定義。

元素 描述
"d" 一位數或兩位數的日期。
"dd" 兩位數的日期。 單一位數的日值前面會加上零。
"ddd" 三個字元的工作日縮寫。
"dddd" 完整的工作日名稱。
"h" 12 小時格式的一位數或兩位數小時。
"hh" 12 小時格式的兩位數小時。 單一位數的值前面會加上零。
"H" 24 小時格式的一位數或兩位數小時。
"HH" 24 小時格式的兩位數小時。 單一位數的值前面會加上零。
"m" 一位數或兩位數的分鐘。
"mm" 兩位數的分鐘。 單一位數的值前面會加上零。
"M" 一位數或兩位數的月份號碼。
"MM" 兩位數的月份數位。 單一位數的值前面會加上零。
"MMM" 三個字元的月份縮寫。
"MMMM" 完整月份名稱。
"t" 一個字母的AM/PM縮寫(也就是AM會顯示為 “A”。
"tt" 兩個字母的AM/PM縮寫(也就是AM會顯示為 “AM”。
"yy" 年份的最後兩位數(也就是 1996 年會顯示為 “96”。
"yyyy" 全年(即1996年將顯示為“1996年”。

 

若要讓資訊更容易閱讀,您可以藉由以單引弧括住文字,將本文新增至格式字串。 空格和標點符號不需要加上引號。

注意

未以單引號分隔的非格式字元會導致 DTP 控件無法預測顯示。

例如,若要顯示目前日期的格式為 “'Today is: 04:22:31 Tuesday Mar 23, 1996”,格式字符串為 “'Today is: 'hh':'m':'s ddd MMM dd', 'yyyy”。 若要在本文中包含單引號,請使用兩個連續的單引號。 例如,“別忘了 MMM dd',' yyyy” 會產生如下所示的輸出:別忘了 1996 年 3 月 23 日。 不需要搭配逗號使用引號,因此“別忘了 MMM dd, yyyyy” 也是有效的,而且會產生相同的輸出。

回呼欄位

除了標準 格式字串 和內文文字之外,您也可以將顯示 的某些部分定義為回呼欄位。 這些欄位可用來查詢使用者以取得資訊。 若要宣告回呼欄位,請在格式字串的任何位置包含一或多個 「X」 字元 (ASCII Code 88)。 您可以重複 「X」 字元,以建立具有唯一身分識別的回呼字段。 因此,格式字串 「XX dddd MMM dd』, 'yyy XXX“ 包含兩個唯一的回呼字段 ”XX“ 和 ”XXX“。 與其他 DTP 控件欄位一樣,回呼欄位會根據格式字串中的位置,以由左至右的順序顯示。

當 DTP 控制項剖析格式字串並遇到回呼欄位時,它會傳送 DTN_FORMATDTN_FORMATQUERY 通知碼。 對應至回呼欄位的格式字串專案會包含在通知中,以允許接收應用程式判斷要查詢的回呼字段。 控件的擁有者必須回應這些通知,以確保正確顯示自定義資訊。

日期和時間選擇器控制通知訊息

日期和時間選擇器 (DTP) 控制者會在收到使用者輸入或處理程式並回應回呼欄位時傳送通知碼。 控件的父代會以WM_NOTIFY訊息的形式接收這些通知碼。

下列通知碼會與 DTP 控制項搭配使用。

通知程序代碼 描述
DTN_CLOSEUP 表示即將移除下拉式月曆。
DTN_DATETIMECHANGE 發出 DTP 控制件內變更的訊號。
DTN_DROPDOWN 表示下拉式月曆即將顯示。
DTN_FORMAT 要求文字以描述為回呼欄位的格式字串部分顯示。
DTN_FORMATQUERY 要求回呼欄位中所顯示文字大小上限的相關信息。
DTN_USERSTRING 通知控制項中使用者編輯作業的結尾。 此通知只會由使用DTS_APPCANPARSE樣式的 DTP 控件傳送。
DTN_WMKEYDOWN 表示使用者在 DTP 控制件的回呼欄位中按下按鍵。

 

日期和時間選擇器控件參考