Функция MessageBox (winuser.h)
Отображает модальное диалоговое окно, содержащее системный значок, набор кнопок и краткое сообщение для конкретного приложения, например сведения о состоянии или ошибке. Окно сообщения возвращает целочисленное значение, указывающее, какую кнопку нажал пользователь.
Синтаксис
int MessageBox( [in, optional] HWND hWnd, [in, optional] LPCTSTR lpText, [in, optional] LPCTSTR lpCaption, [in] UINT uType );
Параметры
[in, optional] hWnd
Дескриптор окна владельца создаваемого окна сообщения. Если этот параметр имеет значение NULL, окно сообщения не имеет окна владельца.
[in, optional] lpText
Тип: LPCTSTR
Отображаемое сообщение. Если строка состоит из нескольких строк, строки можно разделить с помощью символа возврата каретки и (или) перевода строки между каждой строкой.
[in, optional] lpCaption
Тип: LPCTSTR
Заголовок диалогового окна. Если этот параметр имеет значение NULL, по умолчанию используется название Error.
Содержимое и поведение диалогового окна. Этот параметр может быть сочетанием флагов из следующих групп флагов.
Чтобы указать кнопки, отображаемые в окне сообщения, укажите одно из следующих значений.
| Значение | Значение |
|---|---|
| MB_ABORTRETRYIGNORE 0x00000002L | Окно сообщения содержит три кнопки: «Прервать», «Повторить» и «Пропустить«. |
| MB_CANCELTRYCONTINUE 0x00000006L | Окно сообщения содержит три кнопки: «Отмена«, «Повторить попытку«, «Продолжить«. Используйте этот тип окна сообщения вместо MB_ABORTRETRYIGNORE. |
| MB_HELP 0x00004000L | Добавляет в окно сообщения кнопку Справка . Когда пользователь нажимает кнопку Справка или клавишу F1, система отправляет владельцу WM_HELP сообщение. |
| MB_OK 0x00000000L | В окне сообщения содержится одна кнопка: ОК. Это значение по умолчанию. |
| MB_OKCANCEL 0x00000001L | Окно сообщения содержит две кнопки: ОК и Отмена. |
| MB_RETRYCANCEL 0x00000005L | Окно сообщения содержит две кнопки: «Повторить» и «Отмена«. |
| MB_YESNO 0x00000004L | Окно сообщения содержит две кнопки: Да и Нет. |
| MB_YESNOCANCEL 0x00000003L | Окно сообщения содержит три кнопки: Да, Нет и Отмена. |
Чтобы отобразить значок в окне сообщения, укажите одно из следующих значений.
| Значение | Значение |
|---|---|
| MB_ICONEXCLAMATION 0x00000030L | В окне сообщения появится значок восклицательного знака. |
| MB_ICONWARNING 0x00000030L | В окне сообщения появится значок восклицательного знака. |
| MB_ICONINFORMATION 0x00000040L | В окне сообщения появится значок, состоящий из строчной буквы i в круге. |
| MB_ICONASTERISK 0x00000040L | В окне сообщения появится значок, состоящий из строчной буквы i в круге. |
| MB_ICONQUESTION 0x00000020L | В окне сообщения появится значок вопросительного знака. Не рекомендуется использовать значок вопросительного знака для сообщений, поскольку не может четко отразить определенный тип сообщения, и оформление сообщения в виде вопроса может применяться для любого типа сообщений. Кроме того, пользователей может приводить в замешательство вопросительный знак в сообщении со справочной информацией. Таким образом, не следует использовать символ вопросительного знака в окнах сообщений. Система продолжает поддерживать его включение только для обратной совместимости. |
| MB_ICONSTOP 0x00000010L | В окне сообщения появится значок стоп-знака. |
| MB_ICONERROR 0x00000010L | В окне сообщения появится значок стоп-знака. |
| MB_ICONHAND 0x00000010L | В окне сообщения появится значок стоп-знака. |
Чтобы указать кнопку по умолчанию, укажите одно из следующих значений.
| Значение | Значение |
|---|---|
| MB_DEFBUTTON1 0x00000000L | Первая кнопка является кнопкой по умолчанию. |
MB_DEFBUTTON1 используется по умолчанию, если не указано MB_DEFBUTTON2, MB_DEFBUTTON3 или MB_DEFBUTTON4 .
Чтобы указать модальность диалогового окна, укажите одно из следующих значений.
| Значение | Значение |
|---|---|
| MB_APPLMODAL 0x00000000L | Пользователь должен ответить на окно сообщения, прежде чем продолжить работу в окне, определяемом параметром hWnd . Однако пользователь может переходить в окна других потоков и работать в этих окнах. |
В зависимости от иерархии окон в приложении пользователь может перейти к другим окнам в потоке. Все дочерние окна родительского окна сообщения автоматически отключаются, а всплывающие окна — нет.
MB_APPLMODAL используется по умолчанию, если не указано ни MB_SYSTEMMODAL, ни MB_TASKMODAL.
Чтобы указать другие параметры, используйте одно или несколько из следующих значений.
| Значение | Значение |
|---|---|
| MB_DEFAULT_DESKTOP_ONLY 0x00020000L | Аналогично рабочему столу станции интерактивного окна. Дополнительные сведения см. в разделе Оконные станции. |
Если текущий рабочий стол ввода не является рабочим столом по умолчанию, MessageBox не возвращается, пока пользователь не переключится на рабочий стол по умолчанию.
Службы терминалов: Если вызывающий поток имеет маркер олицетворения, функция направляет окно сообщения в сеанс, указанный в токене олицетворения.
Если этот флаг установлен, параметр hWnd должен иметь значение NULL. Это необходимо для того, чтобы окно сообщения отображалось на рабочем столе, отличном от рабочего стола, соответствующего hWnd.
Сведения о безопасности при использовании этого флага см. в разделе Интерактивные службы. В частности, имейте в виду, что этот флаг может создавать интерактивное содержимое на заблокированном рабочем столе и поэтому его следует использовать только в очень ограниченном наборе сценариев, таких как нехватка ресурсов.
Возвращаемое значение
Если в окне сообщения есть кнопка Отмена , функция возвращает значение IDCANCEL при нажатии клавиши ESC или нажатии кнопки Отмена . Если в окне сообщения нет кнопки Отмена , нажатие клавиши ESC не будет действовать, если нет кнопки MB_OK. Если отображается кнопка MB_OK и пользователь нажимает клавишу ESC, возвращается значение IDOK.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Если функция выполнена успешно, возвращается одно из следующих значений пункта меню.
| Возвращаемый код или значение | Описание |
|---|---|
| IDABORT 3 | Была выбрана кнопка «Прервать «. |
| IDCANCEL 2 | Была выбрана кнопка Отмена . |
| IDCONTINUE 11 | Была выбрана кнопка Продолжить . |
| IDIGNORE 5 | Была выбрана кнопка Пропустить . |
| IDNO 7 | Выбрана кнопка Нет . |
| IDOK 1 | Была выбрана кнопка ОК . |
| IDRETRY 4 | Была выбрана кнопка Повторить . |
| IDTRYAGAIN 10 | Была выбрана кнопка Повторить попытку. |
| IDYES 6 | Выбрана кнопка Да . |
Комментарии
Следующие системные значки можно использовать в окне сообщения, задав параметру uType соответствующее значение флага.
| Значок | Значения флагов |
|---|---|
| MB_ICONHAND, MB_ICONSTOP или MB_ICONERROR | |
| MB_ICONQUESTION | |
| MB_ICONEXCLAMATION или MB_ICONWARNING | |
| MB_ICONASTERISK или MB_ICONINFORMATION |
Добавление двух меток справа налево (RLM), представленных символом форматирования Юникода U+200F, в начале отображаемой строки MessageBox интерпретируется подсистемой отрисовки MessageBox таким образом, чтобы порядок чтения MessageBox отображался как справа налево (RTL).
При использовании системно-модального окна сообщения, указывающего на нехватку памяти в системе, строки, на которые указывают параметры lpText и lpCaption , не следует брать из файла ресурсов, так как попытка загрузки ресурса может завершиться ошибкой.
Если вы создаете окно сообщения при наличии диалогового окна, используйте дескриптор для диалогового окна в качестве параметра hWnd . Параметр hWnd не должен идентифицировать дочернее окно, например элемент управления в диалоговом окне.
Примеры
В следующем примере приложение отображает окно сообщения, которое запрашивает у пользователя действие после возникновения ошибки. В окне сообщения отображается сообщение, описывающее условие ошибки и способы его устранения. Стиль MB_CANCELTRYCONTINUE предписывает MessageBox предоставить три кнопки, с помощью которых пользователь может выбрать способ продолжения. Стиль MB_DEFBUTTON2 устанавливает фокус по умолчанию на вторую кнопку окна сообщения, в данном случае кнопку Повторить попытку.
int DisplayResourceNAMessageBox() < int msgboxID = MessageBox( NULL, (LPCWSTR)L"Resource not available\nDo you want to try again?", (LPCWSTR)L"Account Details", MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2 ); switch (msgboxID) < case IDCANCEL: // TODO: add code break; case IDTRYAGAIN: // TODO: add code break; case IDCONTINUE: // TODO: add code break; >return msgboxID; >
На следующем рисунке показаны выходные данные из предыдущего примера кода:

