
- •Управление курсором при редактировании текста
- •Задание 3. Реализация процесса управления курсором при редактировании
- •Подведение итогов
- •Глава 10. Интерфейс графических устройств
- •Контексты устройств и объекты gdi
- •Объекты контекста устройства и выбор инструментов рисования
- •Идентификаторы стандартных инструментов рисования
- •Создание инструментов рисования
- •Некоторые стили пера
- •Значения, передаваемые в макрос rgb() для генерации стандартных чистых цветов vga
- •Режим отображения
- •Установка графических атрибутов
Идентификаторы стандартных инструментов рисования
Значение |
Встроенный объект |
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