DTM_SETFORMAT для элемента управления Time Picker не учитывает спецификатор формата

Я использую следующий код для установки формата элемента управления Time Picker (с именем класса Win32 SysDateTimePick32) отображать время только в американском английском формате:

LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT));
TCHAR buffFmt[200] = {0};
GetLocaleInfo(lcid, LOCALE_STIMEFORMAT, buffFmt, SIZEOF(buffFmt));

TRACE(buffFmt);    //"h:mm:ss tt"
::SendMessage(m_hWnd, DTM_SETFORMAT, 0, (LPARAM)buffFmt);

Когда я запускаю его на своей Windows 7, настроенной для учетной записи пользователя на американском английском, управление выглядит примерно так:

введите описание изображения здесь

Но если я запускаю его на Windows 7 с учетной записью пользователя, настроенной для немецкого формата:

введите описание изображения здесь

элемент управления выглядит так (часть AM / PM отсутствует):

введите описание изображения здесь

Обратите внимание, что в обоих случаях форматная строка имеет вид «ч: мм: сс тт», который в соответствии с эта страница Значит это tt должен стоять для части AM / PM.

Есть идеи, как это исправить?

0

Решение

В диалоговом окне «Регион и язык» нажмите кнопку «Дополнительные настройки», а затем вкладку «Время». Что установлено для символа AM и символа PM?

На моем компьютере с Windows 7, с форматом, установленным на немецкий язык, это обе пустые строки. Элемент управления datetime получает строки для отображения из текущей локали пользователя, поэтому даже если вы заставите его отображать AM / PM в строке формата, у него фактически не будет ничего отображать для этой части.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]