- •Часть 2 (продолжение): Прикладное программирование в Windows
- •Глава 8. Виртуальное окно: работа с текстом
- •8.1. Оконные координаты, цвета, отображение строк
- •Кодировка rgb-значений
- •Размеры системных метрик
- •8.2. Виртуальное окно
- •Способы заполнения прямоугольной области
- •8.3. Изменение шрифтов
- •Макроимена распространенных шрифтов
- •8.4. Создание собственных шрифтов
- •Глава 9. Программирование графики
- •9.1. Логическая система координат
- •Рекомендуемый самый яркий состав цветов
- •9.2. Пиксели, линии, дуги, прямоугольники, эллипсы и секторы
- •9.3. Работа с перьями и кистями
- •Типы линий, создаваемых пером
- •9.4. Технология виртуального окна
- •9.5. Режимы отображения и области вывода
- •Текущий режим отображения (mappind mode)
- •Глава 10. Работа с панелями инструментов
- •10.1. Общие элементы управления
- •Общие элементы управления
- •10.2. Подключение и инициализация общих элементов управления
- •10.3. Работа с панелью инструментов
- •Начальные состояния кнопок панели инструментов
- •Стиль кнопки определяется (значения поля fsStyle)
- •Сообщения к панели инструментов
- •10.4. Создание растрового изображения для панели инструментов
- •10.5. Включение подсказок
- •Глава 11. Спины, ползунки и индикаторы процессов
- •11.1. Работа со спином
- •Стили «up-down control»
- •Сообщения, которые можно посылать спину
- •11.2. Создание спина с «приятельским» окном
- •11.3. Работа с ползунком
- •Значения стилей для ползунка
- •Перечень сообщений, которые можно посылать ползунку
- •Перечень нотификационных сообщения ползунка
- •11.4. Индикатор процесса
- •Управляющие сообщения индикатору
- •Глава 12. Многозадачность: процессы и потоки
- •12.1. Создание нового процесса (отдельной задачи)
- •Разрешенные значения поля dwFlags
- •12.2. Многопотоковые программы
- •12.3. Работа с несколькими потоками
- •12.4. Синхронизация процессов и потоков: семафоры
- •12.5. Обработка событий
- •Глава 13. Приемы программного управления вычислительным процессом
- •13.1. Использование функций Проводника Explorer для работы в файловой системе
- •Управляющая информация Проводника
- •Режимы обработки файлов
- •13.2. Создание собственных динамических библиотек (dll-файлов)
- •13.3. Работа с буфером обмена Clipboard
- •Функции подсистемы Clipboard
- •Свойства выделяемого блока памяти
- •Форматы и типы данных
- •Литература
9.3. Работа с перьями и кистями
Работа с перьями. Графические объекты рисуются при помощи текущего пера. Имеется три встроенных системных пера: черное, белое и прозрачное. Дескриптор любого из yих можно получить с помощью функции GetStockObject(), которая была описана выше. Макросы, определяющие эти перья, называются соответственно BLACK_PEN, WHITE_PEN и NULL_PEN. Дескрипторы перьев имеют системный тип HPEN.
Количество встроенных перьев ограничено, и поэтому при написании приложений Вам могут понадобиться собственные перья. Создать собственное перо можно при помощи функции CreatePen():
HPEN CreatePen(int style, int width, COLORREF color);
Параметр style определяет тип линии, создаваемой пером. Он может быть следующим (табл. 9.2):
Таблица 9.2
Типы линий, создаваемых пером
№ |
Макрос |
Тип линии пера |
1 |
PS_DASH |
Пунктирная линия (равномерные отрезки) |
2 |
PS_DASHDOT |
Штрих-пунктирная линия (тире-точка-тире) |
3 |
PS_DASHDOTDOT |
Штрих-пунктирная линия (тире-точка-точка-тире) |
4 |
PS_DOT |
Точечная линия |
5 |
PS_INSIDEFRAME |
Сплошная линия внутри ограничивающей области |
6 |
PS_NULL |
Прозрачное перо |
7 |
PS_SOLID |
Сплошная линия |
Любые стили, задающие прерывистые линии (точечные, пунктирные), применимы только к перьям, имеющим толщину в одну логическую единицу. Стиль PS_INSIDEFRAME определяет перо, рисующее сплошную линию внутри рисуемого объекта независимо от толщины пера. Например, если прямоугольник рисуется пером, имеющим стиль PS_INSIDEFRAME и толщину больше одного пикселя, нарисованные линии будут находится внутри заданных границ прямоугольника. При задании другого стиля пера часть линии толщиной более одного пикселя будет нарисована вне границ рисуемого объекта.
Толщина пера в логических единицах задается параметром width. Цвет пера определяется значением параметра color, который является переменной типа COLORREF (этот тип данных рассматривался в гл. 8). В примерах этой главы все цвета задаются с помощью RGB-значений.
После создания перо выбирается в контексте устройства при помощи функции SelectObject(). Так, следующий фрагмент программы создает красное перо и затем устанавливает его текущим для рисования:
HPEN hRedpen;
hRedpen=CreatePen(PS_SOLID,1,RGB(255,0,0));
SelectObject(dc,hRedpen);
Помните, что, прежде чем программа завершится, необходимо удалить все созданные Вами перья при помощи функции DeleteObject().
Создание кисти. Кисти создаются так же, как и перья. Можно создавать кисти различных стилей, однако чаще всего используется сплошная кисть. Сплошная кисть создается при помощи функции CreateSolidBrush(), имеющей следующий прототип:
HBRUSH CreateSolidBrush(COLORREF color);
Цвет создаваемой кисти задается параметром color, а сама функция возвращает дескриптор кисти.
После создания кисть должна быть выбрана в контексте устройства с помощью функции SelectObject(). Например, следующий фрагмент создает зеленую кисть, а затем выбирает ее для заполнения объектов:
HBRUSH hGreenbrush;
hGreenbrush=CreateSolidBrush(RGB(0,255,0));
SelectObject (dc, hGreenbrush);
Как и перья, создаваемые кисти должны удаляться перед завершением программы.
Другие типы кистей, которые Вы можете изучить самостоятельно, – это штриховая (hatch) кисть и кисть с растровым наполнением (pattern brush), создаваемые с помощью функций CreateHatchBrush() и CreatePatternBrush() соответственно.
Удаление объектов. Созданные Вами объекты необходимо удалить до того, как программа завершится. Для, этого используется функция DeleteObject(). Помните, что нельзя удалять встроенные системные объекты. Кроме того, удаляемые объекты к моменту удаления не должны быть текущими в контексте устройства.
