共用方式為


CMonthCalCtrl 類別

封裝月曆控制項的功能。

語法

class CMonthCalCtrl : public CWnd

成員

公用建構函式

名稱 描述
CMonthCalCtrl::CMonthCalCtrl 建構 CMonthCalCtrl 物件。

公用方法

名稱 描述
CMonthCalCtrl::Create 建立月曆控件,並將它附加至 CMonthCalCtrl 物件。
CMonthCalCtrl::GetCalendarBorder 擷取目前月曆控件框線的寬度。
CMonthCalCtrl::GetCalendarCount 擷取目前月曆控件中顯示的行事曆數目。
CMonthCalCtrl::GetCalendarGridInfo 擷取目前月曆控件的相關信息。
CMonthCalCtrl::GetCalID 擷取目前月曆控件的行事曆標識碼。
CMonthCalCtrl::GetColor 取得月曆控件指定區域的色彩。
CMonthCalCtrl::GetCurrentView 擷取目前月曆控件所顯示的檢視。
CMonthCalCtrl::GetCurSel 擷取系統時間,如目前選取的日期所指示。
CMonthCalCtrl::GetFirstDayOfWeek 取得要顯示在行事曆最左邊數據行的星期的第一天。
CMonthCalCtrl::GetMaxSelCount 擷取可在月曆控件中選取的目前最大天數。
CMonthCalCtrl::GetMaxTodayWidth 擷取目前月曆控件的 “Today” 字串寬度上限。
CMonthCalCtrl::GetMinReqRect 擷取在月曆控件中顯示完整月份所需的最小大小。
CMonthCalCtrl::GetMonthDelta 擷取月曆控件的捲動速率。
CMonthCalCtrl::GetMonthRange 擷取日期資訊,代表月曆控件的顯示上限和低限。
CMonthCalCtrl::GetRange 擷取月份行事歷控件中設定的目前最小和最大日期。
CMonthCalCtrl::GetSelRange 擷取日期資訊,代表使用者目前選取之日期範圍的上限和下限。
CMonthCalCtrl::GetToday 擷取指定為月曆控件之 「today」 日期的日期資訊。
CMonthCalCtrl::HitTest 決定月份行事歷控件的哪個區段位於畫面上的指定點。
CMonthCalCtrl::IsCenturyView 指出目前月曆控件的目前檢視是否為世紀檢視。
CMonthCalCtrl::IsDecadeView 指出目前月曆控件的目前檢視是否為十年檢視。
CMonthCalCtrl::IsMonthView 指出目前月曆控件的目前檢視是否為月份檢視。
CMonthCalCtrl::IsYearView 指出目前月曆控件的目前檢視是否為年份檢視。
CMonthCalCtrl::SetCalendarBorder 設定目前月曆控件框線的寬度。
CMonthCalCtrl::SetCalendarBorderDefault 設定目前月曆控件框線的預設寬度。
CMonthCalCtrl::SetCalID 設定目前月曆控件的行事曆標識符。
CMonthCalCtrl::SetCenturyView 設定目前的月曆控件以顯示世紀檢視。
CMonthCalCtrl::SetColor 設定月曆控件指定區域的色彩。
CMonthCalCtrl::SetCurrentView 設定目前的月曆控件以顯示指定的檢視。
CMonthCalCtrl::SetCurSel 設定月份行事歷控件目前選取的日期。
CMonthCalCtrl::SetDayState 設定月曆控件中天數的顯示。
CMonthCalCtrl::SetDecadeView 將目前的月曆控件設定為十年檢視。
CMonthCalCtrl::SetFirstDayOfWeek 設定要顯示在行事曆最左邊數據行的星期數。
CMonthCalCtrl::SetMaxSelCount 設定可以在月曆控件中選取的天數上限。
CMonthCalCtrl::SetMonthDelta 設定月曆控件的捲動速率。
CMonthCalCtrl::SetMonthView 設定目前的月曆控件以顯示月份檢視。
CMonthCalCtrl::SetRange 設定月曆控件的最小和允許日期上限。
CMonthCalCtrl::SetSelRange 將月曆控件的選取範圍設定為指定的日期範圍。
CMonthCalCtrl::SetToday 設定目前日期的行事歷控件。
CMonthCalCtrl::SetYearView 將目前的月曆控件設定為年份檢視。
CMonthCalCtrl::SizeMinReq 將月曆控件重新繪成其最小、一個月的大小。
CMonthCalCtrl::SizeRectToMin 針對目前的月曆控件,計算可包含符合指定矩形之所有行事曆的最小矩形。

備註

月曆控件為使用者提供簡單的行事歷介面,用戶可以從中選取日期。 使用者可以透過下列方式變更顯示:

  • 往後和向前捲動,從月份到月。

  • 按兩下 [今日] 文字以顯示目前日期(如果未使用MCS_NOTODAY樣式)。

  • 從快捷功能表挑選一個月或一年。

您可以在建立月曆控件時,將各種樣式套用至 物件,以自定義月曆控件。 這些樣式會在 Windows SDK 的月曆控件樣式描述。

