проблема выбора даты и времени, не могу сбросить дату или время - PullRequest
0 голосов
/ 19 декабря 2009

Я использую элемент управления выбора времени usoft в диалоговом окне. Я начал с установки формата «ЧЧ»: «мм», «ddddMMMdd», «гггг» и текущей локальной даты и времени, используя 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 Ответ

1 голос
/ 22 декабря 2009

Я вырезал и вставил ваш код в свою собственную программу на Visual C ++ 6.0, и он отлично работает для меня. Если я закомментирую второй DTM_SETSYSTEMTIME, я получу время на два часа раньше. В коде есть что-то, что вы нам не показываете.

Редактировать: Поскольку вы выбрали этот ответ, я мог бы также сделать его точным. Я проверил ваши комментарии с моей собственной программой.

У вас возникли проблемы с неожиданным поведением средства выбора даты / времени:

  1. Структуре SYSTEMTIME требуется полный год из 4 цифр.
  2. Средство выбора даты / времени не указывает на ошибку, если вы используете DTM_SETSYSTEMTIME с недопустимым SYSTEMTIME.
  3. Как только вы установили недопустимый SYSTEMTIME, средство выбора даты / времени перестает отвечать на дальнейшие сообщения DTM_SETSYSTEMTIME. Кроме того, он по-прежнему возвращается, как если бы он правильно обработал сообщение.
...