Другой пример окна сообщения см. в разделе Отображение окна сообщения.
Требования
| Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
| Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
| Целевая платформа | Windows |
| Header | winuser.h (включая Windows.h) |
| Библиотека | User32.lib |
| DLL | User32.dll |
| Набор API | ext-ms-win-ntuser-dialogbox-l1-1-0 (представлено в Windows 8) |
См. также раздел
Основные понятия
Другие ресурсы
Справочные материалы
Как в messagebox вывести значение переменной c
Как правило, для вывода сообщений применяется элемент MessageBox. Однако кроме сообственно вывода строки сообщения данный элемент может устанавливать ряд настроек, которые определяют его поведение.
Для вывода сообщения в классе MessageBox предусмотрен метод Show , который имеет различные версии и может принимать ряд параметров. Рассмотрим одну из наиболее используемых версий:
public static DialogResult Show( string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options )
Здесь применяются следующие параметры:
text : текст сообщения
caption : текст заголовка окна сообщения
buttons : кнопки, используемые в окне сообщения. Принимает одно из значений перечисления MessageBoxButtons :
- AbortRetryIgnore : три кнопки Abort (Отмена), Retry (Повтор), Ignore (Пропустить)
- OK : одна кнопка OK
- OKCancel : две кнопки OK и Cancel (Отмена)
- RetryCancel : две кнопки Retry (Повтор) и Cancel (Отмена)
- YesNo : две кнопки Yes и No
- YesNoCancel : три кнопки Yes, No и Cancel (Отмена)
Таким образом, в зависимости от выбора окно сообщения может иметь от одной до трех кнопок.
icon : значок окна сообщения. Может принимать одно из следующих значений перечисления MessageBoxIcon :
- Asterisk, Information : значок, состоящий из буквы i в нижнем регистре, помещенной в кружок
- Error, Hand, Stop : значок, состоящий из белого знака «X» на круге красного цвета.
- Exclamation, Warning : значок, состоящий из восклицательного знака в желтом треугольнике
- Question : значок, состоящий из вопросительного знака на периметре круга
- None : значок у сообщения отсутствует
defaultButton : кнопка, на которую по умолчанию устанавливается фокус. Принимает одно из значений перечисления MessageBoxDefaultButton :
- Button1 : первая кнопка из тех, которые задаются перечислением MessageBoxButtons
- Button2 : вторая кнопка
- Button3 : третья кнопка
options : параметры окна сообщения. Принимает одно из значений перечисления MessageBoxOptions :
- DefaultDesktopOnly : окно сообщения отображается на активном рабочем столе.
- RightAlign : текст окна сообщения выравнивается по правому краю
- RtlReading : все элементы окна располагаются в обратном порядке справа налево
- ServiceNotification : окно сообщения отображается на активном рабочем столе, даже если в системе не зарегистрирован ни один пользователь
Нередко используется один параметр — текст сообщения. Но посмотрим, как использовать остальные параметры. Пусть у нас есть кнопка, в обработчике нажатия которой открывается следующее окно сообщения:
private void button1_Click(object sender, EventArgs e)

