完成自编辑地DatePicker控件

完成自编辑地DatePicker控件,第1张

完成自编辑地DatePicker控件,第2张

简介

我想要这样一个控件,它不仅包括标准日期选择器控件的功能,还允许用户随时输入自己的日期。标准的日期选择器控件有自己的自我编辑日期的方法,但它不符合我的期望。

文件

该控件基于Microsoft的CDateTimeCtrl类。我使用了一些技巧将标准控件替换为自己的编辑控件和按钮,但处理类仍然继承自CDateTimeCtrl。为了实现这个功能,我销毁了现有的窗口,并创建了自己的与该类相关联的窗口。工作原理见CDateTimeEditCtrl::on create。

基于我的实现方法,这个控件的使用和标准的CDateTimeCtrl完全一样。将标准日期选择器控件添加到对话框资源中,然后为其创建CDateTimeEditCtrl类型的成员变量。

该控件支持常用的日期选取器样式,但以下样式不支持:dts _ updown、dts _ shownone、dts _ appcanparse、dts _ longdateformat和dts _ timeformat。

消息传递与标准控制相同,但不支持DTM _获取范围、DTM _设置范围和DTM _设置格式消息。控件中的事件通知被发送到父窗口,就像标准控件一样。

还添加了一些额外的公共函数,以提供更强大的功能扩展。这些公共功能的列表如下:

BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);
功能与CDateTimeCtrl类似。


CEdit * GetEditControl()const;
返回一个指向编辑控件的指针,通过该指针可以直接处理其属性。


void enable button(BOOL be nable = TRUE);
允许或禁用用于下拉日历控件的按钮。

void restore focus(BOOL bRestore = TRUE);
确定单击按钮时的行为。如果为真,则控件将焦点重新设置回单击按钮时拥有焦点的窗口,否则焦点将设置到编辑控件。如果控件不可编辑,则焦点总是被设置回先前获得焦点的窗口。默认情况下,焦点将设置为编辑控件。


void SetNonEditable(BOOL bNonEditable = TRUE);
用于使控件的编辑部分不可编辑。默认为可编辑。


BOOL GetNonEditable();
返回编辑控件当前是否可编辑。


virtual BOOL is validate(LPCTSTR lpszDate = NULL);
返回传递的日期字符串是否有效。如果lpszDate为NULL,则返回编辑控件中的文本是否是有效的日期字符串。


void SetValidCharsOnly(BOOL bValidCharsOnly = TRUE);
设置用户是否只能输入有效的字符


BOOL GetValidCharsOnly();
返回用户是否只能在编辑控件中输入有效字符


void SetValidChars(LPCTSTR lpszValidChars = NULL);
设置用户可在编辑控件中键入的有效字符。如果指定了NULL,则使用默认字符(0-9和当前用户区域设置的日期分隔符)。如果用户更改了区域设置,则控件会检测到这一点并使用新的分隔符。


CString GetValidChars();
返回已被设置为对用户键入编辑控件有效的字符


void SetAllowUpDownKeys(BOOL bAllow = TRUE);
设置向上/向下箭头键是否递增/递减日期字符串中包含光标的部分。


BOOL GetAllowUpDownKeys();
返回向上/向下键是否会递增/递减日期字符串的一部分。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 完成自编辑地DatePicker控件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情