Найти тему
Junior Coder

C++. Как вывести окно сообщений MessageBox

Давайте рассмотрим структуру 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 - прервать, повторить, пропустить

-2

так же в сообщении можно использовать различные иконки:

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