日期和时间选择器问题,无法重置日期或时间

时间:2009-12-19 16:46:48

标签: c++ visual-c++ controls dialog datepicker

我在对话框中使用了usoft日期时间选择器控件。我首先将格式设置为“HH”:'mm''ddddMMMdd','yyyy'以及当前的本地日期&使用DTM-SETSYSTEMTIME的时间。如果用户更改控件中的任何字段,程序无法使用DTM-SETSYSTEMTIME重置控件中的日期和时间,尽管SendMessage返回1.据我所知,对话框将false(零)返回给任何通知收到有关控件的信息。

如上所述的问题是我第一次意识到这一点,但实际上它更简单。我连续做了两次DTM-SETSYSTEMTIME调用,只有第一次调用生效。即使返回状态为1,以下示例中的第二个也不会生效。

        hwnd = GetDlgItem (hDlg, IDC_SUN_STAT_DATE_TIME);
        Status = SendMessage (hwnd, DTM_SETFORMAT,0,(LPARAM)"HH':'mm' 'ddddMMMdd','yyyy");
        Status = SendMessage (hwnd, DTM_SETSYSTEMTIME,GDT_VALID, (LPARAM)&systimeTime);
        systimeTime.wHour += 2;
        Status = SendMessage (hwnd, DTM_SETSYSTEMTIME,GDT_VALID, (LPARAM)&systimeTime);

似乎只有第一个DTM-SETSYSTEMTIME生效,后面的那些被忽略。

如何更改/重置控件中的日期/时间?或者(更有可能)我做错了什么?

1 个答案:

答案 0 :(得分:1)

我已经将您的代码剪切并粘贴到我自己的Visual C ++ 6.0程序中,它对我来说非常适合。如果我注释掉第二个DTM_SETSYSTEMTIME,我会得到两个小时前的时间。代码中有些东西你没有向我们展示。

编辑:由于您已选择此答案,我不妨将其准确无误。我已用自己的程序验证了你的评论。

您对日期/时间选择器的意外行为的交互存在问题:

  1. SYSTEMTIME结构需要一个完整的4位数年份。
  2. 如果您将DTM_SETSYSTEMTIME与无效的SYSTEMTIME一起使用,日期/时间选择器不会指示错误。
  3. 一旦设置了无效的SYSTEMTIME,日期/时间选择器就会停止响应进一步的DTM_SETSYSTEMTIME消息。此外,它仍然会像正确处理消息一样返回。