月曆控件可以顯示一個以上的月份,而且可以透過粗體顯示日期來表示特殊天數(例如假日)。

如需使用月曆控件的詳細資訊,請參閱 使用 CMonthCalCtrl

繼承階層架構

CObject

CCmdTarget

CWnd

CMonthCalCtrl

需求

標頭: afxdtctl.h

CMonthCalCtrl::CMonthCalCtrl

建構 CMonthCalCtrl 物件。

CMonthCalCtrl();

備註

您必須在建構 物件之後呼叫 Create

CMonthCalCtrl::Create

建立月曆控件,並將它附加至 CMonthCalCtrl 物件。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

virtual BOOL Create(
    DWORD dwStyle,
    const POINT& pt,
    CWnd* pParentWnd,
    UINT nID);

參數

dwStyle
指定套用至月曆控件的 Windows 樣式組合。 如需樣式的詳細資訊,請參閱 Windows SDK 中的月曆控件樣式

rect
RECT 結構的參考。 包含月曆控件的位置和大小。

pt
POINT 結構的參考,可識別月曆控件的位置。

pParentWnd
CWnd 物件的指標,該對像是月曆控件的父視窗。 它不得為 NULL。

nID
指定月曆控件的控件識別碼。

傳回值

如果初始化成功,則為非零;否則為 0。

備註

在兩個步驟中建立月曆控件:

  1. 呼叫 CMonthCalCtrl 以建構 CMonthCalCtrl 物件。

  2. 呼叫這個成員函式,此函式會建立月曆控件,並將它附加至 CMonthCalCtrl 物件。

當您呼叫 Create時,會初始化通用控件。 您呼叫的版本 Create 會決定其大小:

  • 若要讓 MFC 自動將控件大小調整為一個月,請呼叫使用 pt 參數的覆寫。

  • 若要自行調整控件的大小,請呼叫使用 rect 參數的此函式覆寫。

範例

// Given two member objects m_calCtrl1 and m_calCtrl2, we can
// create them in one of two ways.

// Providing a point has the control with its top-left corner
// at that point and sized automatically to show one month
// page.

CPoint pt(10, 10);
VERIFY(m_calCtrl1.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE |
                             WS_BORDER | MCS_DAYSTATE,
                         pt, this, IDC_MONTHCALCTRL1));

// Providing a rectangle lets us completely control the size.
// The control will paint as many complete month pages in the
// control's area as possible.

CRect rect(300, 100, 470, 200);
VERIFY(m_calCtrl2.Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE |
                             WS_BORDER | MCS_MULTISELECT,
                         rect, this, IDC_MONTHCALCTRL2));

CMonthCalCtrl::GetCalendarBorder

擷取目前月曆控件框線的寬度。

int GetCalendarBorder() const;

傳回值

控件框線的寬度,以像素為單位。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCALENDARBORDER 訊息。

CMonthCalCtrl::GetCalendarCount

擷取目前月曆控件中顯示的行事曆數目。

int GetCalendarCount() const;

傳回值

目前顯示在月曆控件中的行事曆數目。 允許的行事曆數目上限為12。

備註

這個方法會傳送 windows SDK 中所述的MCM_GETCALENDARCOUNT 訊息。

CMonthCalCtrl::GetCalendarGridInfo

擷取目前月曆控件的相關信息。

BOOL GetCalendarGridInfo(PMCGRIDINFO pmcGridInfo) const;

參數

pmcGridInfo
[out] MCGRIDINFO 結構的指標,該結構會接收目前月曆控件的相關信息。 呼叫端負責配置和初始化這個結構。

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCALENDARGRIDINFO 訊息。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例會 GetCalendarGridInfo 使用 方法來擷取目前月曆控件顯示的行事曆日期。

WCHAR name[26];
name[0] = _T('\0');
MCGRIDINFO gridInfo;
gridInfo.cbSize = sizeof(MCGRIDINFO);
gridInfo.dwPart = MCGIP_CALENDARHEADER;
gridInfo.dwFlags = MCGIF_NAME;
gridInfo.iCalendar = 0;
gridInfo.pszName = reinterpret_cast<PWSTR>(&name);
gridInfo.cchName = sizeof(name);

m_monthCalCtrl.GetCalendarGridInfo(&gridInfo);

CString str;
CString calendarDate(name);
str.Format(_T("Calendar date: '%s'"), calendarDate);
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::GetCalID

擷取目前月曆控件的行事曆標識碼。

CALID GetCalID() const;

傳回值

其中 一個行事曆標識子 常數。

備註

行事曆標識子代表區域特定的行事曆,例如公曆(本地化)、日文或回歷。 您的應用程式可以使用具有各種語言支援函式的行事曆標識符。

這個方法會 傳送 windows SDK 中所述的MCM_GETCALID 訊息。

CMonthCalCtrl::GetColor

擷取 nRegion指定月曆控件區域的色彩。

COLORREF GetColor(int nRegion) const;

參數

nRegion
從中擷取色彩的月曆控件區域。 如需值清單,請參閱 SetColornRegion 參數。

傳回值

