用CBCGPDateTimeCtrl替代CDateTimeCtrl

11 篇文章 0 订阅

首先简单介绍一下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()中给主对话框发送消息,由主对话框去处理消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值