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
指定月历控件的控件 ID。
返回值
如果初始化成功,则返回非零值;否则返回 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;
返回值
控件边框的宽度,以像素为单位。
备注
此方法将发送 MCM_GETCALENDARBORDER 消息,如 Windows SDK 中所述。
CMonthCalCtrl::GetCalendarCount
检索当前月历控件中显示的日历数。
int GetCalendarCount() const;
返回值
当前显示在月历控件中的日历数。 允许的最大日历数为 12。
备注
此方法将发送 MCM_GETCALENDARCOUNT 消息,如 Windows SDK 中所述。
CMonthCalCtrl::GetCalendarGridInfo
检索有关当前月历控件的信息。
BOOL GetCalendarGridInfo(PMCGRIDINFO pmcGridInfo) const;
参数
pmcGridInfo
[out] 指向接收有关当前月历控件的信息的 MCGRIDINFO 结构的指针。 调用方负责分配和初始化此结构。
返回值
如果此方法成功,则返回 TRUE;否则返回 FALSE。
备注
此方法将发送 MCM_GETCALENDARGRIDINFO 消息,如 Windows SDK 中所述。
示例
第一个代码示例定义变量 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;
返回值
日历标识符常量之一。
备注
一个日历标识符,表示特定于区域的日历,例如公历(已本地化)、日语或回历。 应用程序可以使用具有各种语言支持函数的日历标识符。
此方法将发送 MCM_GETCALID 消息,如 Windows SDK 中所述。
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 | 世纪视图 |
注解
此方法将发送 MCM_GETCURRENTVIEW 消息,如 Windows SDK 中所述。
示例
第一个代码示例定义变量 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。
返回值
如果成功,则返回非零值;否则返回 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 | 星期二 |
2 | 星期三 |
3 | 星期四 |
4 | 星期五 |
5 | 星期六 |
6 | 星期日 |
示例
请参阅 CMonthCalCtrl::SetFirstDayOfWeek 的示例。
CMonthCalCtrl::GetMaxSelCount
检索当前可在月历控件中选择的最大天数。
int GetMaxSelCount() const;
返回值
一个整数值,表示可为控件选择的总天数。
注解
此成员函数实现 Win32 消息 MCM_GETMAXSELCOUNT 的行为,如 Windows SDK 中所述。 将此成员函数用于设置了 MCS_MULTISELECT 样式的控件。
示例
请参阅 CMonthCalCtrl::SetMaxSelCount 的示例。
CMonthCalCtrl::GetMaxTodayWidth
检索当前月历控件的“今天”字符串的最大宽度。
DWORD GetMaxTodayWidth() const;
返回值
“今天”字符串的宽度,以像素为单位。
示例
第一个代码示例定义变量 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);
备注
用户可以通过单击显示在月历控件底部的“今天”字符串返回到当前日期。 “今天”字符串包括标签文本和日期文本。
此方法将发送 MCM_GETMAXTODAYWIDTH 消息,如 Windows SDK 中所述。
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
对包含允许的最大日期的 COleDateTime
或 CTime
对象的引用。
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
指向 COleDateTime
对象、CTime
对象或包含范围中下限日期的 SYSTEMTIME 结构的指针。
pMaxRange
指向 COleDateTime
对象、CTime
对象或包含范围中上限日期的 SYSTEMTIME 结构的指针。
返回值
一个可为零(不设置限制)的 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
对包含允许的最大日期的 COleDateTime
或 CTime
对象的引用。
pMinRange
指向包含范围中下限日期的 SYSTEMTIME 结构的指针。
pMaxRange
指向包含范围中上限日期的 SYSTEMTIME
结构的指针。
返回值
如果成功,则不为 0;否则为 0。
注解
此成员函数实现 Win32 消息 MCM_GETSELRANGE 的行为,如 Windows SDK 中所述。 如果应用于不使用 MCS_MULTISELECT 样式的月历控件,GetSelRange
将会失败。
在 MFC 的 GetSelRange
实现中,可以指定 COleDateTime
用法、CTime
用法或 SYSTEMTIME
结构用法。
CMonthCalCtrl::GetToday
检索指定为月历控件中的“今天”的日期的日期信息。
BOOL GetToday(COleDateTime& refDateTime) const; BOOL GetToday(COleDateTime& refDateTime) const;
BOOL GetToday(LPSYSTEMTIME pDateTime) const;
参数
refDateTime
对指示当前日期的 COleDateTime 或 CTime 对象的引用。
pDateTime
指向接收日期信息的 SYSTEMTIME 结构的指针。 此参数必须是有效地址,且不能为 NULL。
返回值
如果成功,则不为 0;否则为 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 值。 等于 MCHITTESTINFO
结构的 uHit 成员。
注解
HitTest
使用 MCHITTESTINFO
结构,其中包含有关命中测试的信息。
CMonthCalCtrl::IsCenturyView
指示当前月历控件的当前视图是否为世纪视图。
BOOL IsCenturyView() const;
返回值
如果当前视图是世纪视图,则返回 TRUE;否则返回 FALSE。
备注
此方法将发送 MCM_GETCURRENTVIEW 消息,如 Windows SDK 中所述。 如果该消息返回 MCMV_CENTURY,则此方法将返回 TRUE。
CMonthCalCtrl::IsDecadeView
指示当前月历控件的当前视图是否为十年视图。
BOOL IsDecadeView() const;
返回值
如果当前视图是十年视图,则返回 TRUE;否则返回 FALSE。
注解
此方法将发送 MCM_GETCURRENTVIEW 消息,如 Windows SDK 中所述。 如果该消息返回 MCMV_DECADE,则此方法将返回 TRUE。
CMonthCalCtrl::IsMonthView
指示当前月历控件的当前视图是否为月份视图。
BOOL IsMonthView() const;
返回值
如果当前视图是月份视图,则返回 TRUE;否则返回 FALSE。
备注
此方法将发送 MCM_GETCURRENTVIEW 消息,如 Windows SDK 中所述。 如果该消息返回 MCMV_MONTH,则此方法将返回 TRUE。
CMonthCalCtrl::IsYearView
指示当前月历控件的当前视图是否为年份视图。
BOOL IsYearView() const;
返回值
如果当前视图是年份视图,则返回 TRUE;否则返回 FALSE。
备注
此方法将发送 MCM_GETCURRENTVIEW 消息,如 Windows SDK 中所述。 如果该消息返回 MCMV_YEAR,则此方法将返回 TRUE。
CMonthCalCtrl::SetCalendarBorder
设置当前月历控件的边框宽度。
void SetCalendarBorder(int cxyBorder);
参数
cxyBorder
[in] 边框的宽度,以像素为单位。
注解
如果此方法成功,则将边框宽度设置为 cxyBorder 参数。 否则,边框宽度将重置为当前主题指定的默认值;如果未使用主题,则重置为零。
此方法将发送 MCM_SETCALENDARBORDER 消息,如 Windows SDK 中所述。
示例
第一个代码示例定义变量 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();
注解
边框宽度将设置为当前主题指定的默认值;如果未使用主题,则设置为零。
此方法将发送 MCM_SETCALENDARBORDER 消息,如 Windows SDK 中所述。
CMonthCalCtrl::SetCalID
设置当前月历控件的日历标识符。
BOOL SetCalID(CALID calid);
参数
calid
[in] 日历标识符常量之一。
返回值
如果此方法成功,则返回 TRUE;否则返回 FALSE。
备注
一个日历标识符指定特定于区域的日历,例如公历(已本地化)、日语或回历。 如果计算机上安装了包含日历的区域设置,则使用 SetCalID
方法显示 calid 参数指定的日历。
此方法将发送 MCM_SETCALID 消息,如 Windows SDK 中所述。
示例
第一个代码示例定义变量 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。
备注
此方法将发送 MCM_SETCURRENTVIEW 消息,如 Windows SDK 中所述。
CMonthCalCtrl::SetCurSel
设置月历控件的当前所选日期。
BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL SetCurSel(const CTime& refDateTime);
BOOL SetCurSel(const LPSYSTEMTIME pDateTime);
参数
refDateTime
对指示当前所选月历控件的 COleDateTime 或 CTime 对象的引用。
pDateTime
指向包含要设置为当前选择的日期的 SYSTEMTIME 结构的指针。
返回值
如果成功,则不为 0;否则为 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;否则为 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;否则为 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
指向 COleDateTime
对象、CTime
对象或包含范围中下限日期的 SYSTEMTIME 结构的指针。
pMaxRange
指向 COleDateTime
对象、CTime
对象或包含范围中上限日期的 SYSTEMTIME
结构的指针。
返回值
如果成功,则不为 0;否则为 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
指向 COleDateTime
对象、CTime
对象或包含范围中下限日期的 SYSTEMTIME 结构的指针。
pMaxRange
指向 COleDateTime
对象、CTime
对象或包含范围中上限日期的 SYSTEMTIME
结构的指针。
返回值
如果成功,则不为 0;否则为 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 参数指定的矩形中可以容纳多少个日历,然后返回可以包含该数量的日历的最小矩形。 实际上,此方法会缩小指定的矩形以正好容纳所需数量的日历。
此方法将发送 MCM_SIZERECTTOMIN 消息,如 Windows SDK 中所述。