如果 成功,則為 COLORREF 值,指定與月曆控件部分相關聯的色彩。 否則,這個成員函式會傳回 -1。

CMonthCalCtrl::GetCurrentView

擷取目前月曆控件所顯示的檢視。

DWORD GetCurrentView() const;

傳回值

目前的檢視,以下列其中一個值表示:

意義
MCMV_MONTH 每月檢視
MCMV_YEAR 年度檢視
MCMV_DECADE 十年檢視
MCMV_CENTURY 世紀檢視

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCURRENTVIEW 訊息。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例會報告目前顯示月曆控件的檢視。

CString str;
CString msg = _T("The current calendar displays %s view.");
DWORD view = m_monthCalCtrl.GetCurrentView();
switch (view)
{
case MCMV_MONTH:
   str.Format(msg, _T("month"));
   break;
case MCMV_YEAR:
   str.Format(msg, _T("year"));
   break;
case MCMV_DECADE:
   str.Format(msg, _T("decade"));
   break;
case MCMV_CENTURY:
   str.Format(msg, _T("century"));
   break;
default:
   str.Format(msg, _T("an unknown"));
   break;
}
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::GetCurSel

擷取系統時間,如目前選取的日期所指示。

BOOL GetCurSel(COleDateTime& refDateTime) const;  BOOL GetCurSel(CTime& refDateTime) const;

BOOL GetCurSel(LPSYSTEMTIME pDateTime) const;

參數

refDateTime
COleDateTime 物件的參考CTime 物件。 接收目前的時間。

pDateTime
將接收目前選取日期資訊的SYSTEMTIME結構的指標。 此參數必須是有效的位址,而且不能是 NULL。

傳回值

如果成功,則為非零;otherwize 0。

備註

此成員函式會實作 Win32 訊息 MCM_GETCURSEL的行為,如 Windows SDK 中所述。

注意

如果設定樣式MCS_MULTISELECT,則此成員函式會失敗。

在 MFC 的 實 GetCurSel作中,您可以指定 COleDateTime 使用量、 CTime 使用量或 SYSTEMTIME 結構使用方式。

CMonthCalCtrl::GetFirstDayOfWeek

取得要顯示在行事曆最左邊數據行的星期的第一天。

int GetFirstDayOfWeek(BOOL* pbLocal = NULL) const;

參數

pbLocal
BOOL 值的指標。 如果值不是零,控件的設定不符合控制面板中的設定。

傳回值

整數值,表示一周的第一天。 如需這些整數代表的詳細資訊,請參閱 <備註 >。

備註

此成員函式會實作 Win32 訊息 MCM_GETFIRSTDAYOFWEEK的行為,如 Windows SDK 中所述。 星期幾會以整數表示,如下所示。

星期幾
0 星期一
1 Tuesday
2 星期三
3 Thursday
4 星期五
5 星期六
6 星期日

範例

請參閱 CMonthCalCtrl::SetFirstDayOfWeek 的範例

CMonthCalCtrl::GetMaxSelCount

擷取可在月曆控件中選取的目前最大天數。

int GetMaxSelCount() const;

傳回值

整數值,表示可以為控件選取的天數總數。

備註

此成員函式會實作 Win32 訊息 MCM_GETMAXSELCOUNT的行為,如 Windows SDK 中所述。 將此成員函式用於具有MCS_MULTISELECT樣式集的控制件。

範例

請參閱 CMonthCalCtrl::SetMaxSelCount 的範例

CMonthCalCtrl::GetMaxTodayWidth

擷取目前月曆控件的 “Today” 字串寬度上限。

DWORD GetMaxTodayWidth() const;

傳回值

“Today” 字串的寬度,以像素為單位。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例示範 GetMaxTodayWidth 方法。

DWORD width = m_monthCalCtrl.GetMaxTodayWidth();
CString str;
str.Format(_T("The maximum today width is %d."), width);
AfxMessageBox(str, MB_ICONINFORMATION);

備註

用戶可以按下月曆控件底部顯示的 「Today」 字串,返回目前日期。 “Today” 字串包含標籤文字和日期文字。

這個方法會 傳送 windows SDK 中所述的 MCM_GETMAXTODAYWIDTH訊息。

CMonthCalCtrl::GetMinReqRect

擷取在月曆控件中顯示完整月份所需的最小大小。

BOOL GetMinReqRect(RECT* pRect) const;

參數

pRect
將接收周框資訊的 RECT 結構的指標。 此參數必須是有效的位址,而且不能是 NULL。

傳回值

如果成功,此成員函式會傳回非零,並 lpRect 接收適用的界限資訊。 如果失敗,成員函式會傳回 0。

備註

此成員函式會實作 Win32 訊息 MCM_GETMINREQRECT的行為,如 Windows SDK 中所述。

CMonthCalCtrl::GetMonthDelta

擷取月曆控件的捲動速率。

int GetMonthDelta() const;

傳回值

月曆控件的捲動速率。 捲動速率是當使用者按兩下滾動按鈕一次時,控件移動其顯示月份數。

備註

此成員函式會實作 Win32 訊息 MCM_GETMONTHDELTA的行為,如 Windows SDK 中所述。

