Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

1.11.4 Сообщения приложения для пользователя

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

int WINAPI MessageBox (

HWND hwnd, //Дескриптор родительского окна

LPCTSTR IpText, //Адрес текста сообщения

LPCTSTR IpCaption, //Адрес заголовка окна сообщения

UINT uType //Стиль окна сообщения

);

Если hwnd=NULL, окно сообщения не имеет родительского окна. При lpCaption= NULL в заголовке по умолчанию выводится строка "Ошибка". Параметр uType задают в виде комбинации флажков, опреде­ляющих содержание и поведение окна сообщения.

Следующие флаги определяют список кнопок окна сообщения:

Флаг

Список имен кнопок

MB_ABORTRETRYIGNORE

"Стоп", "Повтор" и "Пропустить"

MB_OK

ОК

MB_OKCANCEL

ОК и "Отмена"

MB_RETRYCANCEL

"Повтор" и "Отмена"

MB_YESNO

"Да" и "Нет"

MB_YESNOCANCEL

"Да", "Нет" и "Отмена"

Жирным шрифтом выделены кнопки по умолчанию. По умолчанию активна первая кнопка. Следующие флаги могут назначить одну из кно­пок активной по умолчанию:

Флаг

Номер кнопки

Флаг

Номер кнопки

MB_DEFBUTTON1

Первая

MB_DEFBUTTON3

Третья

MB_DEFBUTTON2

Вторая

MB_DEFBUTTON4

Четвертая

Следующие флаги включают одну иконку в окно сообщения:

Флаги

Вид иконки

MB_ICONEXCLAMATION, MB_ICONWARNING

Восклицательный знак

MB_ICONINFORMATION, MB_ICONASTERISK

Символ i

MB_ICONQUESTION

Знак вопроса

MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND

Знак остановки

Следующие флаги определяют стиль окна сообщения:

Флаг

Пояснение

MB_APPLMODAL

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

MB_SYSTEMMODAL

На время работы окна сообщения все дру­

гие приложения в неактивном состоянии

MB_TASKMODAL

Этот стиль подобен MB APPLMODAL.

Но если родительское окно не указано(hwnd= NULL), блокируются все перекрывающиеся окна этого приложения

MB_HELP

Добавляет кнопку "Справка" в окне сообщения

MB_RIGHT

Текст выравнивается по правому краю

MB_RTLREADING

Отображает символы сообщения и текста

заголовка в направлении справа налево

MB_SETFOREGROUND

Окно сообщения выдвигается на передний план

Приложение может обработать ответ пользователя на сообщение, анализируя возвращаемое функцией MessageBox значение. В случае ошибки возвращается 0. Иначе функция MessageBox возвращает кон­станту, соответствующую нажатой кнопке. Ниже перечислены имена констант, соответствующие кнопкам окна сообщения:

Константа Нажата кнопка Константа Нажата кнопка

IDABORT "Стоп" IDOК ОК

IDCANCEL "Отмена" IDRETRY "Повтор"

IDIGNORE "Пропустить" IDYES "Да"

IDNO "Нет"

Если окно сообщения содержит кнопку "Отмена", то значение IDCANCEL может быть возвращено и при нажатии клавиши Esc.

Windows предусматривает возможность выдачи и звуковых "сообще­ний". Например, при вызове функции MessageBeep компьютер проигры­вает "звук" из множества зарегистрированных в системе "звуков". Син­таксис этой функции:

BOOL MessageBeep( UINT uType);

Параметр uType этой функции определяет звуковой тип и принимает одно из следующих значений:

Значение Обозначение в файле win.ini

OxFFFFFFFF или -1 Стандартный звуковой сигнал

MB ICONASTERISK SystemAsterisk

MB ICONEXCLAMATION SystemExclamation

MB ICONHAND SystemHand

MBJCONQUESTION SystemQuestion

MB OK или О SystemDefault

В случае успешного выполнения функция возвращает ненулевое зна­чение, иначе - 0. После передачи сообщения о формировании звука, функция MessageBeep прекращает работу. Далее выполняются после­дующие операторы приложения, и одновременно проигрывается указан­ный звук.

Если требуется обратить внимание пользователя на определенное ок­но, то можно несколько раз изменить подсветку окна или его пикто­граммы.

Для этой цели используют функцию FlashWindow, которая за один вызов один раз изменяет подсветку указанного окна:

BOOL FlashWindow(

HWND hwnd, //Дескриптор подсвечиваемого окна

BOOL bInvert //Параметр подсветки

);

Если параметр bInvert=TRUE, окно меняет подсветку. Если же bInvert=FALSE, окно только возвращается к исходному состоянию.

При подсветке неактивное окно может принять внешний вид актив­ного окна, но не получит фокуса ввода.

Если окно было активно до вызова FlashWindow, возвращается нену­левое значение. Если окно не было активно, возвращается 0.

Пример. После нажатия левой клавиши мыши над окном hwnd 5 раз изменить подсветку неактивного окна OwnedHwnd.

Следующий фрагмент описывает версию решения этой задачи:

Case WM_LBUTTONDOWN:

{ FlashWindow(OwnedHwnd, TRUE);

for (int i=0; i<9; i++)

{ for (long j=0;j<1e7;j++);

FlashWindow(OwnedHwnd, TRUE);

}

return 0;

}

После нажатия левой клавиши мыши окно OwnedHwnd примет вид активного окна:

FlashWindow(OwnedHwnd, TRUE);

При i=0 выполняется некая "работа", обозначенная циклом for (long J=0;j<1e7;j++);

Эта работа сводится к простой задержке времени. После этой паузы окно OwnedHwnd примет вид неактивного окна. При i=l после паузы окно OwnedHwnd примет вид активного окна, а при i=2 после паузы ок­но OwnedHwnd примет вид неактивного окна... Таким образом, окно OwnedHwnd 5 раз изменяет свой внешний вид.