Значение последних четырёх флагов действительно, если ширина пера nWidth больше 1. В этом случае используется флаг PS_SOLID.
nWidth определяет ширину пера. Если это значение составляет 0, то ширина пера равна 1.
crColor определяет цвет пера.
Пример: создаём синий карандаш толщиной 3 единицы, который рисует сплошную линию.
CPen penBlue ( PS_SOLID , 3 , RGB ( 0 , 0 , 255 )) ;
Третья версия конструктора предназначена для создания объектов класса с одновременным созданием карандашей Windows.
CPen ( int nPenStyle, int nWidth , const LOGBRUSH* pLogBrush , int nStyleCount = 0 , const DWORD* lpStyle = NULL );
Если при создании объекта “карандаш” использован первый конструктор, то определить его параметры можно с помощью функции CreatePen. Функция CreatePenсоздает логический карандаш, которая имеет указанный стиль, ширину и цвет. Прототип этой функции имеет следующий вид:
HPEN CreatePen ( int nPenStyle , int nWidth , COLORREF crColor ) ;
Возвращаемое значение: указатель на карандаш, если функция успешно выполнена, и недействительное значение NULL в противном случае.
Параметры: те же, что и у второго конструктора класса CPen.
Пример: создаём красный карандаш толщиной 1 единица, который рисует линию из длинных штрихов.
CPen penRed ;
penRed.CreatePen ( PS_DASH , 0 , RGB ( 255 , 0 , 0 )) ;
Для каждой переменой типа CPen функция CreatePen может быть вызвана только один раз, т.е. параметры экземпляра класса карандаша нельзя изменить в ходе программы, но можно создать несколько карандашей и пользоваться ими по очереди.
В библиотеке MFC определён тип указателя на карандаш HPEN. Функция CreatePen может быть также использована для инициализации указателя на карандаш, который удобно использовать при работе с графикой.
Пример: создаём указатель на синий карандаш толщиной 3 единицы, который рисует сплошную линию.
HPEN hPenBlue = CreatePen ( PS_SOLID , 3 , RGB ( 0 , 0 , 255 )) ;
Контекст устройства содержит несколько объектов (карандаш, кисть, шрифт, растровую картинку и область отсечения) с параметрами, заданными по умолчанию. Карандаш, например, по умолчанию чёрный сплошной единичной толщины. Чтобы использовать созданный нами карандаш необходимо передать его параметры контексту устройства.
Для этой цели в классе CDC определено пять версий функции SelectObject, передающие контексту устройства адрес объекта, который мы хотим использовать при создании изображения. Прототипы версий этой функции имеют следующий вид:
CPen* SelectObject ( CPen* pPen ) ; // передаёт адрес карандаша
CBrush* SelectObject ( CBrush* pBrush ) ; // передаёт адрес кисти
virtual CFont* SelectObject ( CFont* pFont ) ; // передаёт адрес фонта
CBitmap* SelectObject ( CBitmap* pBitmap ) ; // передаёт адрес растровой картинки
int SelectObject ( CRgn* pRgn ) ; // передаёт параметры области отсечения
Параметры:
pPen указатель на объект типа CPen (карандаш), который выбран для использования.
pBrush указатель на объект типа CBrush (кисть), который выбран для использования.
pFont указатель на объект типа CFont (фонт), который выбран для использования.
pBitmap указатель на объект типа CBitmap (растровая картинка), который выбран для использования.
pRgn указатель на объект типа CRgn (область отсечения), который выбран для использования.
Пример: рисуем прямоугольник в текущем диалоговом окне с помощью определённого нами карандаша.
CClientDC dc ( this ) ; // контекст устройства – текущее диалоговое окно
CPen penRed ( PS_SOLID , 2 , 255 ) ; // создаём сплошной красный карандаш
dc.SelectObject ( &penRed ) ; // выбираем карандаш для использования
RECT rt = { 20 , 20 , 40 , 40 } ; // объявляем и инициализируем прямоугольник
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.