надписи на кнопках в MessageBox
От: SergeL  
Дата: 23.04.03 10:56
Оценка:
Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?

С уважением,
Литвинов С.М,
Re: надписи на кнопках в MessageBox
От: Sinatr Германия  
Дата: 23.04.03 11:33
Оценка: 7 (2)
Привет!

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, и вроде бы должно работать..
---
ПроГLамеры объединяйтесь..
Re[2]: надписи на кнопках в MessageBox
От: SergeL  
Дата: 23.04.03 13:58
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Юзать надо MessageBoxEx():

S>Вот этот самый wLanguageId и задает язык. Он делается макрой:
S>Тут у тебя usPrimaryLanguage=LANG_RUSSIAN, а usSubLanguage=SUBLANG_NEUTRAL, и вроде бы должно работать..

Да, но это будет работать только в том случае, если Windows поддерживает такую локаль, а если это чисто английская версия, то ничего не получиться... поэтому я и хотел просто выдернуть из ресурсов эти строки, и внести их в шаблон собщения, чтобы независимо от локали, инструкция выглядела корректно (т.е. в ней упоминались те кнопки, которые отображаются в окне)
Re[3]: надписи на кнопках в MessageBox
От: Sinatr Германия  
Дата: 23.04.03 14:40
Оценка:
Привет!

SL>Да, но это будет работать только в том случае, если Windows поддерживает такую локаль, а если это чисто английская версия, то ничего не получиться... поэтому я и хотел просто выдернуть из ресурсов эти строки, и внести их в шаблон собщения, чтобы независимо от локали, инструкция выглядела корректно (т.е. в ней упоминались те кнопки, которые отображаются в окне)


Веришь, раньше была Win98SE и все работало, а теперь ХР (инглиш) и в натуре ничего не работает!
Попробовал, как было "Yes" и "No", так и осталось.. обидно. Ну тогда наверное ничего не поделаешь — придется свой шаблон диалога делать...
---
ПроГLамеры объединяйтесь..
Re: надписи на кнопках в MessageBox
От: igr2002  
Дата: 24.04.03 15:26
Оценка:
Здравствуйте, SergeL, Вы писали:

SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?



Как вообще изменить надписи на кнопках MessageBox, я не знаю, а для частного случая проходит такой способ:
Допустим MessageBox вызывается тогда, когда активный, например, MainFrame. Вешаем на него обработчик OnActivate и пишем (для случая MB_YESNOCANCEL) приблизительно такое:


void CMainFrame::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized) 
{
    CFrameWnd::OnActivate(nState, pWndOther, bMinimized);
    
    if ( nState!=WA_INACTIVE || !pWndOther )
        return;
        
    CWnd *pWndButton;
    if  ( pWndButton = pWndOther->GetDlgItem(IDYES) )
        pWndButton->SetWindowText("Да");
    if  ( pWndButton = pWndOther->GetDlgItem(IDNO) )
        pWndButton->SetWindowText("Нет");
    if  ( pWndButton = pWndOther->GetDlgItem(IDCANCEL) )
        pWndButton->SetWindowText("На фиг");
}


Желательно при вызове MessageBox добавить в него стиль MB_SETFOREGROUND:


AfxMessageBox("бла-бла-бла", MB_YESNOCANCEL|MB_ICONQUESTION|MB_SETFOREGROUND);
Re: надписи на кнопках в MessageBox
От: Кодт Россия  
Дата: 24.04.03 15:46
Оценка: +1
Здравствуйте, SergeL, Вы писали:

SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?


Еще есть такая программа "BazarBox" — которая кастомизирует интерфейс па-пацански,
типа "Нафиг — Нефиг — Пофиг", и можно настроить ваще как хочиш.

(ищи на www.listsoft.ru)
... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re: UP
От: remark Россия http://www.1024cores.net/
Дата: 28.09.06 15:02
Оценка:
Здравствуйте, SergeL, Вы писали:

SL>Есть диалговое окно MessageBox, в нем содержатся описание собыия и некоторые инструкции для пользователя, что делать. Что-то вроде "если так, то нажмите "ДА" иначе нажмите "НЕТ"". Возникла проблема, если программа запусакется в анлгийских Windows, то при установленном флаге MB_YESNO, кнопки называются не 'Да' и 'Нет', а 'Yes' и 'No'. Можно конечно получить значение LOCALEID, и хранить два варианта инструкций, но может можно как-нибудь получить из ресурсов что-ли эти 'Yes', 'No' и т.д. ?


SL>С уважением,

SL>Литвинов С.М,


Такая же проблема.
Ни у кого за 3 года идей не появилось?




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: надписи на кнопках в MessageBox
От: Asterix  
Дата: 28.09.06 23:54
Оценка:
например поставить локальный хук и в обработчике
сделать замену строки
тут пример http://www.catch22.net/tuts/msgbox.asp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.