Однако нам не просто дается возможность установки кнопок в окне сообщения. Метод MessageBox.Show возвращает объект DialogResult , с помощью которого мы можем узнать, какую кнопку в окне сообщения нажал пользователь. DialogResult представляет перечисление, в котором определены следующие значения:
- Abort : нажата кнопка Abort
- Retry : нажата кнопка Retry
- Ignore : нажата кнопка Ignore
- OK : нажата кнопка OK
- Cancel : нажата кнопка Cancel
- None : отсутствие результата
- Yes : нажата кнопка Yes и No
- No : нажата кнопка No
Используем обработку выбора пользователя, изменив обработчик нажатия кнопки следующим образом:
private void button1_Click(object sender, EventArgs e)
И теперь, если в окне сообщения мы выберем выриант Yes, то кнопка окрасится в красный цвет.
Как выводить переменную в MessageBox?
Здравствуйте. У меня есть функция с MessageBox. Но мне нужно сделать, чтобы в содержимое messagebox выводилась переменная «a». Попытался использовать вот это, но мало того, что переменная не вывелась, так еще и половина текста куда-то пропала:
#include int a = 10; int DisplayResourceNAMessageBox() < int msgboxID = MessageBox( NULL, (LPCTSTR)L"Resource not available\nDo you want to try again? "+a, (LPCTSTR)L"Account Details", MB_ICONWARNING | MB_OK | MB_DEFBUTTON1 ); return msgboxID; >int main()
P.S. Пример взял с сайта Майкрософта
- Вопрос задан более трёх лет назад
- 1098 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Для того, чтобы вывести переменную в MessageBox необходимо конвертировать ее в строку при помощи функции itoa или sprintf или использовать класс CString из MFC или ATL или класс std::string из STL. https://stackoverflow.com/questions/5590381/easies.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Программист на «си с крестами» и не только
Собственно, Александр Ананьев всё сказал.
А я хочу дополнить.
1. Вы решили заложиться на компиляцию ANSI/Unicode, но (LPCTSTR)L»Account Details» неправильно сконвертируется в ANSI. Правильно _T(«Account Details») . Хотя двадцать два года спустя на компиляцию ANSI, думаю, можно и забить?
2. MessageBox не предполагает выбора — зачем функции возвращать int?
Ответ написан более трёх лет назад
rxxxxxx @rxxxxxx Автор вопроса
Да я же просто как пример эту функцию написал. Точнее, писал ее даже не я, а она была взята с сайта Майкрософта
rxxxxxx, Покажите, откуда.
rxxxxxx, Нашёл.
1. Они не закладывались на компиляцию в ANSI. А преобразование const wchar_t* в LPCWSTR предполагается излишним — он и есть const wchar_t*.
2. В примере Microsoft есть выбор. У вас нет.
rxxxxxx, LP = long pointer, пережиток Win16.
C = const
W = wide
STR = string
Николай @romancelover
программист C++ под Linux
В языках С и С++ и WinApi LPCTSTR — это просто указатель на последовательность символов в памяти. Прибавление к нему числа не меняет последовательность символов, а только переводит позицию указателя. Поэтому код в примере выведет строку с 10-го символа (считая с 0), а не допишет число к строке.
Чтобы добиться нужного результата, нужно создать новую последовательность символов и передать указатель на неё в функцию. На Си можно использовать функции wcscpy, wcscat и _itow (или как её аналог в вашем компиляторе называется) или wsprintf (неудобно тем, что нужно следить за количеством символов, выделяемых под строку), на С++ лучше создать std::wstring (wstring так как тут LPCTSTR, и длинные символы, и программа собирается в Unicode режиме), записать туда строку и число (можно при помощи wostringstream), а потом передать в MessageBox указатель с помощью c_str().
Вывод int переменных в MessageBox

поиогите пожалуйста с выводом int переменных в massegeBox(» «);
дайте пожалуйста рабочий class который решает эту задачу,
вот ниже код: и мне нужно выдавать сообщение со значением переменной int i;
компилятор ругается, не хочет просто переприсвоить значению i, TYPE STRING ! ))))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { for (int i = 1; i 5; i++) { // Console.WriteLine(i); if (i5) { MessageBox.Show(" go to the document "); // string messagel = char[i]; } else { MessageBox.Show(" fredom ! clear ! next job ! "); } } } private void richTextBox1_TextChanged(object sender, EventArgs e) { } private void richTextBox2_TextChanged(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { } } }