Прототип к варианту 14 - ПЕРЬЯ
Пример ExtPen.vbp преследует сразу две цели. Во-первых, он во всех подробностях показывает, как работать с косметическими и геометрическими перьями — новыми типами перьев, появившимися в Win32. Но, кроме того, существует и вторая, вероятно, еще более важная цель — особенно если вам еще не приходилось самостоятельно использовать расширенные стили перьев. ExtPen.vbp показывает, как написать программу для экспериментов с функциями и параметрами API. Это идеальный инструмент для изучения API, который может использоваться и со многими другими функциями.
Рис. 8.5. Главное окно проекта ExtPen.vbp
На рис. 8.5 показана главная форма проекта ExtPemvbp. Расширенные перья обладают некоторыми характеристиками, с которыми можно поэкспериментировать при помощи ExtPen.vbp.
О Стиль: сплошная линия, стандартный или пользовательский пунктирный рисунок. ExtPen позволяет выбрать сплошное или пунктирное перо и демонстрирует применение пользовательского стиля, который изменяется посредством модификации программного кода.
-Тип: косметическое или геометрическое перо. Толщина косметического пера всегда равна единице. Ширина геометрического пера задается при помощи полосы прокрутки Width.
-Кисть: однородная или с заданным узором. ExtPen позволяет выбрать кисть со стандартным ~и штриховым рисунком, для этого следует установить флажок Cross Pattern. Вы можете отре-т дактировать программу и выбрать другую стандартную кисть. Также можно воспользоваться методикой, продемонстрированной в главе 9, и создать кисть на основе любого растрового изображения.
-Завершение: завершение линии, нарисованной геометрическим пером, может быть закругленным, квадратным или плоским, как показано на рис. 8.6. ExtPen позволяет выбрать нужный вариант завершения.
Рис. 8.6. Варианты завершения линий, нарисованных геометрическим пером
-Соединение: ExtPen позволяет выбрать внешний вид соединений отрезков. Чтобы два отрезка считались соединенными, они должны быть частью либо одного объекта (например, прямоугольника), либо одной траектории. При простом рисовании линий от конечной точки отрезка эффект соединения не создается — отрезки должны быть включены в траекторию и затем прорисованы функцией StrokePath или StrokeAndRIIPath. На рис. 8.7 показаны три варианта соединений.
Рис. 8.7. Соединения линий, нарисованных геометрическим пером
В проекте ExtPen.vbp использована всего одна форма EXTPEN.FRM. В листинге 8.2 приведен заголовок и объявления функций проекта.
Листинг 8.2. DCTPEN.FRM
К числу переменных модуля относится манипулятор расширенного пера и массив для определения пользовательского стиля. Структура Brushlnfo содержит информацию, используемую при определении цвета и стиля кисти для геометрического пера.
Флажки и переключатели просто форсируют перерисовку графического поля — вся реальная работа выполняется графическими процедурами.
Массив CustomStyle содержит числа типа Long, описывающие сегменты пунктирной линии. Первый элемент массива содержит длину первого отрезка, второй — длину интервала до следующего отрезка и т. д. В нашем примере пунктир начинается с черты длиной 3 единицы, далее следует интервал (1 единица), затем точка (1 единица), интервал (2 единицы) и т. д. Длины задаются в логических единицах для текущей системы координат. Полю IbColor структуры Brushlnfo в данном случае присваивается зеленый цвет. Стиль штриховки HS_CROSS выбирается по умолчанию, но лишь в тех случаях, когда выбран режим штриховой кисти.
Функция DoPenllpdate вызывается при перерисовке графического поля. В начале своей работы эта функция уничтожает существующее перо, а затем проверяет состояние различных флажков и переключателей и по их значениям строит переменную стиля. В функции обрабатываются некоторые особые случаи: толщина косметического пера ограничивается одним пикселом. При выборе пользовательского стиля функция вызывает соответствующую версию функции ExtCreatePen. Обратите внимание на объединение стилей оператором Or.
В графическом поле выводятся две группы отрезков. Левая группа состоит из отрезков, рисуемых непосредственно на элементе. Правая группа состоит из отрезков, объединенных в траек
торию и затем обведенных функцией StrokePath. Это позволяет четко увидеть отличия между отрезками, просто встречающимися в одной точке, и теми, которые соединяются в траектории.
Экспериментируя с этой программой, попробуйте выбрать заостренное соединение и отрегулировать угловой лимит. В зависимости от толщины линии может возникнуть состояние, при котором заостренное соединение превращается в усеченное, поскольку угловое сочленение оказывается слишком длинным по сравнению с толщиной линии.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.