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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.