Messagebox c visual studio

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

Функция MessageBox создает, отображает на экране и оперирует окном сообщений. Окно сообщений содержит определяемое программой сообщение и заголовок, плюс любую комбинацию предопределенных пиктограмм и командных кнопок.

#include
#pragma hdrstop
#pragma argsused

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
<
MessageBox(
NULL,
"Привет!",
"Дай пять",
MB_YESNO | //Да нет (кнопки)
MB_DEFBUTTON1 | //Выделеная кнопка
MB_ICONEXCLAMATION | //Тип иконки
MB_DEFAULT_DESKTOP_ONLY
);
return 0;
>

int MessageBox
(
HWND hWnd, // дескриптор окна владельца
LPCTSTR lpText, // адрес текста в окне сообщений
LPCTSTR lpCaption, // адрес заголовка в окне сообщений
UINT uType // стиль окна сообщений
);

Параметры
hWnd
Идентифицирует окно владельца блока сообщений, которым оно было создано. Если этот параметр имеет значение ПУСТО (NULL), у блока сообщения нет окна владельца.
lpText
Указывает на строку с символом нуля в конце, содержащую сообщение, которое должно быть отражено на экране.
lpCaption
Указывает на строку с символом нуля в конце, используемую для заголовка диалогового окна. Если этот параметр значение ПУСТО (NULL), то по умолчанию используется заголовок Ошибка (Error).
uType
Определяет установку битов флажков, которые обуславливают содержание и поведение диалогового окна. Этот параметр может быть комбинацией флажков из ниже следующих групп флажков.
Определите один из следующих флажков, чтобы указать кнопки, содержащиеся в окне сообщений:

  • MB_ABORTRETRYIGNORE — Окно сообщение содержит три командных кнопки: Прервать (Abort), Повторить (Retry) и Проигнорировать (Ignore).
  • MB_OK — Окно сообщение содержит одну командную кнопку: OK. Это по умолчанию.
  • MB_OKCANCEL — Окно сообщение содержит две командных кнопки: OK и Отменить (Cancel).
  • MB_RETRYCANCEL — Окно сообщение содержит две командных кнопки: Повторить (Retry) и Отменить (Cancel).
  • MB_YESNO — Окно сообщение содержит две командных кнопки: Да (Yes) и Нет (No).
  • MB_YESNOCANCEL — Окно сообщение содержит три командных кнопки: Да (Yes), Нет (No) и Отменить (Cancel).

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

  • MB_ICONEXCLAMATION, MB_ICONWARNING — В окне сообщений появляется пиктограмма восклицательного знака.
  • MB_ICONINFORMATION, MB_ICONASTERISK — В окне сообщений появляется пиктограмма, состоящая из символа i нижнего регистра в круге.
  • MB_ICONQUESTION — В окне сообщений появляется пиктограмма в виде знака вопроса.
  • MB_ICONSTOP,MB_ICONERROR,MB_ICONHAND — В окне сообщений появляется пиктограмма в виде стоп-сигнала.

Определите один из следующих флажков, чтобы указать заданную по умолчанию кнопку:

  • MB_DEFBUTTON1 — Первая кнопка — основная кнопка. MB_DEFBUTTON1 — значение по умолчанию, если не определена кнопка MB_DEFBUTTON2, MB_DEFBUTTON3 или MB_DEFBUTTON4.
  • MB_DEFBUTTON2 — Вторая кнопка — основная кнопка.
  • MB_DEFBUTTON3 — Третья кнопка — основная кнопка.
  • MB_DEFBUTTON4 — Четвертая кнопка — основная кнопка.

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

  • MB_APPLMODAL — Пользователь должен ответить окну сообщений перед продолжением работы в окне, которое идентифицировано параметром hWnd. Однако, пользователь может перемещаться в окнах других прикладных программ и работать в этих окнах.В зависимости от иерархии окон в прикладной программе, пользователь может получить возможность, чтобы перемещаться в другие окна в пределах прикладной программы. Все дочерние окна родителя окна сообщений автоматически блокируются, однако выскакивающие окна — нет.MB_APPLMODAL — значение по умолчанию, если не определен флажок, ни MB_SYSTEMMODAL, ни MB_TASKMODAL.
  • MB_SYSTEMMODAL — То же самое, что и MB_APPLMODAL за исключением того, что окно сообщений имеет стиль WS_EX_TOPMOST. Используйте системно — модальные окна сообщений, чтобы уведомлять пользователя о серьезных, потенциально опасных ошибках, которые требуют немедленного внимания (например, запуск программы при нехватке памяти). Этот флажок не имеет никакого влияния на способность пользователя взаимодействовать с другими окнами, а не те, которые связаны с hWnd.
  • MB_TASKMODAL — То же самое, что и MB_APPLMODAL за исключением того, что все окна верхнего уровня, принадлежащие текущей задаче, заблокированы, если параметр hWnd имеет значение ПУСТО (NULL). Используйте этот флажок, когда вызывающая прикладная программа или библиотека не имеют доступного дескриптора окна, но все еще должны сохранять вводимые данные для других окон в текущей прикладной программе без приостановки работы других прикладных программ.

В дополнение, вы можете устанавливать ниже перечисленные флажки:
MB_DEFAULT_DESKTOP_ONLY
Рабочий стол, в настоящее время принимающий ввод, должен быть заданным по умолчанию рабочим столом; иначе, функция не выполняет задачу. Заданный по умолчанию рабочий стол — первая запущенная прикладная программа, после того, как пользователь вошел в систему.
MB_HELP
Прибавляет кнопку Справка (Help) в окно сообщений. Выбор кнопки Help или нажатие F1 генерирует событие появления Справки.
MB_RIGHT
Выравнивание текста справа.
MB_RTLREADING
Отображает на экране сообщение и текст заголовка с использованием порядка зеркального отображения для Еврейских и Арабских систем письменности.
MB_SETFOREGROUND
Окно сообщений становится приоритетным окном. Внутри Windows для окна сообщений вызывает функцию SetForegroundWindow.
MB_TOPMOST
Окно сообщений создается со стилем окна WS_EX_TOPMOST.
MB_SERVICE_NOTIFICATION
Только для Windows NT: вызывающая программа является обслуживающей по уведомлению пользователя о событии. Функция отображает окно сообщений на текущем активном рабочем столе, даже если никто из пользователей не вошел в систему компьютера.
Если этот флажок установлен, параметр hWnd должен иметь значение ПУСТО (NULL). Это такое окно сообщений, которое может появляться на другом рабочем столе, а не только на том, которое соответствует Wnd.
Для Windows NT версии 4.0, значение MB_SERVICE_NOTIFICATION изменилось. См. WINUSER.H для старых и новых значений. Windows NT 4.0 обеспечивает совместимость вниз для существующих ранее услуг, при помощи преобразования данных старых значений в новых значениях при реализации MessageBox и MessageBoxEx. Это преобразование данных делается только для исполнимых программ (.exe), которые имеют номер версии, как установлено компоновщиком, меньше чем 4.0.
Чтобы сформировать обслуживание, которое использует MB_SERVICE_NOTIFICATION и возможность запускать, и Windows NT 3.x и Windows NT 4.0, Вы имеете два пу
ти:

  1. Во время компоновки, определите номер версии меньше чем 4.0; или
  2. Во время компоновки, определите версию 4.0.
Читайте также:  Бесплатные минусовки в формате mp3

Во время запуска, используйте функцию GetVersionEx, чтобы проверить системную версию. Тогда при продолжении запуска Windows NT 3.x, используйте MB_SERVICE_NOTIFICATION_NT3X; а для Windows NT 4.0, используйте MB_SERVICE_NOTIFICATION.
MB_SERVICE_NOTIFICATION_NT3X
Только для Windows NT: Это значение соответствует значению, определенному для MB_SERVICE_NOTIFICATION для версии 3.51 Windows NT.
Возвращаемые значения
Возвращаемое значение нулевое, если недостаточно памяти, чтобы создать окно сообщений.
Если функция завершается успешно, возвращаемое значение — одно из следующих значений элемента меню, возвращаемых диалоговым окном:

  • IDABORT — Была выбрана кнопка Прервать (Abort).
  • IDCANCEL — Была выбрана кнопка Отменить (Cancel).
  • IDIGNORE — Была выбрана кнопка Игнорировать (Ignore).
  • IDNO — Была выбрана кнопка Нет (No).
  • IDOK — Была выбрана кнопка OK.
  • IDRETRY — Была выбрана кнопка Повторить (Retry).
  • IDYES — Была выбрана кнопка Да (Ye).

Если окно сообщений имеет кнопку Отменить (Cancel), функция возвращает значение IDCANCEL тогда, если или нажата клавиша ESC, или выбрана кнопка Cancel. Если у окна сообщений нет кнопки Cancel, нажатие на ESC не имеет никакого эффекта.

Я создал базовое приложение Windows C ++ в Visual Studio 2015, и у меня есть несколько ошибок:

Ошибки:

Решение

Вы решили использовать текст ANSI, поэтому вы должны использовать MessageBoxA явно вместо макроса MessageBox ,

В качестве альтернативы вы можете использовать TEXT макрос, чтобы компилятор автоматически соответствовал типу строк и функций.

Другие решения

Проблема здесь в Win32 TCHAR модель.

Там на самом деле нет MessageBox функция: MessageBox это препроцессор #define , который расширяется до MessageBoxA или же MessageBoxW на основе настроек вашего проекта (ANSI / MBCS или Unicode, соответственно).

Начиная с VS2005, дефолт настройка в Visual Studio была Unicode (чтобы быть более точным: UTF-16). Итак MessageBoxW API (то есть версия Unicode) выбирается в этом случае компилятором.

MessageBoxW API берет Unicode (UTF-16) строки, представлены через wchar_t указатели (непонятные LPCWSTR Макрос препроцессора расширен до const wchar_t* то есть NUL строка Unicode UTF-16 в стиле C).

Строковые литералы Unicode (UTF-16) представлены с использованием L". " синтаксис (обратите внимание на L префикс).
Так что пока "Test_text" является строковым литералом ANSI, L"Test_text" является строковым литералом Unicode (UTF-16)

Поскольку вы (неявно, через настройки Visual Studio по умолчанию) выполняете сборку Unicode, вы должны украсить свои строковые литералы с помощью L префикс, например.:

Альтернативой является декорирование строковых литералов с использованием _T(". ") или же TEXT(". ") макрос . Они будут расширены до простых ". " Строковые литералы ANSI в сборках ANSI / MBCS и строковые литералы Unicode (UTF-16) L". " в сборках Unicode (которые используются по умолчанию в современных версиях Visual Studio).

Лично я считаю модель TCHAR устаревшей моделью из прошлого (я не вижу причин для создания сборок ANSI современных приложений C32 Win32) и считаю, что современные API-интерфейсы Windows доступны только для Unicode (например, DrawThemeText() ), Я бы просто украсил строковые литералы, используя L". " префикс и вид забыли о сборках ANSI.

Читайте также:  Amazon prime что это такое

MessageBox в этом случае фактически является MessageBoxW, он принимает строки в юникоде. Вы можете исправить это следующим образом:

Вы не можете передать буквально такую ​​строку.

TEXT макрос, который расширяется до нужного типа строки в зависимости от способа компиляции.

Вам нужно выбрать правильную настройку для Character Set для вашего проекта. В свойствах вашего проекта Visual Studio перейдите к General категория. В есть запись Character Set ,

Если вы выбираете Unicode Character Set компилятор определит _UNICODE для вас и всех функций, таких как MessageBox оценим их широкоформатный вариант, как MessageBoxW ,

Если вы выбираете Multi-Byte (не рекомендуется) компилятор определит _MBCS для вас и функции будут оцениваться по многобайтовым вариантам, вроде MessageBoxA ,

То же самое касается строк, макросов, упомянутых в ответах (например, TEXT ) добавлю L перед всеми вашими строками в среде Unicode.

ИМХО, есть очень мало причин, по которым кто-то хочет писать явно против W или же A методы. Если вам нужно сделать это, чтобы сделать ваш компилятор счастливым, вы должны перепроверить ваши настройки.

Определение

Отображает окно сообщения (диалоговое окно) с текстом для пользователя. Displays a message window, also known as a dialog box, which presents a message to the user. Это модальное окно, блокирующее другие действия в приложении, пока пользователь не закроет его. It is a modal window, blocking other actions in the application until the user closes it. MessageBox может содержать текст, кнопки и символы для отображения пользователю информации и инструкций. A MessageBox can contain text, buttons, and symbols that inform and instruct the user.

Примеры

В следующем примере кода показано, как использовать объект MessageBox для информирования пользователя об отсутствующей записи TextBoxв. The following code example shows how to use a MessageBox to inform the user of a missing entry in a TextBox. Для этого примера требуется, чтобы метод вызывался из существующей формы с TextBox именем ServerName . This example requires that the method is called from an existing form with a TextBox named ServerName on it.

В следующем примере кода показано, как задать пользователю да или нет вопроса и принять решение, основанное на ответе. The following code example shows how to ask the user a yes or no question and make a decision based on the response.

Комментарии

Нельзя создать новый экземпляр MessageBox класса. You cannot create a new instance of the MessageBox class. Чтобы отобразить окно сообщения, вызовите static метод. MessageBox.Show To display a message box, call the static method MessageBox.Show. Заголовок, сообщение, кнопки и значки, отображаемые в окне сообщения, определяются параметрами, передаваемыми этому методу. The title, message, buttons, and icons displayed in the message box are determined by parameters that you pass to this method.

Методы

Определяет, равен ли указанный объект текущему объекту. Determines whether the specified object is equal to the current object.

(Унаследовано от Object)

GetHashCode()

Служит в качестве хэш-функции по умолчанию. Serves as the default hash function.

(Унаследовано от Object)

GetType()

Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

(Унаследовано от Object)

MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Унаследовано от Object)

Show(IWin32Window, String)

Отображает перед заданным объектом окно сообщения, содержащее заданный текст. Displays a message box in front of the specified object and with the specified text.

Отображает перед заданным объектом окно сообщения, содержащее заданный текст и заголовок. Displays a message box in front of the specified object and with the specified text and caption.

Отображает перед заданным объектом окно сообщения, содержащее заданный текст, заголовок и кнопки. Displays a message box in front of the specified object and with the specified text, caption, and buttons.

Отображает перед заданным объектом окно сообщения, содержащее заданный текст, заголовок, кнопки и значок. Displays a message box in front of the specified object and with the specified text, caption, buttons, and icon.

Читайте также:  Asusfans ru поиск драйверов

Отображает перед заданным объектом окно сообщения, содержащее заданный текст, заголовок, кнопки, значок и кнопку по умолчанию. Displays a message box in front of the specified object and with the specified text, caption, buttons, icon, and default button.

Отображает перед заданным объектом окно сообщения, содержащее заданный текст, заголовок, кнопки, значок, кнопку по умолчанию и параметры. Displays a message box in front of the specified object and with the specified text, caption, buttons, icon, default button, and options.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки. Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки и HelpNavigator . Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file and HelpNavigator .

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки, HelpNavigator и раздел справки. Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator , and Help topic.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки и ключевое слово "Справка". Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file and Help keyword.

Отображает окно сообщения с заданным текстом. Displays a message box with specified text.

Отображает окно сообщения с заданным текстом и заголовком. Displays a message box with specified text and caption.

Отображает окно сообщения с заданным текстом, заголовком и кнопками. Displays a message box with specified text, caption, and buttons.

Отображает окно сообщения с заданным текстом, заголовком, кнопками и значком. Displays a message box with specified text, caption, buttons, and icon.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком и кнопкой по умолчанию. Displays a message box with the specified text, caption, buttons, icon, and default button.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию и параметрами для выбора. Displays a message box with the specified text, caption, buttons, icon, default button, and options.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора и кнопкой "Справка". Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки. Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки и HelpNavigator . Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file and HelpNavigator .

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки, HelpNavigator и раздел справки. Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator , and Help topic.

Отображает окно сообщения с заданным текстом, заголовком, кнопками, значком, кнопкой по умолчанию, параметрами для выбора, кнопкой "Справка", используя заданный файл справки и ключевое слово "Справка". Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file and Help keyword.

Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.