MFC日历控件简介

来源:互联网 发布:数字电视是网络电视吗 编辑:程序博客网 时间:2024/06/05 08:21

本文详细阐述了基本日历控件的属性、方法以及简易使用代码。

Win32API提供了一个显示日期的日历控件,日期的显示模式是基于控制面板中的区域性设置或者说是依赖于用户的操作系统。

CMonthCalCtrl对象封装了日历控件的功能。日历控件提供给用户一个简易的日历界面,用户可以用于选择日期。

 

一、日历控件简介

  Win32 API提供了一个显示日期的彩色日历控件,日期的显示模式是基于控制面板中的区域性设置或者说是依赖于用户的操作系统(具体方法:更换操作系统语言和区域设置)。具体的日历控件如下图一所示:

    

     标题条包含两个按钮和两个标签,左边的按钮准许用户单击选择前一个月份,单击右边的按钮选择下一个月份。左边的标签显示当前选择的年份,右边的标签显示当前的月份。左键单击左边的“年份”标签,显示出微调按钮,通过单击按钮或者上下键来选择相应的年份,此“年份”标签不可自己录入。左键单击右边的“月份”标签,显示可选的月份信息,根据需要进行选择。

日历控件有较多属性,可以根据需要自行设定。属性列表如下图所示。其中No Trailing Dates、Short Days Of Week以及Keep Selection on Navigation属性只适用于Vista操作系统。

二、创建日历控件

通常可以在窗口、对话框、工具条及其他任何容器窗口中创建日历控件。下面以对话框为例,创建日历控件。

日历控件对应着CMonthCalCtrl类,所以要动态创建一个日历控件,需要声明一个CMonthCalCtrl变量或指向CMonthCalCtrl的指针,首先在对话框对应的头文件中添加代码,如下绿色注释下所示:

然后让变量绑定日历控件的ID,代码如下:

CMonthCalCtrl类同MFC中其他控件对应的类一样,提供了一个Create()方法用来在容器窗口中动态创建日历控件,代码如下:

m_CtrlDate = new CMonthCalCtrl;

m_CtrlDate ->Create(WS_TABSTOP |WS_CHILD | WS_VISIBLE |WS_BORDER | MCS_SHORTDAYSOFWEEK| MCS_NOTRAILINGDATES | MCS_NOTODAY | MCS_WEEKNUMBERS,CPoint(300, 80), this,0x224);//以|分割的选项(控件样式)可选

三、日历控件属性操作

作为一个可视化对象,日历控件可以用不同的颜色来表现背景、星期日、标题条文本、标题条背景等,可以通过修改程序来更换这些颜色。改变日历控件的颜色,需要调用CMonthCalCtrl::SetColor() 方法,该方法的语法是:

COLORREF SetColor(int nRegion, COLORREF ref);

默认情况下,控件的标题条显示蓝色背景。如果要改变它,需要向nRegion参数传递MCSC_TITLEBK值,向ref参数传递你所要显示的颜色。如果更改标题条上文本的颜色,需要向nRegion参数传递MCSC_TITLETEXT值。

此外,在英语国家,一个星期的第一天是星期天,如果你想更改一个星期的第一天,可以调用函数SetFirstDayOfWeek(),它的语法是:

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

第一个参数必须是0到6的整数值。

具体例子代码如下:(代码+效果图)

1、m_CtrlDate ->SetColor(MCSC_TITLEBK,0xfff030);//修改标题条颜色

更改控件的标题条颜色效果图

2、m_CtrlDate ->SetColor(MCSC_TITLETEXT,0xffffff);//修改字体颜色

更改控件的字体颜色效果图

3、m_CtrlDate->SetColor(MCSC_MONTHBK,0xffeeff);//更改日期列表的背景色

 更改控件的日期列表背景色效果图

4、m_CtrlDate->SetColor(MCSC_TRAILINGTEXT,0xdddddd);//更改非当前月份的字体色

更改非当前月份日期字体颜色效果图

5、m_CtrlDate ->SetColor(MCSC_TEXT,0x4262ff);//更改当前月份以及当天日期的颜色

更改当前月份日期以及分割线的颜色效果图

为了获取当前日历控件中选择的日期,可以使用方法:CMonthCalCtrl::GetCurSel(),该方法重载有3个版本,它们是:

BOOLGetCurSel(COleDateTime& refDateTime) const;

BOOLGetCurSel(CTime& refDateTime) const;

BOOLGetCurSel(LPSYSTEMTIME pDateTime) const;

可以调用CMonthCalCtrl::SetSelRange()方法在日历控件中选择多个日期,它有三个不同的版本,语法是

BOOLSetSelRange(const COleDateTime& pMinRange, const COleDateTime&pMaxRange);

BOOLSetSelRange(const CTime& pMinRange, const CTime& pMaxRange);

BOOLSetSelRange(const LPSYSTEMTIME pMinRange, const LPSYSTEMTIME pMaxRange);

如果想获取一个日历控件的可选择范围,可以调用CMonthCalCtrl::GetSelRange() 方法。

为了控制用户可选择的日期范围,可以调用CMonthCalCtrl::SetRange()方法,它也有三中不同的形式,分别是

BOOLSetRange(const COleDateTime* pMinRange, const COleDateTime* pMaxRange);

BOOLSetRange(const CTime* pMinRange, const CTime* pMaxRange);

BOOLSetRange(const LPSYSTEMTIME pMinRange, const LPSYSTEMTIME pMaxRange);

第一个参数nMinRange是选择范围的开始日期,参数nMaxRange是可供选择的最大日期。

 

1 0
原创粉丝点击