Поделиться через


Функция MessageBoxW (winuser.h)

Отображает модальное диалоговое окно, содержащее системный значок, набор кнопок и краткое сообщение для конкретного приложения, например сведения о состоянии или ошибке. Поле сообщения возвращает целочисленное значение, указывающее, какая кнопка щелкнула пользователя.

Синтаксис

int MessageBoxW(
  [in, optional] HWND    hWnd,
  [in, optional] LPCWSTR lpText,
  [in, optional] LPCWSTR lpCaption,
  [in]           UINT    uType
);

Параметры

[in, optional] hWnd

Тип: HWND

Дескриптор окна владельца создаваемого окна сообщения. Если этот параметр null, окно сообщения не имеет окна владельца.

[in, optional] lpText

Тип: LPCTSTR

Отображаемое сообщение. Если строка состоит из нескольких строк, можно разделить строки с помощью возвращаемого каретки и /или символа линии между каждой строкой.

[in, optional] lpCaption

Тип: LPCTSTR

Заголовок диалогового окна. Если этот параметр NULL, заголовок по умолчанию — ошибка.

[in] uType

Тип: UINT

Содержимое и поведение диалогового окна. Этот параметр может быть сочетанием флагов из следующих групп флагов.

Чтобы указать кнопки, отображаемые в окне сообщения, укажите одно из следующих значений.

Ценность Значение
MB_ABORTRETRYIGNORE
0x000000002L
Поле сообщения содержит три кнопки нажатия: прерывание, повторные попыткии игнорировать.
MB_CANCELTRYCONTINUE
0x000000006L
Поле сообщения содержит три кнопки нажатия: Отмена, повторите попытку, продолжить. Используйте этот тип поля сообщения вместо MB_ABORTRETRYIGNORE.
MB_HELP
0x00004000L
Добавляет кнопку справки в поле сообщения. Когда пользователь нажимает кнопку справки или нажимает клавишу F1, система отправляет WM_HELP сообщение владельцу.
MB_OK
0x000000000L
Поле сообщения содержит одну кнопку нажатия: ОК. Это значение по умолчанию.
MB_OKCANCEL
0x000000001L
Поле сообщения содержит две кнопки нажатия: ОК и Отмена.
MB_RETRYCANCEL
0x000000005L
Поле сообщения содержит две кнопки нажатия: повторные попытки и отмены.
MB_YESNO
0x000000004L
Поле сообщения содержит две кнопки нажатия: да и нет.
MB_YESNOCANCEL
0x000000003L
Поле сообщения содержит три кнопки нажатия: Да, Нети Отмена.
 

Чтобы отобразить значок в окне сообщения, укажите одно из следующих значений.

Ценность Значение
MB_ICONEXCLAMATION
0x000000030L
Значок восклицательного знака отображается в окне сообщения.
MB_ICONWARNING
0x000000030L
Значок восклицательного знака отображается в окне сообщения.
MB_ICONINFORMATION
0x000000040L
Значок, состоящий из строчной буквы i в круге, отображается в поле сообщения.
MB_ICONASTERISK
0x000000040L
Значок, состоящий из строчной буквы i в круге, отображается в поле сообщения.
MB_ICONQUESTION
0x000000020L
В окне сообщения появится значок вопросительного знака. Значок сообщения с вопросительным знаком больше не рекомендуется, так как он явно не представляет определенный тип сообщения и поскольку фраза сообщения в виде вопроса может применяться к любому типу сообщения. Кроме того, пользователи могут запутать вопросительный знак сообщения с информацией справки. Поэтому не используйте этот символ сообщения вопросительного знака в полях сообщения. Система продолжает поддерживать ее включение только для обратной совместимости.
MB_ICONSTOP
0x00000010L
Значок знака остановки отображается в окне сообщения.
MB_ICONERROR
0x00000010L
Значок знака остановки отображается в окне сообщения.
MB_ICONHAND
0x00000010L
Значок знака остановки отображается в окне сообщения.
 

Чтобы указать кнопку по умолчанию, укажите одно из следующих значений.

Ценность Значение
MB_DEFBUTTON1
0x000000000L
Первая кнопка — это кнопка по умолчанию.

MB_DEFBUTTON1 используется по умолчанию, если MB_DEFBUTTON2, MB_DEFBUTTON3или MB_DEFBUTTON4.

MB_DEFBUTTON2
0x00000100L
Вторая кнопка — это кнопка по умолчанию.
MB_DEFBUTTON3
0x00000200L
Третья кнопка — это кнопка по умолчанию.
MB_DEFBUTTON4
0x00000300L
Четвертая кнопка — это кнопка по умолчанию.
 

Чтобы указать модальность диалогового окна, укажите одно из следующих значений.

Ценность Значение
MB_APPLMODAL
0x000000000L
Пользователь должен ответить на поле сообщения, прежде чем продолжить работу в окне, определяемом параметром hWnd. Однако пользователь может перейти в окна других потоков и работать в этих окнах.

В зависимости от иерархии окон в приложении пользователь может перейти к другим окнам в потоке. Все дочерние окна родительского окна окна сообщения автоматически отключены, но всплывающие окна не являются.

