CMonthCalCtrl 類別
封裝月曆控制項的功能。
語法
class CMonthCalCtrl : public CWnd
成員
公用建構函式
名稱 | 描述 |
---|---|
CMonthCalCtrl::CMonthCalCtrl | 建構 CMonthCalCtrl 物件。 |
公用方法
備註
月曆控件為使用者提供簡單的行事歷介面,用戶可以從中選取日期。 使用者可以透過下列方式變更顯示:
往後和向前捲動,從月份到月。
按兩下 [今日] 文字以顯示目前日期(如果未使用MCS_NOTODAY樣式)。
從快捷功能表挑選一個月或一年。
您可以在建立月曆控件時,將各種樣式套用至 物件,以自定義月曆控件。 這些樣式會在 Windows SDK 的月曆控件樣式中描述。
月曆控件可以顯示一個以上的月份,而且可以透過粗體顯示日期來表示特殊天數(例如假日)。
如需使用月曆控件的詳細資訊,請參閱 使用 CMonthCalCtrl。
繼承階層架構
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。
備註
在兩個步驟中建立月曆控件:
呼叫 CMonthCalCtrl 以建構
CMonthCalCtrl
物件。呼叫這個成員函式,此函式會建立月曆控件,並將它附加至
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
從中擷取色彩的月曆控件區域。 如需值清單,請參閱 SetColor 的 nRegion 參數。
傳回值
如果 成功,則為 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
物件的指標 COleDateTime
、 CTime
對象或 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
物件的指標 COleDateTime
、 CTime
對象或 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 訊息。