Я использую следующий код для установки формата элемента управления 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.
Есть идеи, как это исправить?
В диалоговом окне «Регион и язык» нажмите кнопку «Дополнительные настройки», а затем вкладку «Время». Что установлено для символа AM и символа PM?
На моем компьютере с Windows 7, с форматом, установленным на немецкий язык, это обе пустые строки. Элемент управления datetime получает строки для отображения из текущей локали пользователя, поэтому даже если вы заставите его отображать AM / PM в строке формата, у него фактически не будет ничего отображать для этой части.
Других решений пока нет …