Учитывая тот факт, что материл, который мы с Вами разбираем на этом уроке абсолютно новый для Вас, можно предположить что у Вас появился вопрос: "Что такое окно с сообщением?". Вы сто процентов сталкивались с ним при повседневной работе с Windows. Как один из вариантов можно привести пример следующего окна:
Итак, теперь, зная о чем идет речь, давайте научимся самостоятельно создавать такие окна. Для этого рассмотрим функцию, которая позвляет вывести окно c сообщением:
int AfxMessageBox(LPCTSTR lpszText, UINT nType=MB_OK, UINT nIDHelp=0);
Данная функция выводит в окно сообщения строку lpszText и использует идентификатор nIDHelp для перехода к соответсвующей теме справки при нажатии клавиши <F1> (заметим, что на данный момент параметр nIDHelp не предоставляет для нас практического интереса. Поэтому отложим исследование этого момента до рассмотрения темы, посвященной созданию справочной системы). Параметр nType задает тип окна сообщений и может принимать одно из следующих значений:
Возможные типы окна сообщения
Значение параметра nType
Описание
MB_OK
Окно содержит только кнопку OK
MB_OKCANCEL
Окно содержит две кнопки: OK и Cancel (Отмена)
MB_RETRYCANCEL
Окно содержит две кнопки: Retry и Cancel (Повтор и Отмена)
MB_ABORTRETRYIGNORE
Окно содержит три кнопки: Abort, Retry и Ignore (Стоп, Повтор и Пропустить)
MB_YESNO
Окно содержит две кнопки: Yes и No (Да и Нет)
MB_YESNOCANCEL
Окно содержит три кнопки: Yes, No и Cancel (Да, Нет и Отмена)
Если Вы хотите также добавить иконку в информационное окно, Вы можете комбинировать указанные значения параметра nType с нижеследующими: MB_ICONEXCLAMATION (иконка -восклицательный знак), MB_ICONINFORMATION (или MB_ICONASTERISK; иконка - символ "i"), MB_ICONQUESTION (иконка - знак вопроса), MB_ICONSTOP (или MB_ICONHAND; иконка - "стоп").
Вы можете также назначить кнопку по умолчанию, если вы используете информационное окно с несколькими кнопками. Визуально, мы всегда можем определить кнопку по умолчанию по затемненному контуру вокруг кнопки. Для назначения кнопки по умолчанию, используйет соответсвенно одну из констант: MB_DEFBUTTON1 (кнопка по умолчанию - первая), MB_DEFBUTTON2 (вторая) или MB_DEFBUTTON3 (третья).
Ниже приводиться рисунок, иллюстрирующий использование констант: MB_ABORTRETRYIGNORE (три кнопки в окне сообщений), MB_ICONSTOP (иконка в виде запрещающего креста), MB_DEFBUTTON2 (кнопка "Повторить" назначена кнопкой по умолчанию). Окно было получено в результате вызова функции: AfxMessageBox("Используемые константы: MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_DEFBUTTON2", MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_DEFBUTTON2);
Функция возвращает одно из следующих значений:
Описание возвращаемого значения
Значение
Описание
IDOK
Была нажата кнопка OK
IDCANCEL
Была нажата кнопка Cancel (или клавиша <Esc>)
IDABORT
Была нажата кнопка Abort
IDIGNORE
Была нажата кнопка Ignore
IDYES
Была нажата кнопка Yes
IDNO
Была нажата кнопка No
IDRETRY
Была нажата кнопка Retry
0
Произошла ошибка при создании окна сообщений
Итак, солидный багаж знаний по окнам сообщений у Вас уже есть. Теперь немного о том, как и когда необходимо использовать окна сообщений? На вопрос "Когда?" ответ очевиден. Когда Вам необходимо предоставить пользователю запрос или сообщить пользователю о какой-то приятной новости, обычно, Вы будете использовать окна сообщений. Например, следующий фрагмент кода демонстрирует использование окна сообщений:
if (AfxMessageBox("Удаляем все файлы?", MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION) == IDYES){ //удаляем все файлы }
Заметим, что для вывода окна сообщения Вы можете также воспользоваться функцией
int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption=NULL, UINT nType=MB_OK);
Данная функция принимает lpszText в качестве строки сообщения, lpszCaption - заголовок окна сообщения, nType - стили окна сообщений (см. AfxMessageBox).
Основное различие между указанными функциями состоит в том, что функцию MessageBox возможно вызвать только при наличии главного окна. Еще одно отличие состоит в том, что функция MessageBox может создавать окна сообщений с произвольным заголовком, тогда как функция AfxMessageBox в качестве заголовка использует название приложения.