CMonthCalCtrl::GetMonthRange

擷取日期資訊,代表月曆控件的顯示上限和低限。

int GetMonthRange(
    COleDateTime& refMinRange,
    COleDateTime& refMaxRange,
    DWORD dwFlags) const;

int GetMonthRange(
    CTime& refMinRange,
    CTime& refMaxRange,
    DWORD dwFlags) const;

int GetMonthRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange,
    DWORD dwFlags) const;

參數

refMinRange
COleDateTime 或 CTime 物件的參考,包含允許的最小日期。

refMaxRange
CTime 對象的參考COleDateTime,包含允許的最大日期。

pMinRange
SYSTEMTIME 結構的指標,包含範圍最低端的日期。

pMaxRange
結構的指標 SYSTEMTIME ,包含範圍最結尾處的日期。

dwFlags
值,指定要擷取的範圍限制。 此值必須是下列其中一項。

意義
GMR_DAYSTATE 包含僅部分顯示之可見範圍的前置和尾端月份。
GMR_VISIBLE 只包含完全顯示的月份。

傳回值

整數,代表範圍,以月份為單位,以第一個和第二個版本 refMinRange 和 refMaxRange 表示的兩個限制,或第三個版本的 pMinRange 和 pMaxRange 所表示的兩個限制。

備註

此成員函式會實作 Win32 訊息 MCM_GETMONTHRANGE的行為,如 Windows SDK 中所述。 在 MFC 的 實 GetMonthRange作中,您可以指定 COleDateTime 使用方式、 CTime 使用方式或 SYSTEMTIME 結構使用方式。

範例

請參閱 CMonthCalCtrl::SetDayState 的範例

CMonthCalCtrl::GetRange

擷取月份行事歷控件中設定的目前最小和最大日期。

DWORD GetRange(
    COleDateTime* pMinRange,
    COleDateTime* pMaxRange) const;

DWORD GetRange(
    CTime* pMinRange,
    CTime* pMaxRange) const;

DWORD GetRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange) const;

參數

pMinRange
對象、CTime物件或 SYSTEMTIME 結構的指標COleDateTime,包含範圍最低端的日期。

pMaxRange
對象、CTime物件或 SYSTEMTIME 結構的指標COleDateTime,包含範圍最結尾的日期。

傳回值

可以是零的 DWORD(未設定任何限制)或指定限制資訊的下列值組合。

意義
GDTR_MAX 控件已設定上限; pMaxRange 有效且包含適用的日期資訊。
GDTR_MIN 控件設定了最小限制; pMinRange 有效且包含適用的日期資訊。

備註

此成員函式會實作 Win32 訊息MCM_GETRANGE的行為,如 Windows SDK 中所述。 在 MFC 的 實 GetRange作中,您可以指定 COleDateTime 使用量、 CTime 使用量或 SYSTEMTIME 結構使用方式。

範例

// This code fragment sets a variety of ranges in the
// control, and calls a separate function to show the
// set range to the user.

void CMonthCalDlg::OnBnClickedRangebutton()
{
   // set minimum of January 1st, 1995 with no maximum
   COleDateTime dtMin;
   COleDateTime dtMax;

   dtMin = COleDateTime(1995, 1, 1, 0, 0, 0);
   dtMax.SetStatus(COleDateTime::null);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);

   // set no minimum and a maximum of September 30th, 1997
   dtMin.SetStatus(COleDateTime::null);
   dtMax = COleDateTime(1997, 9, 30, 0, 0, 0);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);

   // set minimum of April 15, 1992 and maximum of June 5, 2002
   dtMin = COleDateTime(1992, 4, 15, 0, 0, 0);
   dtMax = COleDateTime(2002, 6, 5, 0, 0, 0);
   m_calCtrl1.SetRange(&dtMin, &dtMax);
   ShowRange(&m_calCtrl1);
}

void CMonthCalDlg::ShowRange(CMonthCalCtrl *pMoCalCtrl)
{
   ASSERT(pMoCalCtrl != NULL);
   CString strMessage;
   COleDateTime dtMinimum;
   COleDateTime dtMaximum;

   // Get the range
   DWORD dwResult = pMoCalCtrl->GetRange(&dtMinimum, &dtMaximum);

   // If a minimum was specified, format it
   // otherwise, indicate that there is no lower bound
   if (dwResult & GDTR_MIN)
      strMessage += dtMinimum.Format(_T("Minimum range is %x %X.\r\n"));
   else
      strMessage += _T("No minimum range.\r\n");

   // Treat maximum similarly
   if (dwResult & GDTR_MAX)
      strMessage += dtMaximum.Format(_T("Maximum range is %x %X.\r\n"));
   else
      strMessage += _T("No maximum range.\r\n");

   // Show the user
   AfxMessageBox(strMessage);
}

CMonthCalCtrl::GetSelRange

擷取日期資訊,代表使用者目前選取之日期範圍的上限和下限。

BOOL GetSelRange(
    COleDateTime& refMinRange,
    COleDateTime& refMaxRange) const;

BOOL GetSelRange(
    CTime& refMinRange,
    CTime& refMaxRange) const;

BOOL GetSelRange(
    LPSYSTEMTIME pMinRange,
    LPSYSTEMTIME pMaxRange) const;

參數

refMinRange
COleDateTime 或 CTime 物件的參考,包含允許的最小日期。

refMaxRange
CTime 對象的參考COleDateTime,包含允許的最大日期。

pMinRange
SYSTEMTIME 結構的指標,包含範圍最低端的日期。

pMaxRange
結構的指標 SYSTEMTIME ,包含範圍最結尾處的日期。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息 MCM_GETSELRANGE的行為,如 Windows SDK 中所述。 GetSelRange 如果套用至未使用MCS_MULTISELECT樣式的月曆控件,將會失敗。

在 MFC 的 實 GetSelRange作中,您可以指定 COleDateTime 使用方式、 CTime 使用方式或 SYSTEMTIME 結構使用方式。

CMonthCalCtrl::GetToday

擷取指定為月曆控件之 「today」 日期的日期資訊。

BOOL GetToday(COleDateTime& refDateTime) const;  BOOL GetToday(COleDateTime& refDateTime) const;

BOOL GetToday(LPSYSTEMTIME pDateTime) const;

參數

refDateTime
指出目前日期之 COleDateTime 或 CTime 對象的參考。

pDateTime
將接收日期資訊的SYSTEMTIME結構的指標。 此參數必須是有效的位址,而且不能是 NULL。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息MCM_GETTODAY的行為,如 Windows SDK 中所述。 在 MFC 的 實 GetToday作中,您可以指定 COleDateTime 使用量、 CTime 使用量或 SYSTEMTIME 結構使用方式。

範例

void CMonthCalDlg::OnBnClickedGettodaybutton()
{
   COleDateTime timeToday;
   if (m_calCtrl1.GetToday(timeToday))
   {
      // Format the date information from the value we received
      // and post a message box about it.
      CString str = timeToday.Format(VAR_DATEVALUEONLY);
      AfxMessageBox(str);

      // Set the control's "today" indicator to be five
      // days previous.
      timeToday -= 5;
      m_calCtrl1.SetToday(timeToday);
   }
   else
   {
      // Something is wrong!
      ASSERT(FALSE);
   }
}

CMonthCalCtrl::HitTest

判斷哪個月曆控件,如果有的話,位於指定的位置。

DWORD HitTest(PMCHITTESTINFO pMCHitTest);

參數

pMCHitTest
MCHITTESTINFO 結構的指標,其中包含月曆控件的點擊測試點。

傳回值

DWORD 值。 等於 結構的 uHit 成員 MCHITTESTINFO

備註

HitTest 會使用 MCHITTESTINFO 結構,其中包含點擊測試的相關信息。

CMonthCalCtrl::IsCenturyView

指出目前月曆控件的目前檢視是否為世紀檢視。

BOOL IsCenturyView() const;

傳回值

如果目前檢視是世紀檢視,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCURRENTVIEW 訊息。 如果該訊息傳回MCMV_CENTURY,這個方法會傳回 TRUE。

CMonthCalCtrl::IsDecadeView

指出目前月曆控件的目前檢視是否為十年檢視。

BOOL IsDecadeView() const;

傳回值

如果目前的檢視是十年檢視,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCURRENTVIEW 訊息。 如果該訊息傳回MCMV_DECADE,這個方法會傳回 TRUE。

CMonthCalCtrl::IsMonthView

指出目前月曆控件的目前檢視是否為月份檢視。

BOOL IsMonthView() const;

傳回值

如果目前檢視是月份檢視,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCURRENTVIEW 訊息。 如果該訊息傳回MCMV_MONTH,這個方法會傳回 TRUE。

CMonthCalCtrl::IsYearView

指出目前月曆控件的目前檢視是否為年份檢視。

BOOL IsYearView() const;

傳回值

如果目前檢視是年份檢視,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_GETCURRENTVIEW 訊息。 如果該訊息傳回MCMV_YEAR,這個方法會傳回 TRUE。

CMonthCalCtrl::SetCalendarBorder

設定目前月曆控件框線的寬度。

void SetCalendarBorder(int cxyBorder);

參數

cxyBorder
[in]框線的寬度,以像素為單位。

備註

如果此方法成功,框線寬度會設定為 cxyBorder 參數。 否則,框線寬度會重設為目前 主題所指定的預設值,如果未使用主題,則為零。

這個方法會 傳送 windows SDK 中所述的 MCM_SETCALENDARBORDER訊息。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例會將月曆控件的框線寬度設定為8圖元。 使用 CMonthCalCtrl::GetCalendarBorder 方法來判斷這個方法是否成功。

// Use the GetCalendarBorder() method to determine whether
// this method succeeded or failed.
m_monthCalCtrl.SetCalendarBorder(8);

CMonthCalCtrl::SetCalendarBorderDefault

設定目前月曆控件框線的預設寬度。

void SetCalendarBorderDefault();

備註

框線寬度會設定為目前 主題指定的預設值,如果未使用主題,則為零。

