Окт 13

Простые перья

Все стандартные перья имеют сплошной цвет и единичную толщину. Чтобы рисовать прерывистые или более толстые линии, нужно использовать нестандартные объекты логического пера. Простые перья создаются вызовом функции CreatePen или CreatePenlndirect.
Функция CreatePen имеет следующий прототип:
HPEN CreatePendnt fnPenStyle. int nWidth, COLORREF crColor);
Первый параметр задает стиль пера, определяющий порядок следования пикселов и расположение линии.
Второй параметр функции CreatePen задает толщину линии в логических единицах. Напомним, что если в контексте устройства используется режим отображения по умолчанию ММ_ТЕХТ, то логические единицы совпадают с физическими единицами и выражаются в пикселах.
Если логические единицы не совпадают с физическими, то физическая толщина пера устанавливается в соответствии с масштабом, который определяется режимом отображения и мировыми преобразованиями, если они есть. При этом толщина пера будет всегда одинаковой только в том случае, когда масштабы по обеим осям одинаковы. Если же масштабы различаются, то вертикальные и горизонтальные линии будут иметь разную толщину. То же касается и наклонных линий, причем их толщина будет зависеть от угла наклона.
Параметру nWidth можно передать нулевое значение. В этом случае будет использоваться перо толщиной 1 пиксел независимо от режима отображения.
Если задать точечный или пунктирный стиль (PS_DASH, PS_D0T, PS_DASHDOT, PS_DASHD0TD0T) с физической толщиной более единицы, то Windows будет использовать перо со стилем PS_S0LID. Таким образом, стилевые (прерывистые) линии можно рисовать только с толщиной 1 пиксел. Обратите внимание на то, что точки в стилевых линиях изображаются тремя пикселами.
Третьему параметру функции CreatePen передается цвет пера в виде значения типа COLORREF. Обычно это значение задается либо с помощью макроса RGB, либо с помощью макроса PALETTERGB1. Первый вариант используется, если устройство вывода поддерживает полный диапазон цветов, определяемый 24-битным RGB-значением, и, следовательно, приложению нет необходимости работать с палитрой. Второй вариант (макрос PALETTERGB) необходимо использовать, если приложение работает с логической палитрой, например, для моделей дисплеев, которые поддерживают только 256 цветов. В последнем случае система Windows преобразует запрошенный RGB-цвет в наиболее подходящий индекс палитры.