Давайте рассмотрим структуру API-функции MessageBox, выглядит она так:
MessageBox(hwnd,"Текст сообщения","Заголовок", кнопки | иконка)
Первым параметром идет hwnd - дескриптор окна, его принято записывать еще так: hWnd, что значит handle Window - "хэндл окна". Здесь указывается хэндл родительского окна, от которого происходит сообщение. Если такого окна нет, то в этот параметр можно записать значение 0 или NULL.
Следущим параметром MessageBox, идет текст сообщения. Третий параметр это заголовок, здесь, я думаю, все понятно, перейдем к четвертому параметру.
Всего в сообщении можно использовать до четырех кнопок, их разновидности:
MB_OK - кнопка окей
MB_YESNO - да, нет
MB_OKCANCEL - окей, отмена
MB_HELP - вызов помощи
MB_RETRYCANCEL - повторить, отмена
MB_YESNOCANCEL - да, нет, отмена
MB_CANCELTRYCONTINUE - отмена, повторить, продолжить
MB_ABORTRETRYIGNORE - прервать, повторить, пропустить
так же в сообщении можно использовать различные иконки:
MB_ICONASTERISK - синий круг с восклицательным знаком
MB_ICONINFORMATION - то же что и asterisk
MB_ICONERROR - знак стоп
MB_ICONSTOP - знак стоп
MB_ICONHAND - знак стоп
MB_ICONEXCLAMATION - желтый треугольник с воклицательным знаком
MB_ICONWARNING - то же
MB_ICONQUESTION - знак вопроса
Вообще флагам соответствуют цифры-идентификаторы, их описание можно посмотреть в библиотеке "winuser.h", выглядит это так:
....
#define MB_0K 0
#define MB_OKCANCEL 1
#define MB_YESNOCANCEL 3
.....
в каких-то случаях можно использовать эти цифры вместо набора символьных имен флагов, но следует учитывать что цифры-идентификаторы разных групп могут совпадать, например MB_OK, MB_APPLMODAL и MB_DEFBUTTON1 все определены нулем.
Для получения возвращаемого значения функцией служат идентификаторы нажатой кнопки:
IDOK - нажата кнопка окей
IDCANCEL - отмена
IDABORT - прервать
IDRETRY - повторить
IDIGNORE - пропустить
IDYES - да
IDNO - нет
IDCLOSE - закрыть
IDHELP - справка
IDTRYAGAIN - вернуться, заново
IDCONTINUE - продолжить
теперь рассмотрим конструкцию при помощи которой можно получить возвращаемые значения. Если в сообщении используются две кнопки, наприример "да", "нет", то можно воспользоваться такой конструкцией:
if(MessageBox(0,"message","title",MB_YESNO) == IDYES)
{
если нажата "да" - действие;
}
else
{
если "нет" - действие;
}
хорошо, а что делать если кнопок несколько? Тогда необходимо воспользоваться числовой переменной в которую будет грузиться цифровой идентификатор:
int a = 0;
a = MessageBox(NULL,"message","title",MB_YESNOCANCEL)
if(a=6) //IDYES = 6
действие такое-то
if(a=IDNO)
если "нет" - такое-то
if(a=2) //IDCANCEL = 2
если "отменить".
или воспользоваться оператором "switch".
Вообще тема Messagebox, MessageBoxEx, MessageBoxIndirect а также структуры MSGBOXPARAMS довольно обширная и вполне заслуживает еще одной статьи, а то двух, так что вполне возможно, что это не последняя статья посвященная этой теме.
#c++ #messagebox