关于日期和时间选取器控件
DTP) 控件 (日期和时间选取器提供了一个简单直观的界面,用于与用户交换日期和时间信息。 例如,使用 DTP 控件,可以要求用户输入日期,然后轻松检索所选内容。
本文讨论了以下主题:
日期和时间选取器用户界面
日期和时间选取器 (DTP) 控件的工作区显示日期或时间信息,并充当用户修改信息的界面。 可以从日历中选择日期,也可以使用向上控件选择日期;可以通过在控件 的格式字符串定义的字段中键入内容来更改时间。 (可选)控件显示复选框。 选中时,可以检索控件中的值;否则,该控件被视为未初始化。
下图显示了包含三个日期选取器控件的窗口。 第一个日期选取器控件是使用 DTS_SHOWNONE 样式创建的,第二个具有 DTS_UPDOWN 样式,第三个控件没有特殊样式。 在第三个控件中,用户已单击向下箭头以显示日历。
下图显示了一个窗口,其中包含三个包含时间的控件。
第一个控件已使用 DTS_TIMEFORMAT 样式创建,并在默认时间显示时间,其中包含四个字段。 用户可以在任何这些字段中键入有效值,或使用向上控件或箭头键选择字段并更改值。
第二个控件显示使用 DateTime_SetFormat设置的自定义格式。 与第一个控件一样,用户可以通过键入或使用箭头键更改时间字段。 可以通过从日历中选择一个日期,当用户单击向下箭头时打开的日历来更改星期几。
第三个控件显示如何将任意文本添加到控件。 用户可以通过键入、使用箭头键或使用向上控件,从 1 到 24) 选择一小时 (。
DTP 控件会根据用户的输入自动更新内部信息。 该控件将以下内容识别为有效输入。
输入类别 | 说明 |
---|---|
箭头键 | 控件接受箭头键以导航控件中的字段并更改值。 用户可以按或键在控件中移动。如果用户尝试在给定方向上移动最后一个字段,键盘焦点“环绕”到控件对面的字段。 键以增量方式更改当前字段中的值。 |
结束和开始 | 该控件接受VK_END和VK_HOME虚拟键,以分别将当前字段中的值更改为其上限和下限。 |
函数键 | 密钥激活编辑模式。 该键会导致控件显示下拉月日历控件, (按此操作以及) 。 |
数字 | 该控件接受两个字符段的数字输入。 如果用户输入的值 (无效,例如将月份设置为 14) ,控件将拒绝它,并将显示重置为上一个值。 |
加号和减号 | 该控件接受数字键盘中的VK_ADD和VK_SUBTRACT虚拟键,以递增和递减当前字段中的值。 |
不使用 DTS_UPDOWN 样式的 DTP 控件显示箭头按钮。 如果用户单击此按钮,则月历控件会下拉。 用户可以通过单击日历的区域来选择特定日期。
日期和时间选取器控件样式和格式
日期和时间选取器 (DTP) 控件具有多个 日期和时间选取器控件样式 ,用于确定控件的外观和行为。 使用 CreateWindowEx 的 dwStyle 参数创建控件时指定样式。 若要在创建控件后检索或更改窗口样式,请使用 GetWindowLong 和 SetWindowLong。
预设格式
有三种预设格式可用于显示日期,一种用于显示时间。 通过选择以下窗口样式之一来设置这些格式。
格式 | 说明 |
---|---|
DTS_LONGDATEFORMAT | 该显示器将如下所示:“1996年4月19日星期五”。 |
DTS_SHORTDATEFORMAT | 显示如下所示:“4/19/96”。 |
DTS_SHORTDATECENTURYFORMAT | 版本 5.80。 显示如下所示:“1996/4/19”。 |
DTS_TIMEFORMAT | 显示如下所示:“下午 5:31:42”。 |
自定义格式
DTP 控件依赖于格式字符串来确定它将如何显示信息字段。 如果预设格式不够,可以通过定义自己的格式字符串创建自定义格式。 自定义格式为应用程序提供了更大的灵活性。 通过它们可以指定控件显示信息字段的顺序。 可以包含正文文本以及用于从用户请求信息的回调字段。 创建字符串后,可以使用 DTM_SETFORMAT 消息将其分配给 DTP 控件。
格式字符串
DTP 格式字符串包含表示特定信息并定义其显示格式的一系列元素。 元素将以格式字符串中显示的顺序显示。
日期和时间格式元素将替换为实际日期和时间。 它们由以下字符组定义。
元素 | 说明 |
---|---|
"d" | 一位数或两位数的一天。 |
“dd” | 两位数的日期。 单位数日值前面有一个零。 |
“ddd” | 三个字符的工作日缩写。 |
“dddd” | 完整的工作日名称。 |
“h” | 采用 12 小时格式的一位数或两位数小时。 |
“hh” | 采用 12 小时格式的两位数小时。 单位数值前面为零。 |
“H” | 采用 24 小时格式的一到两位数小时。 |
“HH” | 采用 24 小时格式的两位数小时。 单位数值前面为零。 |
“m” | 一位数或两位数分钟。 |
“mm” | 两位数分钟。 单位数值前面为零。 |
“M” | 一位数或两位数的月份数。 |
“MM” | 两位数的月份数。 单位数值前面为零。 |
“MMM” | 三个字符的月份缩写。 |
“MMMM” | 完整月份名称。 |
“t” | 一个字母 AM/PM 缩写 (即 AM 显示为“A”) 。 |
“tt” | 两个字母 AM/PM 缩写 (即 AM 显示为“AM”) 。 |
“yy” | 1996年 (的最后两位数字将显示为“96”) 。 |
“yyyy” | 1996年全年 (将显示为“1996”) 。 |
若要使信息更具可读性,可以通过将正文文本括在单引号中,将正文文本添加到格式字符串。 无需引用空格和标点符号。
备注
不用单引号分隔的非格式字符将导致 DTP 控件不可预知的显示。
例如,若要显示格式为“'Today is: 04:22:31 Tuesday Mar 23, 1996”的当前日期,格式字符串为“'Today is: 'hh':'m':'s ddd MMM dd', 'yy”。 若要在正文文本中包含单引号,请使用两个连续单引号。 例如,“不要忘记 MMM dd','yyyy”生成如下所示的输出:不要忘记 1996 年 3 月 23 日。 不必将引号与逗号一起使用,因此“不要忘记”MMM dd,yyy“也有效,并生成相同的输出。
回调字段
除了标准 格式字符串 和正文文本之外,还可以将显示的某些部分定义为 回调字段。 这些字段可用于查询用户以获取信息。 若要声明回调字段,请在格式字符串中的任何位置 (ASCII Code 88) 包含一个或多个“X”字符。 可以通过重复“X”字符来创建具有唯一标识的回调字段。 因此,格式字符串“XX dddd MMM dd”,“yyy XXX”包含两个唯一回调字段“XX”和“XXX”。 与其他 DTP 控件字段一样,回调字段按格式字符串中的位置按从左到右的顺序显示。
当 DTP 控件分析格式字符串并遇到回调字段时,它会发送 DTN_FORMAT 和 DTN_FORMATQUERY 通知代码。 与回调字段对应的格式字符串元素包含在通知中,以允许接收应用程序确定正在查询的回调字段。 控件的所有者必须响应这些通知,以确保正确显示自定义信息。
日期和时间选取器控制通知消息
当 DTP) 控件接收用户输入或进程并响应回调字段时,日期和时间选取器 (DTP) 控件发送通知代码。 控件的父级以 WM_NOTIFY 消息的形式接收这些通知代码。
以下通知代码用于 DTP 控件。
通知代码 | 说明 |
---|---|
DTN_CLOSEUP | 指示即将删除下拉月日历。 |
DTN_DATETIMECHANGE | 向 DTP 控件中的更改发出信号。 |
DTN_DROPDOWN | 指示下拉月日历即将显示。 |
DTN_FORMAT | 请求文本以描述为回调字段的格式字符串的一部分显示。 |
DTN_FORMATQUERY | 请求有关要在回调字段中显示的文本的最大允许大小的信息。 |
DTN_USERSTRING | 向控件中的用户编辑操作的结束发出信号。 此通知仅由使用 DTS_APPCANPARSE 样式的 DTP 控件发送。 |
DTN_WMKEYDOWN | 指示用户在 DTP 控件的回调字段中按下了一个键。 |
相关主题