|
Программирование >> Процедурные приложения
Окна сообщений представляют собой разновидность диалоговых окон, содержащих строку заголовка, значок и текст сообщения. На рис. 16.6 показано стандартное окно сообщения, которое появляется при закрытии окна программы Notepad в том случае, если в нем содержатся несохраненные данные. Рис. 16.6. Типичное окно сообщения В приложении указывается текст заголовка окна, текст сообщения, какой из стандартных значков Windows использовать (если это необходимо) и какой набор кнопок выводить. В частности, можно вызывать окна с такими комбинациями кнопок: Abort/Retry/Ignore, ОК, Yes/No, Yes/No/Cancel, ОК/Cancel и Retry/CancelОбычно в окнах сообщений отображаются такие стандартные значки, как IconHand, IconQuestion, IconExclamation, IconAsterisk и некоторые другие. Диалоговые окна Диалоговые окна содержат наборы различных элементов управления и предназначены для предоставления пользователю возможности устанавливать опции и параметры программы, которой принадлежит данное окно. Внешний вид диалогового окна разрабатывается с помощью редактора ресурсов компилятора Visual C++. Шрифты Шрифт в Windows - это графический ресурс, содержащий набор символов определенного типа. Существует набор функций, с помощью которых можно манипулировать начертанием символов для получения форматированного текста. В приложениях можно использовать различные стандартные шрифты, включая System, Courier и TimesNewRoman, а также пользовательские шрифты. Встроенные функции позволяют на базе основного шрифта получать полужирное начертание, курсив, подчеркнутый текст, изменять размер шрифта. Причем внешний вид шрифта не зависит от типа устройства, на которое выводится текст. Благодаря внедрению технологии TrueType было достигнуто, начиная с Windows 3.1, соответствие между внешним видом шрифта на экране и шрифта, выводимого при печати. Точечные рисунки Точечные рисунки представляют собой точную копию части экрана, снятую попиксельно. Тот факт, что изображение является точным образом экрана, устраняет необходимость в каких бы то ни было дополнительных преобразованиях, что существенно сокращает время вывода изображения на экран. В Windows точечные рисунки наиболее широко применяются для двух целей, Во-первых, они служат изображениями всевозможных кнопок и значков, например стрелок полос прокрутки и кнопок панелей инструментов. Другой областью применения точечных рисунков являются кисти, с помощью которых рисуются и заполняются цветом различные геометрические фигуры на экране. Точечные рисунки можно создавать и модифицировать с помощью встроенного редактора ресурсов. Перья Перья предназначены для рисования геометрических фигур и различных контуров и характеризуются тремя основными параметрами: ширина линии, стиль (точечный, штрихпунктирный, непрерывный) и цвет. Существует два готовых пера: одно для рисования черных линий, другое - для рисования белых. С помощью специальных функций вы можете создавать собственные перья. Кисти Кисти предназначены для заливки объектов цветом, выбранным из заданной палитры. Минимальный размер кисти - 8x8 пикселей. Кисть также характеризуется тремя параметрами: размером, шаблоном заливки и цветом. Заливка может быть сплошной, штриховой, диагональной или представлять собой узор, заданный пользователем. Принципы обработки сообщений Как вы уже знаете, ни одно приложение в Windows не, отображает свои данные непосредственно на экране. Точно так же ни одно приложение не обрабатывает напрямую прерывания устройств и не выводит данные непосредственно на печать. Вместо этого приложение вызывает встроенные функции Windows и ожидает от системы соответствующих сообщений. Подсистема сообщений в Windows - это средство распределения информации в многозадачной среде. С точки зрения приложения, сообщение - это уведомление о некотором произошедшем событии, на которое оно, приложение, должно ответить определенным образом. Такое событие может быть инициировано пользователем, скажем путем нажатия клавиши или перемещения мыши, изменением размера окна или выбором команды из меню. Но события могут порождаться и самим приложением. Особенность этого процесса состоит в том, что приложение должно быть полностью ориентировано на прием и обработку сообщений. Программа должна быть готова в любой момент принять сообщение, определить его тип, выполнить соответствующую обработку и вновь перейти в режим ожидания до поступления следующего сообщения. Приложения Windows существенно отличаются от приложений, написанных для MS-DOS. Windows открывает приложениям доступ к сотням встроенных функций, которые можно вызывать напрямую или косвенно, посредством библиотек тина MFC . Эти функции содержатся в ряде модулей, таких как KERNEL, GDI и USER. Функции модуля KERNEL отвечают за управление памятью, загрузку и выполнение приложений, а также за распределение системных ресурсов. Модуль GDI содержит функции создания и отображения графических объектов. Модуль USER отвечает за выполнение всех других функций, обеспечивающих взаимодействие приложений с пользователями и средой Windows. Ниже мы более детально проанализируем работу подсистемы сообщений, изучим формат сообщений и источники их появления, а также разберем некоторые механизмы организации взаимодействия между приложениями и Windows посредством сообщений. Формат сообщений Сообщения используются для информирования приложения о том, что в системе произошло то или иное событие. На практике сообщение направляется не столько самому приложению, сколько определенному окну, открытому этим приложением. Реально в Windowsсуществует только один механизм обработки сообщений - системная очередь сообщений. Но каждое выполняющееся приложение организовывает и свою очередь. Функции модуля USER, в частности, ответственны за передачу сообщений из системной очереди в очередь конкретного приложения. В последней накапливаются сообщения, адресованные любому окну, открытому данным приложением. Независимо от типа все сообщения характеризуются четырьмя параметрами: дескриптором окна, которому адресуется данное сообщение, типом сообщения и еще двумя 32-разрядными параметрами. Примечание Речь идет о параметрах сообщений в 32-разрядных версиях Windows. Для Windows 3.x характерны другие параметры. Дескрипторы широко используются в приложениях Windows. Напомним, что дескриптором называется уникальный номер, который присваивается всем системным объектам, таким как окна, элементы управления, меню, значки, перья и кисти, а также областям памяти, устройствам вывода и т.д. Поскольку Windows позволяет одновременно открывать несколько копий одного приложения, операционная система должна иметь возможность отслеживать каждую копию в отдельности. Это достигается путем присвоения каждому экземпляру программы дескриптора. Дескрипторы обычно служат в качестве индексов системной таблицы объектов. Благодаря тому что доступ к объектам осуществляется по индексам таблицы, а не по их непосредственным адресам в памяти, Windows может динамически перераспределять ресурсы за счет обновления адресов в таблице. Например, если Windows связaла некоторый ресурс приложения с 16-й строкой таблицы, то независимо от того, куда Windows переместит впоследствии этот ресурс, его текущий адрес всегда будет представлен в 16-й строке. Вторым параметром, передаваемым с каждым сообщением, является его тип. Тип сообщения задается идентификатором, который определен в одном из файлов заголовков Windows. Для работы с идентификаторами сообщений в программу включается файл WINDOWS.H. Как правило, идентификаторы начинаются с двухсимвольного префикса, за которым следует символ подчеркивания. Так, оконные сообщения начинаются с префикса m : wm create, wm paint, wm close, wm copy, wm paste. Сообщения кнопок имеют префикс ВМ , полей - ЕМ , списков - LB . В приложении можно также создать и зарегистрировать собственный тип сообщения, предназначенного для частных целей. Последние два параметра сообщения несут дополнительную информацию. Их содержание может изменяться в зависимости от типа сообщения. Например, посредством этих параметров может передаваться информация о том, какая клавиша была нажата, где находился указатель мыши или бегунок полосы прокрутки и т.д. Генерирование сообщений Именно реализация концепции обмена сообщениями позволяет Windows быть многозадачной средой. Работа Windows основана на передаче, приеме и обработке сообщений. Существует четыре основных источника, от которых приложение может получить сообщение: пользователь, Windows, само приложение, другие приложения. Сообщения пользователей включают информацию о вводе текста, перемещении и нажатии кнопок мыши, выборе команд меню, перемещении бегунка полосы прокрутки и т.д. Большую часть времени приложение занято обработкой именно таких сообщений. Получение сообщения от пользователя означает, что человек, запустивший программу, хочет изменить ход ее выполнения. Системные сообщения посылаются программе при изменении ее состояния. Например, щелчок на значке приложения означает, что пользователь хочет сделать данное приложение активным. В этом случае Windows сообщает приложению, что на экране открывается его окно, размер и положение окна изменяются и т.д. В зависимости от текущего состояния приложения сообщение от Windows может быть принято и обработано либо проигнорировано. В следующей главе мы поговорим о том, как создаются простейшие приложения Windows. Вы поймете, что, по сути, приложение разбивается на ряд процедур, каждая из которых отвечает за обработку определенного типа сообщений для определенного окна. Например, одна из процедур может отвечать за изменение размеров окна. Причем совсем не обязательно, чтобы это происходило только по команде пользователя, - решение об изменении может принимать и сама программа. Сообщения четвертого типа в настоящее время применяются достаточно редко. Примером межзадачного обмена сообщениями может служить протокол DDE (DynamicDataExchange- динамический обмен данными). Обработка сообщений Традиционные приложения Windows, написанные на C/C++, содержат специальные процедуры для обработки всех типов сообщений, которые могут быть посланы программе. Разные окна программы могут по-разному реагировать на одни и те же сообщения. Это достигается за счет того, что обработчики сообщений пишутся отдельно для каждого окна, но Windowsзнает, какому именно окну адресовано сообщение. Таким образом, приложения содержат процедуры обработки не только сообщений разных типов, но и сообщений для разных окон. Цикл обработки сообщений
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |