
- •Глава 11 Окна диалога
- •Модальные окна диалога
- •Создание окна диалога About
- •Шаблон окна диалога
- •Диалоговая процедура
- •Вызов окна диалога
- •Дополнительная информация о стиле окна диалога
- •Дополнительная информация об определении дочерних окон элементов управления
- •Более сложное окно диалога
- •Работа с дочерними элементами управления окна диалога
- •Кнопки ok и Cancel
- •Позиции табуляции и группы
- •Рисование в окне диалога
- •Использование с окном диалога других функций
- •Определение собственных окон управления
- •Окна сообщений
- •Информация во всплывающих окнах
- •Немодальные окна диалога
- •Различия между модальными и немодальными окнами диалога
- •Новая программа colors
- •Программа hexcalc: обычное окно или окно диалога?
- •Творческое использование идентификаторов дочерних окон элементов управления
- •Диалоговые окна общего пользования
- •Модернизированная программа poppad
- •Изменение шрифта
- •Поиск и замена
- •Программа для Windows, содержащая всего один вызов функции
Окна сообщений
Давайте немного передохнем. Мы рассмотрели способы создания собственных элементов управления в окнах диалога. Теперь остановимся на альтернативе окнам диалога — окнах сообщений (message boxes). Мы использовали диалоговые окна раньше, в главе 7, но подробно они не были рассмотрены.
Окно сообщения является естественной и легко используемой альтернативой окну диалога, когда необходимо получить простой ответ от пользователя. Обычно вызов функции выглядит следующим образом:
iItem = MessageBox (hwndParent, szText, szCaption, iType) ;
Окно сообщения имеет заголовок (строку символов szCaption), одну или более строк текста (szText), одну или более кнопок и (необязательно) предопределенный значок. Одна из кнопок определяется по умолчанию. Возвращаемое значение iItem функции MessageBox связано с кнопкой, которая была нажата.
Как правило, параметром hwndParent является описатель того окна, которое создает окно сообщения. Если окно сообщения закрывается, то фокус ввода оказывается в этом окне. Если описатель окна недоступен, или если вам не нужно, чтобы фокус ввода получило одно из окон вашего приложения, то вместо этого описателя можно использовать NULL. Если окно сообщений используется внутри окна диалога, то в качестве этого параметра используйте описатель окна диалога (который мы назвали hDlg).
Параметр szText — это дальний указатель на оканчивающуюся нулем строку, которая отображается внутри окна сообщения. При необходимости Windows разбивает этот текст на несколько строк. Можно включить в текст символы табуляции, а используя символ возврата каретки или перевода строки, или оба вместе, можно разбить текст на строки по своему усмотрению. Строка szCaption обычно соответствует имени приложения.
Параметр iType представляет собой набор флагов, связанных с помощью поразрядного оператора OR языка С. Первая группа флагов задает кнопки, которые появляются в нижней части окна сообщений: MB_OK (по умолчанию), MB_OKCANCEL, MB_YESNO, MB_YESNOCANCEL, MB_RETRYCANCEL, MB_ABORTRETRYIGNORE и MB_HELP. Эти флаги позволяют использовать максимум четыре кнопки. Вторая группа флагов задает то, какая из этих четырех кнопок по умолчанию получит фокус ввода: MB_DEFBUTTON1 (по умолчанию), MB_DEFBUTTON2, MB_DEFBUTTON3 и MB_DEFBUTTON4.
Третья группа флагов задает значок, который появляется в окне сообщений: MB_ICONINFORMATION (что аналогично MB_ICONASTERISK), MB_ICONWARNING (аналогично MB_ICONEXCLAMATION), MB_ICONERROR (аналогично MB_ICONSTOP и MB_ICONHAND) и MB_ICONQUESTION. Значки по умолчанию не задаются. Если не будет установлен один из этих флагов, то в окне сообщений не будет значка. Информационный значок (MB_ICONINFORMATION) следует использовать для сообщения состояния, восклицательный знак (MB_ICONWARNING) — для напоминания, вопросительный знак (MB_ICONQUESTION) — для выяснения намерений пользователя и, наконец, значок ошибки (MB_ICONERROR) — для информирования пользователя о наличии серьезных проблем.
Четвертый набор флагов определяет, является ли окно сообщения модальным окном приложения (в этом случае пользователь может переключиться на другое приложение без закрытия окна сообщения), или это системное модальное окно, которое требует от пользователя, прежде чем что-то сделать, закрыть окно сообщения. Этими флагами являются MB_APPLMODAL (по умолчанию) и MB_SYSTEMMODAL. И наконец, можно использовать пятый флаг MB_NOFOCUS, что приводит к выводу окна сообщений без установки на него фокуса ввода.
В зависимости от нажатой кнопки, окно сообщений возвращает один из следующих идентификаторов: IDOK, IDCANCEL, IDYES, IDNO, IDRETRY, IDIGNORE, IDHELP или IDABORT.