Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Visual C++ 6. Руководство Разработчика [rus]

.pdf
Скачиваний:
303
Добавлен:
16.08.2013
Размер:
4.96 Mб
Скачать

флагами, Windows может автоматически перемещать загруженные сегменты в памяти и даже временно выгружать их на диск, если для выполнения других программ в многозадачной среде требуется дополнительная память. Впоследствии, когда выгруженные сегменты вновь понадобятся для выполнения программы, Windows автоматически загрузит их обратно. Другой интересной особенностью является загрузка по вызову. При использовании данного механизма сегмент кода загружается в память только при условии, что в программе встречается вызов функции, находящейся в этом сегменте. Благодаря такого рода средствам в Windows можно работать с несколькими приложениями одновременно, даже если свободной памяти хватает лишь для одного приложения.

Базовые концепции программирования

Особенность создания приложений в среде Windows заключается в том, что здесь применяются специальные методики программирования и используется своя терминология. Последнюю можно разделить на две большие категории: терминология, связанная с пользовательским интерфейсом (меню, диалоговые окна, значки и т.д.), и терминология, относящаяся непосредственно к программированию (сообщения, вызовы функций и т.д.). Чтобы вы могли эффективно общаться и легко понимать друг друга, необходимо внимательно изучить все описанные ниже термины и понятия.

Что представляет собой окно

Окно — это специальная прямоугольная область экрана. Все элементы окна, его размер и внешний вид контролируются открывающей его программой. Каждый щелчок пользователя на каком-нибудь элементе окна вызывает ответные действия приложения. Многозадачность в Windows заключается, в частности, в возможности одновременно открывать окна сразу нескольких приложений или нескольких окон одного приложения. Активизируя с помощью мыши или клавиатуры то или иное окно, пользователь дает системе понять, что последующие команды и данные следует направлять именно этому окну.

Компоненты окна

Стандартный внешний вид окон всех приложений Windows и предсказуемость работы различных их компонентов позволяют пользователям чувствовать себя уверенно с новыми приложениями и легко разбираться в принципах их работы. Основные компоненты любого окна показаны на рис. 16.5.

Рис. 16.5. Стандартное окно приложения Windows

Рамка

261

Обычно каждое окно заключается в небольшую рамку. Новичку может показаться, что функции рамки сводятся только к отделению окна от остальных частей экрана. Но в действительности это не так. Как правило, рамка является и средством масштабирования. Размер окна приложения можно изменить, если поместить указатель мыши на рамку и перетащить его, удерживая нажатой левую кнопку мыши.

Строка заголовка

Имя приложения, которому принадлежит открытое окно, отображается в строке заголовка в верхней части окна. Строка заголовка является обязательным элементом всех окон приложений и позволяет пользователю легко определить, какому приложению принадлежит какое окно, если в системе запущено сразу несколько приложений. Строка заголовка активного окна выделяется альтернативным цветом, чтобы его легко можно было отличить от неактивных окон.

Значок приложения

Другим обязательным элементом любого окна является расположенный в его верхнем левом углу значок приложения. Этот значок обычно представляет собой маленький логотип приложения. Щелчок на значке приводит к открытию системного меню.

Системное меню

Системное меню открывается при щелчке мышью на значке приложения. В нем представлены стандартные команды управления окном: Restore(Восстановить), Move(Переместить), Size(Размер), Minimize(Свернуть), Maximize(Развернуть) и Close(Закрыть).

Кнопка свертывания

В правом верхнем углу большинства окон приложений имеется три кнопки. Крайняя левая кнопка предназначена для свертывания окна в кнопку на панели задач.

Кнопка развертывания/восстановления

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

Кнопка закрытия

Крайняя правая кнопка в углу предназначена для закрытия приложения. После закрытия окна активным автоматически становится окно следующего приложения.

Вертикальная полоса прокрутки

В некоторых случаях окно приложения может содержать вертикальную полосу прокрутки, которая располагается по правому краю окна. В верхней и нижней частях полосы находятся кнопки со стрелками, направленными соответственно вверх и вниз. Вдоль самой полосы располагается бегунок. Положение бегунка показывает, какая часть окна или документа отображается в данный момент на экране. Перемещая бегунок, можно выбрать нужную часть многостраничного документа. Щелчок мышью на кнопке со стрелкой приведет к смещению содержимого окна на одну строку вверх или вниз, а щелчок на свободном пространстве выше или ниже бегунка — на одну экранную страницу вверх или вниз.

Горизонтальная полоса прокрутки

Окно может также быть оснащено горизонтальной полосой прокрутки, которая размещается по нижнему краю окна и работает аналогично вертикальной полосе прокрутки. Горизонтальная полоса предназначена для выведения на экран частей документов, состоящих из большого числа столбцов. Щелчок мышью на кнопках со стрелками приводит к смещению содержимого окна на один столбец влево или вправо. Щелчок на областях между стрелками и бегунком смещает изображение на одну экранную страницу влево или вправо.

