MFC日期时间拾取控件和月历控件

一、日期时间拾取控件CDateTimeCtrl
1.属性值
Day States 将某一天的显示变为粗体
Multi Select 允许用户在控件中选择日期范围,否则只允许选择一个日期
No Today Circle 不用红色圈定今天的日期
No Today 在控件的下边不再显示今天的日期
Week Numbers 在控件的每行左边显示周数
2.基本操作
日期时间拾取控件可改变月历对话框的字体
void SetMonthCalFont(HFONT hFont,BOOL bRedraw=TRUE)
bRedraw表示当字体设置后,是否立即重画

对应的是CDateTimeCtrl::GetMonthCalFont()获取当前日历字体格式

改变月历颜色函数:
COLORREF SetMonthCalColor(int iColor,COLORREF ref);
成功时将返回月历先前的颜色,否则返回-1
iColor指定月历设置颜色的部位,是一个索引值,参数ref指定颜色
月历颜色修改部位标志:
MCSC_BACKGROUND 设置月份之间的背景颜色
MCSC_MONTHBK 设置月份中的背景颜色
MCSC_TEXT 设置月份中的文本颜色
MCSC_TITLEBK 设置月历标题的背景色
MCSC_TITLETEXT 设置月历被踢的文本色
MCSC_TRAILINGTEXT 设置当月份向前后翻页时,与今日相同的日期的颜色
与之对应的成员函数CDateTimeCtrl::GetMonthCalColor()可用来获得相关颜色
在DTP(DateTimeCtrl)控件中还可调用成员函数:CDataTimeCtrl::GetMonthCalCtrl()来获得下拉月历指针

设置显示的格式:SetFont用来设置日期时间拾取控件的显示格式
有Short Data(短格式:”2010-9-21”)Long Data(长格式:”2010年9月21日”)或Time(显示时间,如”17:25:12”).
BOOL SetFormat(LPCTSTR pstrFormat);pstrFormat指定显示格式,若为NULL则使用默认格式
如:
SetFormat(“yyy’-‘MM’-‘dd’ ‘HH’:’mm’:’ss”)

设置或获取时间
SetTime();GetTiem()
BOOL SetTime(const COIeDateTime& timeNew);
BOOL SetTime(const CTime * pTimeNew);
BOOL SetTime(LPSYSTEMTIME pTimeNew=NULL);
第三个函数的pTimeNew是指向SYSTEMTIME结构的指针,其结构如下:

typedef struct _SYSTEMTIME {
    WORD wYear;//年
    WORD wMonth;//月
    WORD wDayOfWeek;//一周的某一天,0=星期天,以此类推 
    WORD wDay;//天数
    WORD wHour;//小时
    WORD wMinute;//分
    WORD wSecond; //秒
    WORD wMilliseconds;//百万分之一秒
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

BOOL GetTime(COIeDateTime& timeDest)const;
DWORD GetTime(CTime& timeDest)const;
DWORD GetTime(LPSYSTEMTIME pTimeDest)const;

二、月历控件CMonthCalCtrl
1.颜色设置
SetColor(),GetColor()设置或获取月历控件的有关颜色
2.设置或获取月历内容
SetToday(),GetToday()设置或获取月历控件的今天日期
BOOL GetToday(COleDateTime& refDateTime)const;
BOOL GetToday(CTime& refDateTime)const;
BOOL GetToday(LPSYSTEMTIME pDateTime)const;
void SetToday(const COleDateTime& refDateTime);
void SetToday(const LPSYSTEMTIME pDateTime);

设置或获取当前选择项
BOOL GetCurSel(COleDateTime& refDateTime)const;
BOOL GetCurSel(CTime& refDateTime)const;
BOOL GetCurSel(LPSYSTEMTIME pDateTime)const;
BOOL SetCurSel(const COleDateTime& refDateTime);
BOOL SetCurSel(const CTime& refDateTime);
BOOL SetCurSel(const LPSYSTEMTIME pDateTime);

3.通知消息
DTP控件

DTN_DROPDOWN DTP控件中的月历控件将要显示
DTN_CLOSEUP DTP控件中的月历控件将要关闭
DTN_DATETCHANGEDTP 控件中的内容已发生改变
DTN_FORMAT 文本需要显示在回调域
DTN_FORMATQUERY 文本显示所需最大尺寸
DTN_USERSTRING 用户已完成DTP控件的编辑
DTN_WMKEYDOWN 用户单击回调域

月历控件
MCN_GETDAYSTATE 获得日期的定制风格
MCN_SELCHANGE 当前选择项已被改变
MCN_SELECT 在月历控件中选择一个日期
NM_RELEASEDCAPTURE 释放鼠标的捕获信息
以上均可用向导添加映射
实例:
1.创建一个基于对话框的MFC应用程序exe,功能:使用日期时间拾取控件,实现设定日期和时间的功能。
2.设置对话框:
添加一个ID改为IDC_DTPDATETIME的日期时间拾取控件(日期时间选取器VC++6.0版本的称呼),并用向导设置一个成员变成名为:m_DateTime,其 为Control类型(CDateTimeCtrl)
设置一个名为IDC_MESSAGE的静态文本用于输出选择的日期信息。
静态文本内容为空
3.为了实现选择日历控件中的日期后,产生反馈信息给静态文本并且显示,我们需要一个名叫:DTN_DATETIMECHANGE的消息,用它来实现点击日期后的作出相应的反馈信息。
该消息是在IDC_DTPDATETIME的对象消息,只对日期时间拾取控件负责

void CMonthCalDlg::OnDatetimechangeDtpdatetime(NMHDR* pNMHDR, LRESULT* pResult) 
{
    // TODO: Add your control notification handler code here
    CString strMessage;
    CTime time;
    m_DateTime.GetTime(time);//日期时间拾取控件调用GetTime会自动选择得到的是选中的那个日期时间。
    //从DTP日期时间拾取控件中获得设定的日期
    strMessage=time.Format("设定时间为%Y%m%d%H:%M:%S");
    //这些%Y,%m,%d,%H,%M,%S都为从日历控件的当前被选中日期获取的信息对应着“年 月 日 时 分 秒”
    GetDlgItem(IDC_MESSAGE)->SetWindowText(strMessage);//将格式化的信息传送
    *pResult = 0;
}

经过试验发现,就算是在这个日期时间拾取控件还没完善,例如:时间只获取了创建那一瞬间的时间,时间不会流动,一些其他的在这里说过的函数都没用过,测试很不理想。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值