C++ 日期和时间选择器问题,can';t重置日期或时间

C++ 日期和时间选择器问题,can';t重置日期或时间,c++,visual-c++,controls,dialog,datepicker,C++,Visual C++,Controls,Dialog,Datepicker,我正在对话框中使用usoft日期时间选择器控件。首先,我使用DTM-SETSYSTEMTIME将格式设置为“HH”:“mm”“ddmmmdd”“yyyy”和当前本地日期和时间。如果用户更改控件中的任何字段,则程序无法使用DTM-SETSYSTEMTIME重置控件中的日期和时间,尽管SendMessage返回1。据我所知,该对话框对其收到的有关控件的任何通知返回false(零) 如上所述的问题是我第一次意识到它的原因,但实际上要简单得多。我连续做了两次DTM-SETSYSTEMTIME调用,只有第

我正在对话框中使用usoft日期时间选择器控件。首先,我使用DTM-SETSYSTEMTIME将格式设置为“HH”:“mm”“ddmmmdd”“yyyy”和当前本地日期和时间。如果用户更改控件中的任何字段,则程序无法使用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生效,而忽略了下面的DTM-SETSYSTEMTIME


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

< p>我已经在Visual C++ 6中剪切并粘贴了自己的代码,它对我来说非常适合。如果我注释掉第二个DTM_SETSYSTEMTIME,我会得到一个早两个小时的时间。代码中有些东西你没有给我们看

编辑:既然你选择了这个答案,我还是把它准确点为好。我已经用我自己的程序验证了你的评论

您在日期/时间选择器的意外行为交互方面遇到问题:

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

  • 您好,什么语言和框架?@ SkurMeDel:Visual C++ 6,我可以检索修改的日期/时间,但是我不能设置一个新的,控件在用户所做的任何事情上都保持冻结。我尝试处理DTN-DATETMETHORION,并用SETWONDOWORN(HWND,DWLYMSGRESULTS,0)返回零,这使得控件中的日期时间设置为空白。我应该复制在NMDATETIMECHANGE.st某处找到的系统时间吗?好的:)如果你不介意的话,我重新标记了它。有一个语言标签会使它显示在“未答复”中,并且可能会让您更快地得到帮助。我的意思是,它会在“未答复”中的“语言标签”下突出显示,因为我认为许多人会监视特定的标签。谢谢!知道它在同样的环境下对你有效,让我明白我做错了什么。这个问题在我的SYSTEMTIME中是非法的一年,我是从tm时间构建的(我忽略了1900年的偏移量)。显然,如果DTM-SETSYSTEMTIME没有日期/时间,则它接受非法年份(并替换当前年份),但忽略具有非法年份的后续调用。如果DTM-SETSYSTEMTIME给了我一个错误或完全失败,我早就知道了。节日快乐!好的,完整地说,DTM_SETSYSTEMTIME接受第一个非法的SYSTEMTIME并忽略后续的非法SYSTEMTIME,但稍后将响应正确的SYSTEMTIME。