Строка меню

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

262

используется мышь, хотя эти действия можно выполнить и с помощью клавиатуры. Каждому элементу меню, как правило, соответствует клавиша быстрого вызова, выделенная подчеркиванием в названии элемента. Чтобы выбрать данный элемент, нужно нажать соответствующую клавишу в сочетании с клавишей [Alt]. Так, комбинация клавиш [Alt+F] открывает меню File.

Рабочая область

Рабочая область обычно занимает большую часть окна. Именно в эту область программа выводит результаты своей работы.

Классы окон

Чтобы два окна одной и той же программы выглядели и работали совершенно одинаково, они оба должны базироваться на общем классе окна. В приложениях, написанных на С, где используются традиционные вызовы функций, класс окна регистрируется программой в процессе инициализации. При создании окна класс указывается в качестве параметра функции CreateWindow (). Зарегистрированный новый класс становится доступным для всех программ, запущенных в данный момент в системе. В случае использования библиотеки MFC вся работа по регистрации классов окон выполняется автоматически, что существенно облегчает работу программиста.

Благодаря тому, что окна приложения создаются на основе общего базового класса, значительно сокращается объем информации, которую при этом следует указывать. Поскольку класс окна содержит в себе описания элементов, общих для всех окон данного класса, нет необходимости повторять эти описания при создании каждого нового окна. К тому же все окна одного класса используют одну оконную процедуру, что также позволяет избежать дублирования кода.

Графические объекты, используемые в окнах

Примерами графических объектов, с которыми можно обращаться как с единым целым и которые выступают элементами пользовательского интерфейса, являются строка меню, полосы прокрутки, кнопки и т.д. Наиболее широко используемые графические объекты Windows описаны ниже.

Значки

Значками называются маленькие графические изображения, выполняющие опознавательную функцию. Так, значки приложений на панели задач позволяют легко определить, какие программы в настоящий момент запущены, даже если названия программ не отображаются целиком. Значки могут быть очень полезны в самих приложениях, поскольку с их помощью можно привлекать внимание пользователей к сообщениям об ошибках и различным предупреждениям. В Windows входит набор стандартных значков, в частности стилизованные знак вопроса и восклицательный знак, а также ряд других. С помощью встроенного в компилятор Visual C++ редактора ресурсов вы можете создавать собственные значки.

Указатели мыши

Указатели мыши также являются графическими объектами, используемыми для отслеживания перемещения мыши. Вид указателя может меняться в зависимости от выполняемого задания и состояния системы. Например, стандартный указатель-стрелка меняет свой вид на изображение песочных часов в том случае, если система занята. С помощью встроенного в компилятор Visual C++ редактора ресурсов вы можете создавать собственные указатели мыши.

Текстовые курсоры

Курсоры предназначены для указания места, куда следует осуществлять ввод текстовых данных. Отличительной особенностью курсоров является их мерцание. Поведение курсоров напоминает работу курсоров в MS-DOS. В большинстве текстовых редакторов и в полях диалоговых окон в качестве курсора применяется 1-образ-ный указатель мыши. Причем в Windows нет (в отличие от значков и указателей) коллекции готовых курсоров.

Окна сообщений

263

Окна сообщений представляют собой разновидность диалоговых окон, содержащих строку заголовка, значок и текст сообщения. На рис. 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 точечные рисунки наиболее широко применяются для двух целей, Во-первых, они служат изображениями всевозможных кнопок и значков, например стрелок полос прокрутки и кнопок панелей инструментов. Другой областью применения точечных рисунков являются кисти, с помощью которых рисуются и заполняются цветом различные геометрические фигуры на экране.

Точечные рисунки можно создавать и модифицировать с помощью встроенного редактора ресурсов.

Перья

Перья предназначены для рисования геометрических фигур и различных контуров и характеризуются тремя основными параметрами: ширина линии, стиль (точечный, штрихпунктирный, непрерывный) и цвет. Существует два готовых пера: одно для рисования черных линий, другое — для рисования белых. С помощью специальных функций вы можете создавать собственные перья.

Кисти

264

Кисти предназначены для заливки объектов цветом, выбранным из заданной палитры. Минимальный размер кисти — 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. Напомним, что дескриптором называется уникальный номер, который присваивается всем системным объектам, таким как окна, элементы управления, меню, значки, перья и кисти, а также областям памяти, устройствам вывода и т.д.

265

Поскольку 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знает, какому именно окну адресовано сообщение. Таким образом, приложения содержат процедуры обработки не только сообщений разных типов, но и сообщений для разных окон.

Цикл обработки сообщений