MB_APPLMODAL по умолчанию, если ни MB_SYSTEMMODAL, ни MB_TASKMODAL не указан.

MB_SYSTEMMODAL
0x00001000L
То же, что и MB_APPLMODAL, за исключением того, что в поле сообщения есть стиль WS_EX_TOPMOST. Используйте системные модальные окна сообщений, чтобы уведомить пользователя о серьезных, потенциально разрушительных ошибках, требующих немедленного внимания (например, нехватки памяти). Этот флаг не влияет на способность пользователя взаимодействовать с окнами, кроме тех, которые связаны с hWnd.
MB_TASKMODAL
0x00002000L
То же, что и MB_APPLMODAL, за исключением того, что все окна верхнего уровня, принадлежащие текущему потоку, отключены, если параметр hWnd hWndNULL. Используйте этот флаг, если вызывающее приложение или библиотека не имеет дескриптора окна, но по-прежнему необходимо предотвратить входные данные в других окнах в вызывающем потоке без приостановки других потоков.
 

Чтобы указать другие параметры, используйте одно или несколько следующих значений.

Ценность Значение
MB_DEFAULT_DESKTOP_ONLY
0x0002000L
То же, что и рабочий стол интерактивной станции окон. Дополнительные сведения см. в станциях окон.

Если текущий рабочий стол ввода не является рабочим столом по умолчанию, MessageBox не возвращается, пока пользователь не переключается на рабочий стол по умолчанию.

MB_RIGHT
0x00080000L
Текст оправдан правильно.
MB_RTLREADING
0x00100000L
Отображает текст сообщения и заголовка с помощью порядка чтения справа налево на иврите и арабском языках.
MB_SETFOREGROUND
0x00010000L
Окно сообщения становится окном переднего плана. Внутри системы вызывается функция SetForegroundWindow для поля сообщения.
MB_TOPMOST
0x00040000L
Окно сообщения создается с помощью стиля окна WS_EX_TOPMOST.
MB_SERVICE_NOTIFICATION
0x00200000L
Вызывающий объект — это служба, уведомляющая пользователя о событии. Функция отображает окно сообщения на текущем активном рабочем столе, даже если на компьютере нет пользователя.

службах терминалов: Если вызывающий поток имеет маркер олицетворения, функция направляет поле сообщения в сеанс, указанный в маркере олицетворения.

Если этот флаг задан, параметр hWnd должен быть NULL. Это позволяет отображать окно сообщения на рабочем столе, отличном от рабочего стола, соответствующего hWnd.

Сведения о соображениях безопасности в отношении использования этого флага см. в интерактивных службах. В частности, следует помнить, что этот флаг может создавать интерактивное содержимое на заблокированном рабочем столе и поэтому следует использовать только для очень ограниченного набора сценариев, таких как исчерпание ресурсов.

Возвращаемое значение

Тип: int

Если в поле сообщения есть кнопка "Отмена ", функция возвращает значение IDCANCEL, если нажатие клавиши ESC или кнопка "Отмена ". Если в поле сообщения нет кнопка "Отмена", нажатие клавиши ESC не будет действовать, если кнопка MB_OK отсутствует. Если отображается кнопка MB_OK и пользователь нажимает ESC, возвращаемое значение будет idOK.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Если функция выполнена успешно, возвращаемое значение является одним из следующих значений элемента меню.

Возврат кода или значения Описание
IDABORT
3
Выбрана кнопка abort.
IDCANCEL
2
Выбрана кнопка "Отмена ".
IDCONTINUE
11
Выбрана кнопка "Продолжить".
IDIGNORE
5
Выбрана кнопка "Игнорировать".
IDNO
7
Выбрана кнопка "Нет".
IDOK
1
Выбрана кнопка ОК.
IDRETRY
4
Выбрана кнопка повторить попытку.
IDTRYAGAIN
10
Выбрана кнопка "Повторить попытку".
IDYES
6
Выбрана кнопка "Да".

Замечания

Следующие системные значки можно использовать в окне сообщения, задав параметр uType соответствующим значением флага.

Икона Значения флага
Значок MB_ICONHAND, MB_ICONSTOP и MB_ICONERROR MB_ICONHAND, MB_ICONSTOPили MB_ICONERROR
Значок для MB_ICONQUESTION MB_ICONQUESTION
Значок для MB_ICONEXCLAMATION и MB_ICONWARNING MB_ICONEXCLAMATION или MB_ICONWARNING
Значок для MB_ICONASTERISK и MB_ICONINFORMATION 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;
}

На следующем рисунке показаны выходные данные из предыдущего примера кода:

поле сообщения

Пример другого поля сообщения см. в разделе Отображение поля сообщения.

Заметка

Заголовок winuser.h определяет MessageBox как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll
набор API ext-ms-win-ntuser-dialogbox-l1-1-0 (представлено в Windows 8)

См. также

концептуальные

диалоговое окно

FlashWindow

MessageBeep

MessageBoxEx

MessageBoxIndirect

другие ресурсы

Справочник

SetForegroundWindow