這個方法會 傳送 windows SDK 中所述的 MCM_SETCALENDARBORDER訊息。

CMonthCalCtrl::SetCalID

設定目前月曆控件的行事曆標識符。

BOOL SetCalID(CALID calid);

參數

calid
[in]其中 一個行事曆標識子 常數。

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

行事曆標識符會指定區域特定的行事曆,例如公曆(當地語系化)、日文或回歷。 SetCalID如果計算機上已安裝包含行事曆的地區設定,請使用 方法來顯示由 calid 參數指定的行事曆。

此方法會 傳送 windows SDK 中所述的MCM_SETCALID 訊息。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例會將月曆控件設定為顯示日本天皇紀元日曆。 SetCalID只有在您的電腦上安裝該行事歷時,方法才會成功。

BOOL rc = m_monthCalCtrl.SetCalID(CAL_JAPAN);
CString str = _T("Calendar change ");
;
if (rc == TRUE)
   str += _T("succeeded.");
else
{
   str += _T("failed.\n");
   str += _T("Perhaps this locale is not installed.");
}
AfxMessageBox(str, MB_ICONINFORMATION);

CMonthCalCtrl::SetCenturyView

設定目前的月曆控件以顯示世紀檢視。

BOOL SetCenturyView();

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

這個方法會使用 CMonthCalCtrl::SetCurrentView 方法,將檢視設定為 MCMV_CENTURY,代表世紀檢視。

CMonthCalCtrl::SetColor

設定月曆控件指定區域的色彩。

COLORREF SetColor(
    int nRegion,
    COLORREF ref);

參數

nRegion
整數值,指定要設定的月曆色彩。 此值可以是下列其中一項。

意義
MCSC_BACKGROUND 月份之間顯示的背景色彩。
MCSC_MONTHBK 月份內顯示的背景色彩。
MCSC_TEXT 用來在一個月內顯示文字的色彩。
MCSC_TITLEBK 行事曆標題中顯示的背景色彩。
MCSC_TITLETEXT 用來在行事曆標題內顯示文字的色彩。
MCSC_TRAILINGTEXT 用來顯示頁首和尾端文字的色彩。 標頭和尾端天數是出現在目前行事曆上之前個和後續月份的天數。

ref
月曆控件指定部分之新色彩設定的 COLORREF 值。

傳回值

COLORREF 值,如果成功,則表示月曆控件指定部分的上一個色彩設定。 否則,此訊息會傳回 -1。

備註

此成員函式會實作 Win32 訊息 MCM_SETCOLOR的行為,如 Windows SDK 中所述。

範例

// Set colors for title text and title background to match
// the Control Panel settings for inactive window captions.
m_calCtrl1.SetColor(MCSC_TITLETEXT, ::GetSysColor(COLOR_INACTIVECAPTIONTEXT));
m_calCtrl1.SetColor(MCSC_TITLEBK, ::GetSysColor(COLOR_INACTIVECAPTION));

CMonthCalCtrl::SetCurrentView

設定目前的月曆控件以顯示指定的檢視。

BOOL SetCurrentView(DWORD dwNewView);

參數

dwNewView
[in]下列其中一個值,指定每月、年度、十年或世紀檢視。

  • MCMV_MONTH:每月檢視
  • MCMV_YEAR:年度檢視
  • MCMV_DECADE:十年檢視
  • MCMV_CENTURY:世紀檢視

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的MCM_SETCURRENTVIEW 訊息。

CMonthCalCtrl::SetCurSel

設定月份行事歷控件目前選取的日期。

BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL SetCurSel(const CTime& refDateTime);
BOOL SetCurSel(const LPSYSTEMTIME pDateTime);

參數

refDateTime
COleDateTime 或 CTime 物件的參考,指出目前選取的月曆控件。

pDateTime
SYSTEMTIME 結構的指標,其中包含要設定為目前選取範圍的日期。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息 MCM_SETCURSEL的行為,如 Windows SDK 中所述。 在 MFC 的 實 SetCurSel作中,您可以指定 COleDateTime 使用量、 CTime 使用量或 SYSTEMTIME 結構使用方式。

範例

void CMonthCalDlg::OnBnClickedCurselbutton()
{
   // All of these calls set the current selection to March 15, 1998.

   // with a COleDateTime
   COleDateTime dt1(1998, 3, 15, 0, 0, 0);
   m_calCtrl1.SetCurSel(dt1);

   // with a CTime
   CTime dt2(1998, 3, 15, 0, 0, 0);
   m_calCtrl1.SetCurSel(dt2);

   // with a SYSTEMTIME structure

   SYSTEMTIME sysTime;

   // set everything to zero
   memset(&sysTime, 0, sizeof(sysTime));

   // except for the date we want
   sysTime.wYear = 1998;
   sysTime.wMonth = 3;
   sysTime.wDay = 15;

   m_calCtrl1.SetCurSel(&sysTime);
}

CMonthCalCtrl::SetDayState

設定月曆控件中天數的顯示。

BOOL SetDayState(
    int nMonths,
    LPMONTHDAYSTATE pStates);

參數

nMonths
值,指出 pStates 指向的陣列中有多少專案。

pStates
值的 MONTHDAYSTATE 陣列指標,定義月曆控件在其顯示中每天繪製的方式。 MONTHDAYSTATE 數據類型是位字段,其中每個位 (1 到 31) 代表一個月中的一天狀態。 如果位元是開啟的,則對應的日期會以粗體顯示;否則就不會強調其顯示。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息MCM_SETDAYSTATE的行為,如 Windows SDK 中所述。

範例

void CMonthCalDlg::OnBnClickedDaystatebutton()
{
   // First, we must find the visible range. The array we pass to the
   // SetDayState() function must be large enough to hold days for all
   // of the visible months. Even if a month is _partially_ visible,
   // we must have MONTHDAYSTATE data for it in the array we pass.
   // GetMonthRange() returns the range of days currently visible in
   // the control, along with a count of visible months. This array
   // will be up to 2 months larger than the number of "pages" visible
   // in the control.

   SYSTEMTIME timeFrom;
   SYSTEMTIME timeUntil;
   int nCount = m_calCtrl1.GetMonthRange(&timeFrom, &timeUntil, GMR_DAYSTATE);

   // Allocate the state array based on the return value.

   LPMONTHDAYSTATE pDayState;
   pDayState = new MONTHDAYSTATE[nCount];
   memset(pDayState, 0, sizeof(MONTHDAYSTATE) * nCount);

   // Find the first fully visible month.

   int nIndex = (timeFrom.wDay == 1) ? 0 : 1;

   // Set the 4th day, 19th day, and 26th day of the first
   // _fully_ visible month as bold.

   pDayState[nIndex] |= 1 << 3;  // 4th day
   pDayState[nIndex] |= 1 << 18; // 19th day
   pDayState[nIndex] |= 1 << 25; // 25th day

   // Set state and clean up

   VERIFY(m_calCtrl1.SetDayState(nCount, pDayState));
   delete[] pDayState;
}

CMonthCalCtrl::SetDecadeView

將目前的月曆控件設定為十年檢視。

BOOL SetDecadeView();

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

這個方法會使用 CMonthCalCtrl::SetCurrentView 方法,將檢視設定為 MCMV_DECADE,代表十年檢視。

CMonthCalCtrl::SetFirstDayOfWeek

設定要顯示在行事曆最左邊數據行的星期數。

BOOL SetFirstDayOfWeek(
    int iDay,
    int* lpnOld = NULL);

參數

iDay
整數值,表示哪一天要設定為星期的第一天。 此值必須是其中一天的數位。 如需日數的描述,請參閱 GetFirstDayOfWeek

lpnOld
整數的指標,表示先前設定的一周第一天。

傳回值

如果前一周的第一天設定為 LOCALE_IFIRSTDAYOFWEEK 以外的值,則為非零,也就是控制面板設定中所指出的日期。 否則,此函式會傳回 0。

備註

此成員函式會實作 Win32 訊息 MCM_SETFIRSTDAYOFWEEK的行為,如 Windows SDK 中所述。

範例

// This work isn't normally necessary, since the control will set
// the day of the week to match the system locale by itself.

// Ask the system for the first day of the week
TCHAR sz[2];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IFIRSTDAYOFWEEK, sz, 2);

// Convert from string result
int nFirstDay = _ttoi(sz);

// Set it and assert that it was successful.
m_calCtrl1.SetFirstDayOfWeek(nFirstDay);
ASSERT(m_calCtrl1.GetFirstDayOfWeek() == nFirstDay);

CMonthCalCtrl::SetMaxSelCount

設定可以在月曆控件中選取的天數上限。

BOOL SetMaxSelCount(int nMax);

參數

nMax
將設定為 表示可選取天數上限的值。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息 MCM_SETMAXSELCOUNT的行為,如 Windows SDK 中所述。

範例

// The control needs to have the MCS_MULTISELECT style
// for the following code to work.

// change the maximum selection count
m_calCtrl2.SetMaxSelCount(10);

// check that the change was really made
ASSERT(m_calCtrl2.GetMaxSelCount() == 10);

CMonthCalCtrl::SetMonthDelta

設定月曆控件的捲動速率。

int SetMonthDelta(int iDelta);

參數

iDelta
要設定為控件捲動速率的月數。 如果此值為零,則會將月份差異重設為預設值,也就是控件中顯示的月份數。

傳回值

先前的捲動速率。 如果先前尚未設定捲動速率,則傳回值為 0。

備註

此成員函式會實作 Win32 訊息 MCM_SETMONTHDELTA的行為,如 Windows SDK 中所述。

CMonthCalCtrl::SetMonthView

設定目前的月曆控件以顯示月份檢視。

BOOL SetMonthView();

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

這個方法會使用 CMonthCalCtrl::SetCurrentView 方法,將檢視設定為 MCMV_MONTH,代表月份檢視。

範例

第一個程式代碼範例會定義變數 ,該變數 m_monthCalCtrl用來以程式設計方式存取月曆控件。 下一個範例中會使用此變數。