266

Основным компонентом любого приложения Windowsявляется цикл обработки сообщений. В процедурном приложении местонахождение этого цикла нетрудно определить. В программах, написанных с использованием библиотеки MFC , цикл обработки сообщений скрыт в классе cwinApp.

Если говорить в целом, работа приложения организуется следующим образом. Приложение сначала создает и открывает свои окна, затем запускается цикл обработки сообщений и, в конце концов, при получении сообщения типа WM_CLOSE, работа программы завершается. Цикл обработки сообщений ответственен за передачу поступающих от Windowsсообщений соответствующим оконным процедурам.

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

Сообщения обычно помещаются в очередь по принципу FIFO (firstin, firstout— первым поступил, первым обслужен). Такие сообщения называются синхронными. Но иногда Windowsвставляет сообщение сразу в голову очереди. Сообщения такого типа, изменяющие нормальный ход выполнения программы, называются асинхронными.

Существует несколько видов асинхронных сообщений, среди них — сообщения о перерисовке, сообщения таймера и сообщения о завершении программы. Например, сообщение таймера может запускать некоторое действие в определенный момент времени независимо от того, какие сообщения сейчас находятся в очереди; оно имеет наивысший приоритет и передается раньше всех других сообщений.

У вас может возникнуть вопрос, как Windows выходит из положения в том случае, если сообщения поступают одновременно нескольким приложениям. Эта проблема решается одним из двух способов. Первый состоит в задании приоритетов. Когда загружается некоторое приложение, для него автоматически устанавливается нулевой приоритет. В процессе работы приложения его приоритет может быть изменен. Любые конфликты разрешаются в пользу того приложения, чей приоритет выше.

Изменять приоритет приложения, заданный по умолчанию, обычно не рекомендуется. Тем более что в распоряжении Windows есть еще один метод, определяющий очередность передачи сообщений группе приложений с одинаковым приоритетом. Если Windows видит, что у приложения образовался длинный список необработанных сообщений, то она автоматически приостанавливает передачу этому приложению новых сообщений, хотя продолжает передавать сообщения другим, более свободным приложениям.

Вызов системных функций

Как известно, Windows содержит сотни встроенных функций, таких как DispatchMessage() , PostMessage(), RegisterWindowMessage(), SetActiveWindow() и т.д. При создании приложений на C++ с использованием библиотеки MFC большинство этих функций инкапсулируются в базовых классах и выполняются автоматически.

Соглашение о вызове функций

В Windows3.x описания функций включали спецификатор PASCAL, который в 32-разрядных версиях Windowsне используется. Параметры функций здесь передаются посредством системных стеков и считываются в обычном для C/C++ режиме — в направлений Справа налево. После завершения функции вызвавшая ее процедура должна модифицировать указатель стека с учетом количества байтов, занимаемых параметрами функции.

Файл WINDOWS.H

Файл заголовков WINDOWS.H открывает доступ к тысячам описаний констант, структур, типов данных и прототипов функций. Он включается в большинство приложений Windowsи содержит директивы включения множества других файлов заголовков. (Одна из причин, почему приложения Windows компилируются так долго, состоит не только в относительно больших размерах самих программ, но и в том, что к ним подключаются большие файлы заголовков.) В

267

случае использования библиотеки MFC файл WINDOWS.H подключается к программе косвенно, Через файл AFXWIN.H.

Обычно в директивах #define, встречающихся в файлах заголовков, за текстовым идентификатором следует числовая константа. Например:

#define WM_CREATE 0x0001

Для VisualC++ данная запись означает, что на этапе компиляции идентификатор сообщения WM_CREATE следует заменить шестнадцатеричной константой 0x0001. Некоторые директивы #define могут выглядеть довольно необычно:

#define NEAR near #define FAR far

Данные команды позволяют использовать в приложении ключевые слова near и far, набираемые как в верхнем, так и в нижнем регистре, что дает программе ряд преимуществ. Не стоит забывать, что проще изменить объявления в файле заголовков, чем отыскивать и менять ключевые слова по всей программе.

Этапы создания приложения

Разработку приложений Windowsможно разбить на несколько общих этапов. Перечислим их.

Создание функции winMain() и других базовых функций. При использовании MFC эти действия выполняются автоматически в классе cwinApp.

Создание меню и других необходимых ресурсов, включение их в файл сценария ресурсов.

Создание с помощью редактора ресурсов уникальных указателей мыши, значков и других растровых изображений. (Не обязательный.)

Создание с помощью редактора ресурсов дополнительных диалоговых окон. (Не обязательный.)

Компиляция проекта.

Создание ресурсов приложений средствами VisualC++

