共用方式為


關於月曆控件

月曆控件會實作類似行事曆的用戶介面。 這可讓使用者以非常直覺且可辨識的方法輸入或選取日期。 控制項也提供應用程式的方法,以使用現有的數據類型取得和設定控制項中的日期資訊。

月曆控件功能

下列螢幕快照顯示已調整為顯示兩個月的月曆控件。

月曆控件的對話框螢幕截圖,顯示兩個月份,並排顯示

注意

月曆控件的外觀和行為在運行時間連結庫的不同版本下稍有不同。 本主題著重於控制項在 Windows Vista 中的呈現方式,以及第 6 版 Comctl32.dll的應用。

 

圖中的控制項具有下列選擇性功能。

  • 目前的日期會顯示在控制項底部的單獨一行上。 這是預設樣式。
  • “今日圓圈” (實際上在這個版本中是設計成矩形) 會出現在目前日期周圍,並在 “今日” 線條旁邊作為視覺提示。 這是預設樣式。
  • 星期數會顯示在每一個數據列的左邊。 必須指定此樣式。
  • 根據應用程式所設定的日期狀態,某些日期會以粗體顯示。 例如,已排程會議的日期可能會以粗體顯示。 必須指定此樣式。

注意

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

月曆控件是以 1753 年引進的公曆為基礎。 它不會計算與 1753 之前使用中的 Julian 日曆一致的日期。

 

選取一天

根據預設,當使用者按兩下月曆控件左上角或右上方的箭號按鈕時,控件會更新其顯示,以顯示上一個或下個月。 使用者也可以點選在第一個月之前和最後一個月之後顯示的部分月份來執行相同的動作。

下列鍵盤命令也可用來移動選取範圍。 行事曆一律會視需要卷動以顯示選取的日期。 (資料表中會顯示 虛擬金鑰碼

命令 描述
左箭頭(VK_LEFT) 選取前一天。
向右箭號 (VK_RIGHT) 選取第二天。
向上方向鍵 (VK_UP) 選取前一周的同一天。
向下箭號(VK_DOWN) 在下周選取同一天。
上一頁(VK_PRIOR) 選取上一個月的同一天。 (如果該月沒有日期,則會選取最接近的日期;例如,選取範圍會從 3 月 31 日移至 2 月 28 日或 29 日。
下一頁 (VK_NEXT) 在下個月中選取同一天。
首頁 (VK_HOME) 選取目前月份的第一天。
END(VK_END) 選取目前月份的最後一天。
CTRL + Home鍵 向後捲動一個月,然後選取最左邊數據行中的一天。
CTRL + END 向前捲動一個月,然後選取最右邊數據行中的一天。
CTRL + PAGE UP 選取前一個月中的同一天。 選取範圍所移動的月份數是 控件中顯示的月數。 例如,如果顯示兩個月,選取範圍會從 6 月 6 日移至 5 月 6 日。
CTRL + 向下頁 選取前一個月中的同一天。 選取範圍所移動的月份數是 控件中顯示的月數。 例如,如果顯示兩個月,選取範圍會從 6 月 6 日移至 8 月 6 日。

 

如果月曆控件未使用 MCS_NOTODAY 樣式,使用者可以按下控件底部的 [今日] 文字,返回目前日期。 如果看不到目前日期,控件會更新其顯示以顯示它。

應用程式可以使用 MCM_SETMONTHDELTA 訊息或對應的巨集來變更控件更新其顯示的月數,MonthCal_SetMonthDelta。 不過,不論顯示的月份數或 MCM_SETMONTHDELTA所設定的值為何,PAGE UP 和 PAGE DOWN 鍵都會將選取的月份變更為一。

選取非相鄰月份

當使用者按兩下顯示月份的名稱時,年份中的所有月份都會列出(在舊版中,這是彈出視窗)。 用戶可以選取清單中的月份。 如果使用者的選取範圍不可見,月曆控件會捲動其顯示以顯示所選月份。 在下列螢幕快照中,月曆控件會顯示兩個相鄰年份的月份。

顯示 2007 年和 2008 年所有月曆控件的對話框螢幕快照

選擇不同的年份

如果使用者按兩下年份,就會列出一組年份,而且使用者可以選取不同的年份,如下列螢幕快照所示。

顯示從 1999 年到 2020 年所有年份的月曆控件螢幕快照

地方化

月曆控件會從LOCALE_USER_DEFAULT取得其格式和所有字串。

月份日曆時間控件

月曆控件不會顯示時間。 不過,用來設定和擷取選取的日期或今天的日期的 SYSTEMTIME 結構包含時間欄位。 以程式設計方式設定日期時,控件會複製時間欄位,或先加以驗證,如果無效,則會儲存目前的默認時間。 以下是設定日期的訊息清單,以及時間字段處理方式的描述。

消息 描述
MCM_SETCURSEL 控件會複製時間欄位,而不需驗證或修改。
MCM_SETRANGE 傳入之結構的時間欄位會經過驗證。 如果它們有效,則會在不修改的情況下複製時間欄位。 如果無效,控制項會從當天的數據複製時間欄位。
MCM_SETSELRANGE 傳入之結構的時間欄位會經過驗證。 如果它們有效,則會在不修改的情況下複製時間欄位。 如果無效,控件會保留目前選取範圍中的時間欄位。
MCM_SETTODAY 控件會複製時間欄位,而不需驗證或修改。

 

從控件擷取日期時,時間字段將會從預存時間複製,而不需要修改。 控件對時間欄位的處理旨在為程式設計人員提供便利。 控件除了上述作業之外,不會因任何其他作業檢查或修改時間欄位。