В окне можно вывести от одной до трех кнопок. Используя один из флагов, МВ_0К, MBJDKCANCEL, MB_RETRYANCEL, MB__ABORTRETRYIGNORE, MB_YESN0, MBJESNOCANCEL, программист указывает, какие кнопки будут изображены в окне сообщения. При этом флагами MB_DEFBUTT0N1, MB_DEFBUTT0N2 или MB_DEFBUTT0N3 можно определить кнопку, выбранную по умолчанию.
Узнать, какая кнопка была нажата, программист может, сравнивая полученный в переменной I код с одной из констант IDOK, IDABORT, IDCANCEL, IDIGNORE, IDNO, IDRETRY, IDYES.
Создание простейшего приложения
Кроме значка с восклицательным знаком, вывод которого предопределен флагом MBJCONEXCLAMATION, можно задать другой значок при помощи флагов MBJCONWARNING, MB_IC0NINFORMATION, MBJCONASTERISK, MBJCONQUESTION, MBJCONSTOP, MB_IC0NERR0R или MBJCONHAND.
Окно сообщения, создаваемое функцией MessageBox(), всегда модально. Но передача фокуса ввода по умолчанию запрещена только окну, из которого вызвали MessageBoxC). Другие окна, созданные в том же потоке или в других приложениях, могут получить фокус и заслонить выведенное на экран сообщение. Но при помощи одного из флагов, MB_APPLMODAL, MB_TASKMODAL, MB_T0PM0ST, программист может дополнительно ограничивать возможность передачи фокуса другим окнам приложения и другим приложениям.
Назначение и структура сообщений Работа прикладных программ в среде Windows основана на обработке сообщений. Сообщения могут порождаться нажатием на кнопку мыши или клавишу системной клавиатуры, сигналом прерывания от таймера и другими причинами. А прикладная программа является, по существу, совокупностью процедур обработки различных сообщений. Такая организация вычислительного процесса обусловлена многозадачностью операционной системы.
Предположим, что в однозадачной системе (типа MS DOS) необходимо ввести с клавиатуры строку символов. Для ввода прикладной программист обращается к операционной системе при помощи процедур, например ReadlnO, scanfO. При этом ввод данных происходит в режиме ожидания. Полезные вычисления прекращаются, система постоянно ожидает поступления очередного символа. В многозадачной системе это недопустимо, так как процессор нужен другим задачам, поэтому ввод данных и передача их приложению происходит не по инициативе приложения, а по инициативе внешнего устройства. Когда человек нажимает кнопку клавиатуры, в приложении запускается функция обработки поступившего символа. Пока для приложения нет никаких сообщений, оно остается в пассивном состоянии и не потребляет времени процессора.