Компилятор VisualC++ содержит ряд встроенных редакторов ресурсов. Чтобы открыть список доступных редакторов, в меню Insert нужно выбрать команду Resource. Редакторы ресурсов позволяют быстро создавать и изменять собственные значки, указатели мыши, точечные рисунки, диалоговые окна и многое другое.

Каждый ресурс представляет собой блок данных, который добавляется в исполняемый файл приложения. Но если разобраться в технических деталях, то окажется, что эти данные размещаются не в сегменте данных программы. Когда программа загружается в память для выполнения, ресурсы остаются на диске. В качестве примера приведем ситуацию, когда пользователь первый раз вызывает окно About. Прежде чем Windows сможет отобразить это окно, система должна обратиться к жесткому диску и загрузить соответствующие данные из выполняемого файла в память.

Если в приложении планируется использовать такие ресурсы, как диалоговые окна, меню и значки, то каждый из них предварительно должен быть описан в файле сценария ресурсов. Этот файл создается, модифицируется и дополняется с помощью редакторов ресурсов, о которых говорилось выше. Посредством компилятора ресурсов файл сценария преобразуется в файл скомпилированных ресурсов, данные из которого вставляются затем в исполняемый файл приложения. Такой метод обработки ресурсов позволяет приложениям хранить информацию обо всех своих ресурсах непосредственно в исполняемом файле.

Файлы проектов

Файлы проектов служат средством контроля за ходом компиляции ресурсов и программного кода приложения. Они позволяют отслеживать взаимосвязь программы и исходных файлов, учитывать время создания файлов.

268

В файлах проектов содержится информация о компиляции и компоновке текущего приложения с учетом подключаемых библиотек, аппаратной платформы и системной среды. В большинстве случаев с целью сокращения времени создания нового проекта можно выбрать один из готовых шаблонов, предлагаемых компилятором VisualC++.

С помощью файлов проектов можно также организовать ступенчатую компиляцию и компоновку, когда перекомпиляции подвергаются только те части программы, которые были модифицированы. Это позволяет существенно сократить время построения исполняемого файла.

Редакторы ресурсов

В VisualC++ встроен целый набор редакторов ресурсов, каждый из которых ориентирован на определенный тип ресурсов. В следующих параграфах вы узнаете, как с их помощью создавать значки, указатели мыши, меню и диалоговые окна.

Значки, указатели мыши и точечные рисунки

Хотя ресурсы данного типа разрабатываются с помощью разных редакторов, в основу их создания положен один принцип, так как все они относятся к растровым изображениям. Отличие состоит лишь в том, что редакторы значков и указателей мыши позволяют создавать аппаратно-независимые изображения — в том смысле, что их внешний вид не будет зависеть от разрешения монитора.

Так, значок может иметь четыре описания: одно — для черно-белого монитора, другое — для CGA-системы, третье — для EGA, четвертое — для VGA. Обращение к значку во всех случаях производится одинаково — по имени. При этом Windowsавтоматически выбирает то описание, которое-в наибольшей степени соответствует реальному типу монитора, установленного на данном компьютере. Окно редактора в процессе создания нового значка показано на рис. 16.8.

Рис. 16.8. Окно разработки нового значка

В центре окна находится область редактирования, где можно создать значок, указатель мыши или точечный рисунок. Изначально размер этой области составляет 32x32 ячейки. В левой

269

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

Создание пользовательских значков и указателей мыши

Создать собственный значок или указатель мыши очень просто. Перейдите в меню Insertи выберите команду Resource. Теперь выберите из списка необходимый вам тип ресурса (Icon, Cursor), в результате чего откроется пустая область редактирования.

Редактор предоставляет в ваше распоряжение панель инструментов рисования и палитру цветов. Чтобы сделать нужный цвет активным, достаточно щелкнуть мышью на образце этого цвета в палитре. Нарисовав изображение, сохраните его, выбрав в меню File команду Save

или Save As.

На рис. 16.9 приведено окно редактора ресурсов, в котором только что был создан новый указатель. Большое изображение в центре показывает точечную структуру рисунка, тогда как маленькое изображение слева отображает рисунок в том виде, в каком он в действительности будет представлен на экране.

Рис. 16.9. Окно создания указателя мыши

Когда вы первый раз выберете в меню File команду Save, редактор предложит вам ввести имя файла. Если вы создавали значок, то система по умолчанию предложит для файла расширение ICO. Расширение CUR используется для указателей мыши.

С Помощью кнопки SetHotspot вы можете выбрать в создаваемом указателе мыши активную точку, по положению которой определяются координаты указателя на экране. Щелкните на кнопке SetHotspot, наведите появившийся указатель в виде маленького перекрестия на тот пиксель изображения, который вы хотите сделать активной точкой, и просто щелкните мышью. Слева от кнопки отобразятся выбранные координаты. Любой указатель мыши может иметь только одну активную точку.

Меню

270