共用方式為


關於月曆控件

月曆控件會實作類似行事曆的用戶介面。 這提供使用者一個用於輸入或選取日期之非常直接易懂和辨識的方法。 藉由使用現有的資料類型,控制項也提供應用程式取得和設定控制項中日期資訊的方法。

月曆控件功能

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

screen shot of a dialog box with a month calendar control showing two months, side by side

注意

月曆控件的外觀和行為在運行時間連結庫的不同版本下稍有不同。 本主題著重於控件,因為它出現在 Windows Vista 中,版本 6 為 Comctl32.dll。

 

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

  • 目前的日期會顯示在控件底部的個別行上。 這是預設樣式。
  • “today circle” (實際上這個版本的矩形) 會出現在目前一天左右,並在 “Today” 線條旁邊顯示為視覺提示。 這是預設樣式。
  • 星期數會顯示在每一個數據列的左邊。 必須指定此樣式。
  • 根據應用程式所設定的日期狀態,某些日期會以粗體顯示。 例如,已排程會議的日期可能會以粗體顯示。 必須指定此樣式。

注意

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

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

 

選取一天

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

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

Command 描述
向左箭號 (VK_LEFT) 選取前一天。
向右箭號 (VK_RIGHT) 選取第二天。
向上箭號 (VK_UP) 選取前一周的同一天。
向下箭號 (VK_DOWN) 在下周選取同一天。
PAGE UP (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 鍵都會將選取的月份變更一次。

選取非雅德月

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

screen shot of a dialog box with a month calendar control showing all the months of 2007 and 2008

選取不同的年份

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

screen shot of a month calendar control showing all years from 1999 to 2020

當地語系化

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

月曆控件中的時間

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

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

 

從控件擷取日期時,時間字段將會從預存時間複製,而不需要修改。 控制件所處理的時間欄位是方便程式設計人員使用。 控件不會檢查或修改時間字段,因為上述作業以外的任何作業。