首先简单介绍一下CDateTimeCtrl的常用事件添加
DTN_DROPDOWN //可在事件函数中定义bool标识符,使得DTN_CLOSEUP事件中代码只执行一次。
DTN_CLOSEUP //每点击一次会响应两次
DTN_DATETIMECHANGE //控件值变化
一、用CBCGPDateTimeCtrl替代CDateTimeCtrl
1.对话框拖入一个Button control作为CBCGPDateTimeCtrl的绘制区域;
2.h文件定义变量 CBCGPDateTimeCtrl m_wndDateTimePicker;
3.cpp文件设置CBCGPDateTimeCtrl的显示状态
//其中stateFlags表示需要显示的事件控件特征,按需添加;stateMask需要全部赋上,否则会出错。
UINT stateFlags = 0;
stateFlags |= CBCGPDateTimeCtrl::DTM_DROPCALENDAR;
stateFlags |= CBCGPDateTimeCtrl::DTM_DATE;
const UINT stateMask =
CBCGPDateTimeCtrl::DTM_SPIN |
CBCGPDateTimeCtrl::DTM_DROPCALENDAR |
CBCGPDateTimeCtrl::DTM_DATE |
CBCGPDateTimeCtrl::DTM_TIME24H |
CBCGPDateTimeCtrl::DTM_CHECKBOX |
CBCGPDateTimeCtrl::DTM_TIME |
CBCGPDateTimeCtrl::DTM_TIME24HBYLOCALE |
CBCGPDateTimeCtrl::DTM_SECONDS;
m_wndDateTimePicker.SetState (stateFlags, stateMask);
二、进行第一点的替换后,原来的Button control事件全部失效,因为BCG的事件与MFC的不一样。
需要继承CBCGPDateTimeCtrl,重新实现点击的消息函数,方可响应用户业务需求的消息。
例如:改变控件值事件
class MyBCGDataTimeCtrl: public CBCGPDateTimeCtrl
{
public:
MyBCGDataTimeCtrl();
virtual void ClosePopupCalendar(COleDateTime date = COleDateTime()); //每次关闭(不管值是否改变)响应两次
private:
bool m_bFlag;
};
如果需要改变主对话框的变量值,那么就自定义一个消息,然后在ClosePopupCalendar()中给主对话框发送消息,由主对话框去处理消息。