Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?
Привет!
SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?
Юзать надо MessageBoxEx():
int MessageBoxEx(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType, // style of message box
WORD wLanguageId // language identifier
);
wLanguageId
Specifies the language in which to display the text contained in the predefined push buttons. This value must be in the form returned by the MAKELANGID macro.
For a list of the language identifiers supported by Win32, see Language Identifiers. Note that each localized release of Windows typically contains resources only for a limited set of languages. Thus, for example, the U.S. version offers LANG_ENGLISH, the French version offers LANG_FRENCH, the German version offers LANG_GERMAN, and the Japanese version offers LANG_JAPANESE. Each version offers LANG_NEUTRAL. This limits the set of values that can be used with the wLanguageId parameter. Before specifying a language identifier, you should enumerate the locales that are installed on a system.
Вот этот самый wLanguageId и задает язык. Он делается макрой:
WORD MAKELANGID(
USHORT usPrimaryLanguage, // primary language identifier
USHORT usSubLanguage // sublanguage identifier
);
Тут у тебя usPrimaryLanguage=LANG_RUSSIAN, а usSubLanguage=SUBLANG_NEUTRAL, и вроде бы должно работать..
Здравствуйте, Sinatr, Вы писали:
S>Юзать надо MessageBoxEx(): S>Вот этот самый wLanguageId и задает язык. Он делается макрой: S>Тут у тебя usPrimaryLanguage=LANG_RUSSIAN, а usSubLanguage=SUBLANG_NEUTRAL, и вроде бы должно работать..
Да, но это будет работать только в том случае, если Windows поддерживает такую локаль, а если это чисто английская версия, то ничего не получиться... поэтому я и хотел просто выдернуть из ресурсов эти строки, и внести их в шаблон собщения, чтобы независимо от локали, инструкция выглядела корректно (т.е. в ней упоминались те кнопки, которые отображаются в окне)
Привет!
SL>Да, но это будет работать только в том случае, если Windows поддерживает такую локаль, а если это чисто английская версия, то ничего не получиться... поэтому я и хотел просто выдернуть из ресурсов эти строки, и внести их в шаблон собщения, чтобы независимо от локали, инструкция выглядела корректно (т.е. в ней упоминались те кнопки, которые отображаются в окне)
Веришь, раньше была Win98SE и все работало, а теперь ХР (инглиш) и в натуре ничего не работает!
Попробовал, как было "Yes" и "No", так и осталось.. обидно. Ну тогда наверное ничего не поделаешь — придется свой шаблон диалога делать...
Здравствуйте, SergeL, Вы писали:
SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?
Как вообще изменить надписи на кнопках MessageBox, я не знаю, а для частного случая проходит такой способ:
Допустим MessageBox вызывается тогда, когда активный, например, MainFrame. Вешаем на него обработчик OnActivate и пишем (для случая MB_YESNOCANCEL) приблизительно такое:
Здравствуйте, SergeL, Вы писали:
SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?
Еще есть такая программа "BazarBox" — которая кастомизирует интерфейс па-пацански,
типа "Нафиг — Нефиг — Пофиг", и можно настроить ваще как хочиш.
Здравствуйте, SergeL, Вы писали:
SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?
SL>С уважением, SL>Литвинов С.М,
Такая же проблема.
Ни у кого за 3 года идей не появилось?