Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
289-320.doc
Скачиваний:
2
Добавлен:
11.11.2019
Размер:
301.57 Кб
Скачать

Идентификаторы стандартных инструментов рисования

Значение

Встроенный объект

BLACK_BRUSH

Черная кисть

DKGRAY_BRUSH

Темно-серая кисть

GRAY_BRUSH

Серая кисть

LTGRAY_BRUSH

Светло-серая кисть

NULL_BRUSH

Нулевая кисть (область не закрашивается)

WHITE_BRUSH

Белая кисть (по умолчанию)

BLACK_PEN

Черное перо (по умолчанию)

NULL_PEN

Нулевое перо (не рисует линию или границу)

WHITE_PEN

Белое перо

ANSI_FIXED_FONT

Системный шрифт с фиксированным питчем (шагом)

ANSI_VAR_FONT

Системный шрифт с переменным питчем (шагом)

DEVICE_DEFAULT_FONT

Зависимый от устройства шрифт

OEM_FIXED_FONT

Шрифт, предусматриваемый поставщиком оборудования

SYSTEM_FONT

Системный шрифт для меню, элементов управления диалоговых окон.

DEFAULT_PALETTE

Системная палитра с 20 цветами

Выбор стандартных инструментов рисования осуществляется вызовом функции CDC::SelectStockObject(). Ее прототип приводится ниже:

CGdiObject* CDC::SelectStockObject (int nIndex);

Параметр nIndex является кодом отдельного стандартного объекта, который передается в объект контекста устройства. Значения этого параметра для выбора стандартных перьев, кистей и шрифтов перечислены в табл. 10.1. Ниже приводится пример вызова функции CDC::SelectStockObject() для выбора белого пера и серой кисти.

void CMyView::OnDraw(CDC* pDC) { pDC->SelectStockObject (WHITE_PEN); pDC->SelectStockObject (GRAY_BRUSH); // Вызов других графических функций и рисование графики ... // (линии и границы будут белыми, внутренние области // фигур с замкнутыми контурами — серыми) }

При выборе пера NULL_PEN линии не рисуются. Аналогично при выборе NULL_BRUSH внутренняя часть фигуры не закрашивается. Этот инструмент удобен при рисовании фигур, состоящих только из границы (прямоугольник), если необходимо оставить неизменным существующее на экране графическое изображение внутри границы. В программе MyPaint выбирается NULL_BRUSH для рисования не закрашенных фигур с замкнутым контуром.

Создание инструментов рисования

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

  • Создайте объекты класса CPen для пера или CBrush для кисти, используя конструкторы этих классов.

  • Для инициализации пера или кисти вызовите функции CPen::CreatePen() или CBrush::CreateSolidBrush()

  • Выберите перо или кисть в объекте контекста устройства, сохраняя указатель на предыдущее перо или кисть.

  • Вызовите функции рисования для выполнения графического вывода.

  • Снова выберите старое перо или кисть в объекте контекста устройства для удаления текущих объектов пера или кисти из объекта контекста устройства.

Для создания временного пера или кисти можно объявить объект класса CPen или CBrush как локальный объект внутри функции, генерирующей графический вывод. Этот метод продемонстрирован в примере фрагмента программы, приведенном в конце этого параграфа. При многократном использовании в программе выбранного пера или кисти объект удобнее объявить как переменную класса представления или любого класса, управляющего окном вывода. Прототипы конструкторов, которые используются для создания объектов GDI, таковы:

CPen::CPen(); //создать объект пера CPen::CPen( int nPenStyle, int nWidth, COLORREF crColor ); CBrush(); //создать объект кисть CBrush( COLORREF crColor ); CBrush( int nIndex, COLORREF crColor ); CBrush( CBitmap* pBitmap ); CFont( ); //создать объект шрифта CBitmap( ); //создать объект растрового изображения CPalette( ); //создать объект палитры CRgn( ); //создать объект области отсечения

Используются такие параметры: nPenStyle —стиль пера согласно табл.10.2, nWidth — ширина пера; crColor — RGB код цвета согласно табл. 103; nIndex — стиль штриховки кисти в соответствии с табл. 10.4; pBitmap — указатель на объект растрового изображения, которым кисть заполняет внутреннюю часть фигуры.

Для создания объектов пера и кисти существуют разные прототипы конструкторов. Конструкторы с параметрами сразу инициализируют созданные объекты. Если для создания объектов GDI вы используете конструкторы без параметров, то такие объекты необходимо инициализировать.

Для инициализации пера вызовите функцию CPen::CreatePen(), прототип которой определен таким образом:

BOOL CPen::CreatePen (int nPenStyle, int nWidth, COLORREF crColor);

Параметр nPenStyle описывает стиль линии, нарисованной пером. Значения, которые можно присвоить параметру nPenStyle, и результирующие линии показаны на рис. 10.2 и табл. 10.2. Присваивание стиля PS_NULL создает перо, совпадающее со стандартным пером NULL_PEN. Стиль PS_INSIDEFRAME выбирает перо для рисования границы вокруг фигуры с замкнутым контуром, расположенной внутри ограничивающего прямоугольника. Ограничивающие прямоугольники и эффекты стиля PS_INSIDEFRAME описаны далее. Стили PS_DASH, PS_DOT, PS_DASHDOT и PS_DASHDOTDOT используются, если ширина пера равна 1 пикселу. Если ширина пера превышает этот размер, то перечисленные стили генерируют сплошные линии.

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

Т а б л и ц а 10.2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]