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

Win32:如何防止DateTimePicker接受2位数的年份?,datetime,winapi,y2k,common-controls,2-digit-year,Datetime,Winapi,Y2k,Common Controls,2 Digit Year,Microsoft的DateTimePicker通用控件根据配置的区域设置显示ShortDate。客户的计算机配置了2位年份短日期格式(d/M/yy),因此日期时间选择器显示2位年份: 当用户将焦点放在日期时间选择器的年份块中时,Microsoft会指出问题所在,并显示完整的4位数年份: 但是,用户想要输入1929作为年份,则键入一个两位数的年份: 然后,当Windows将他们的两位数年份解释为介于1930和2029之间时,他们会感到困惑,并且假设是2029年: 客户有一项全球公

Microsoft的
DateTimePicker
通用控件根据配置的区域设置显示ShortDate。客户的计算机配置了2位年份短日期格式(
d/M/yy
),因此日期时间选择器显示2位年份:

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

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

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

客户有一项全球公司政策,规定Windows区域设置的配置年限为2位数

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

这很有帮助,因此现在
日期时间选择器
总是显示4位数的年份:

问题是用户仍然可以键入“无效”的两位数年份:

根据规定,截至2029年,哪些窗口仍在运行:

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

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

22 6 29

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


如何防止DateTimePicker接受y2k bug?

如果添加DTS\u APPCANPARSE窗口样式,您可以处理WM_NOTIFY:DTN_USERSTRING消息并自己解析字符串

我希望这里的所有问题都像这个问题一样经过深思熟虑和组织。@Ben313彻底的问题的缺点是没有人能回答它们。所有的“出局”或作弊都被切断了,这只会让人们了解一个相当具体的问题领域。此外,你应该看到原来的编辑-在那里我有一个免费的咆哮;我很清楚我会在一分钟后把它们编辑掉。我知道我编辑了你的答案,添加了MSDN文档中引用的文本和链接。我知道我对你的回答发表了评论,解释了为什么它在我的情况下不起作用。现在编辑和评论都消失了。甚至没有任何迹象表明答案被编辑过。这样做是否会崩溃并回滚?
DateTime_SetFormat(hwnd_DateOfEventPicker, "d/M/yyyy");