Win32:如何防止DateTimePicker接受2位数年份?

时间:2010-06-22 15:28:43

标签: datetime winapi y2k common-controls 2-digit-year

Microsoft的DateTimePicker通用控件根据配置的区域设置显示 ShortDate 。客户的计算机配置了一个2位数年份ShortDateFormat(d/M/yy),因此DateTimePicker显示2位数年份:

alt text http://i48.tinypic.com/15gxfys.jpg

当用户将焦点放在日期时间选择器的年度块中时,Microsoft会指出问题,并显示完整的4位数年份:

alt text http://i50.tinypic.com/2po5qc7.jpg

但是,用户想要输入1929作为一年,键入一个2位数的年份:

alt text http://i46.tinypic.com/2hrltlh.jpg

然后当他们发布时,当Windows将他们的2位数年份解释为介于19302029之间时,他们会感到困惑,并且假设它是2029年:

alt text http://i48.tinypic.com/j139qb.jpg

客户制定了全球公司政策,规定Windows区域设置配置为2位数年份。

因此,作为一种解决方法,我需要强制每个DateTimePicker控件使用自定义日期格式,使用方便的DateTime_SetFormat macro

DateTime_SetFormat(hwnd_DateOfEventPicker, "d/M/yyyy");

这有帮助,现在DateTimePicker现在总是显示一个4位数的年份:

alt text http://i46.tinypic.com/2rcpt2q.jpg

问题是用户仍然可以输入“无效”2位数年份:

alt text http://i46.tinypic.com/2hrltlh.jpg

根据规则,哪个Windows仍在使用,如2029:

alt text http://i46.tinypic.com/2rcpt2q.jpg

我需要日期时间选择器来拒绝2位数年份。

如果这不起作用,那么我将被迫用3个编辑框替换每个DateTimePicker:

22 6 29

我可以将无效数字换成红色,并指出用户输入的无效数据。

如何阻止DateTimePicker接受y2k错误?

1 个答案:

答案 0 :(得分:0)

如果添加DTS_APPCANPARSE窗口样式,则可以处理WM_NOTIFY:DTN_USERSTRING消息并自行解析字符串