// Variable used to reference the month calendar control.
CMonthCalCtrl m_monthCalCtrl;
// Variable used to reference the splitbutton control.
CSplitButton m_splitButton;

下一個程式代碼範例會將月曆控件設定為顯示月份、年份、十年和世紀檢視。

void CCMonthCalCtrl_s1Dlg::OnSetviewSetmonthview()
{
   m_monthCalCtrl.SetMonthView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetyearview()
{
   m_monthCalCtrl.SetYearView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetdecadeview()
{
   m_monthCalCtrl.SetDecadeView();
}

void CCMonthCalCtrl_s1Dlg::OnSetviewSetcenturyview()
{
   m_monthCalCtrl.SetCenturyView();
}

CMonthCalCtrl::SetRange

設定月曆控件的最小和允許日期上限。

BOOL SetRange(
    const COleDateTime* pMinRange,
    const COleDateTime* pMaxRange);

BOOL SetRange(
    const CTime* pMinRange,
    const CTime* pMaxRange);

BOOL SetRange(
    const LPSYSTEMTIME pMinRange,
    const LPSYSTEMTIME pMaxRange);

參數

pMinRange
對象、CTime物件或 SYSTEMTIME 結構的指標COleDateTime,包含範圍最低端的日期。

pMaxRange
物件的指標 COleDateTimeCTime 對象或 SYSTEMTIME 結構,包含範圍最結尾的日期。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息MCM_SETRANGE的行為,如 Windows SDK 中所述。 在 MFC 的 實 SetRange作中,您可以指定 COleDateTime 使用方式、 CTime 使用方式或 SYSTEMTIME 結構使用方式。

範例

請參閱 CMonthCalCtrl::GetRange 的範例

CMonthCalCtrl::SetSelRange

將月曆控件的選取範圍設定為指定的日期範圍。

BOOL SetSelRange(
    const COleDateTime& pMinRange,
    const COleDateTime& pMaxRange);

BOOL SetSelRange(
    const CTime& pMinRange,
    const CTime& pMaxRange);

BOOL SetSelRange(
    const LPSYSTEMTIME pMinRange,
    const LPSYSTEMTIME pMaxRange);

參數

pMinRange
對象、CTime物件或 SYSTEMTIME 結構的指標COleDateTime,包含範圍最低端的日期。

pMaxRange
物件的指標 COleDateTimeCTime 對象或 SYSTEMTIME 結構,包含範圍最結尾的日期。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式會實作 Win32 訊息 MCM_SETSELRANGE的行為,如 Windows SDK 中所述。 在 MFC 的 實 SetSelRange作中,您可以指定 COleDateTime 使用方式、 CTime 使用方式或 SYSTEMTIME 結構使用方式。

CMonthCalCtrl::SetToday

設定目前日期的行事歷控件。

void SetToday(const COleDateTime& refDateTime);
void SetToday(const CTime* pDateTime);
void SetToday(const LPSYSTEMTIME pDateTime);

參數

refDateTime
包含目前日期之 COleDateTime 物件的參考

pDateTime
在第二個版本中,CTime 物件的指標包含目前日期資訊。 第三個版本中,包含目前日期資訊的SYSTEMTIME結構的指標

備註

此成員函式會實作 Win32 訊息MCM_SETTODAY的行為,如 Windows SDK 中所述。

範例

請參閱 CMonthCalCtrl::GetToday範例。

CMonthCalCtrl::SetYearView

將目前的月曆控件設定為年份檢視。

BOOL SetYearView();

傳回值

如果此方法成功,則為TRUE;否則為 FALSE。

備註

此方法會使用 CMonthCalCtrl::SetCurrentView 方法,將檢視設定為 MCMV_YEAR,代表年度檢視。

CMonthCalCtrl::SizeMinReq

將月曆控件顯示為顯示一個月的最小大小。

BOOL SizeMinReq(BOOL bRepaint = TRUE);

參數

bRepaint
指定控制項是否要重新繪製。 根據預設,TRUE。 如果為 FALSE,則不會發生重繪。

傳回值

如果月曆控件的大小調整為最小值,則為非零;否則為 0。

備註

呼叫 SizeMinReq 成功會顯示一個月行事曆的整個月曆控件。

CMonthCalCtrl::SizeRectToMin

針對目前的月曆控件,計算可包含符合指定矩形之所有行事曆的最小矩形。

LPRECT SizeRectToMin(LPRECT lpRect);

參數

lpRect
[in] RECT 結構的指標,定義包含所需行事曆數目的矩形。

傳回值

RECT 結構的指標,其大小小於或等於 lpRect 參數所定義的矩形。

備註

這個方法會計算 lpRect 參數所指定的矩形中可以容納多少個行事曆,然後傳回可包含該行事曆數目的最小矩形。 實際上,這個方法會壓縮指定的矩形,以完全符合所需的行事曆數目。

這個方法會 傳送 windows SDK 中所述的MCM_SIZERECTTOMIN 訊息。

另請參閱

MFC 範例CMNCTRL1
CWnd 類別
階層架構圖表
CDateTimeCtrl 類別