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

Установка атрибутов текста и его отображение

Отображение текста или графики происходит в объекте контекста устройства, который сохраняет информацию о шрифте и других атрибутах рисования. Он предоставляет функцию для отображения графических изображений на контекстно-связанном устройстве. Если программа отображает выводимую информацию с помощью функции класса представления, отличной от функции OnDraw(), создается собственный объект контекста устройства. В программе TextDemo используется класс CClientDC для создания объекта контекста устройства, связанного с клиентской областью окна.

Чтобы задать шрифт, используемый для отображения текста, функция OnDraw() класса представления вызывает функцию CDC::SelectObject(), которой передается указатель на объект класса CFont. Поскольку объект класса CFont создается в классе документа, то для доступа к нему необходимо определить указатель на объект документа. Для определения указателя на объект документа класс представления имеет встроенную функцию-член GetDocument(), прототип которой приводится ниже.

CDocument* CView::GetDocument() const;

В программе TextDemo указатель на объект класса документа определяется в функции CTextDemoView::OnDraw() с помощью следующего оператора.

CTextDemoDoc* pDoc = GetDocument();

Полученный указатель pDoc на объект документа позволяет осуществить доступ к объекту шрифта и сформировать его адрес, который в качестве аргумента передается в функцию CDC::SelectObject(). При выборе нового шрифта класс документа инициализирует объект его описанием. Как только объект шрифта будет передан объекту контекста устройства, весь выводимый текст будет отображен с использованием шрифта, описание которого соответствует сохраняемому в объекте шрифта. Если в системе отсутствует нужный шрифт, то используется наиболее близкий по описанию. Если шрифт не выбран, текст отображается с использованием стандартного системного шрифта System. Выбор шрифта в объекте контекста устройства в программе TextDemo выполняется таким оператором:

рDC->SelectObject (&pDoc->m_Font);

Здесь рDC — указатель на объект контекста устройства.

Т а б л и ц а 8.6

Значения, присваиваемые параметру nIndex функции CDC::SelectStockObject() для выбора стандартного шрифта

Значение параметра

Стандартный шрифт

SYSTEM_FONT

Системный шрифт System с переменным питчем (шагом). Используется для отображения текста на экране, если шрифт не выбран в объекте контекста устройства. Используется Windows для отображения заголовков, меню и элементов управления диалоговых окон

SYSTEM_FIXED_FONT

Системный шрифт Fixedsys с фиксированным питчем. Шрифт, пригодный для программ редактирования и других приложений, в которых применяется шрифт с фиксированным питчем. Используется редактором Notepad

ANSI_VAR_FONT

Шрифт с переменным питчем, более мелкий, чем заданный значением SYSTEM_FONT

ANSI_FIXED_FONT

Шрифт с фиксированным питчем, более мелкий, чем заданный значением SYSTEM_FIXED_FONT

DEVICE_DEFAULT_FONT

Шрифт устройства, заданный по умолчанию (например, для окна — System, для принтера НР Laser Jet II — Courier)

OEM_FIXED_FONT

Шрифт Terminal с фиксированным питчем. Соответствует набору символов, используемых основными аппаратными средствами.

Отображение диалогового окна Font и использование объекта шрифта позволяет выбрать любой из доступных шрифтов для экрана или для другого устройства, указанного перед отображением диалогового окна. Можно выбрать стандартный шрифт, не отображая диалоговое окно Font и не используя объект шрифта. Стандартным является шрифт, принадлежащий небольшому набору типовых шрифтов Windows, обычно используемых для отображения информации на экране. Чтобы выбрать стандартный шрифт, вызовите функцию CDC::SelectStockObject(). Ее прототип представлен ниже.

virtual CGdiObject* SelectStockObject (int nIndex);

Параметр nIndex — это индекс требуемого шрифта. Ему можно присвоить одно из значений, приведенных в табл. 8.6. Шрифты, соответствующие этим значениям, показаны на рис. 8.9.

Рис. 8.9 Стандартные шрифты Windows

Технология использования стандартных шрифтов показана в упражнении 4. Пример выбора системного шрифта с фиксированным питчем (шагом) для отображения текста показан ниже в следующем фрагменте:

void CTextdemoView::OnDraw(CDC* pDC) { CTextdemoDoc* pDoc = GetDocument(); // TODO: здесь добавьте код отображения pDoc->SelectStockObject (SYSTEM_FIXED_FONT); // установка атрибутов текста ... // отображение текста в окне представления ... }

При отображении строк текста необходимо обеспечить их появления в координатах, которые изменяются при выводе каждой новой строки. В противном случае, новая строка будет затирать предыдущую, если координаты ее появления в окне представления совпадают с координатами уже отображенной строки. Для равномерного размещения строк в окне представления необходимо учесть высоту самого высокого символа и междустрочное расстояние. Эти значения для каждого шрифта сохраняются в структуре TEXTMETRIC, описанной ранее. Для получения атрибутов шрифта, сохраненных в структуре TEXTMETRIC, вызывается функция CDC::GetTextMetrics(), прототип которой рассмотрен ранее.

Класс контекста устройств CDC инкапсулирует множество текстовых функций (Text Functions) и функций по работе с атрибутами рисования (Drawing-Attribute Functions), которые устанавливают атрибуты текста, возвращают установленные значения атрибутов и отображают текст. Здесь приводится обзор некоторых функций класса CDC.

Функция CDC::SetTextColor() устанавливает цвет текста, заданный при выборе шрифта. Если вы не выбрали цвет текста, он будет отображаться черным. В качестве параметра используется цвет текста как значение RGB цвета. Прототип функции такой:

virtual COLORREF CDC::SetTextColor( COLORREF crColor );

Вызов функции СDC::SetBkMode() устанавливает режим фоновой окраски текста, который относится к области, окружающей символы внутри символьных ячеек. При передаче значения аргумента TRANSPARENT в функцию СDC::SetBkMode() символы отображаются прямо поверх существующих в устройстве цветов без окраски фона. Если в функцию СDC::SetBkMode() передать значение OPAQUE, то при отображении символов фон текста будет нарисован поверх существующих цветов на отображающей поверхности устройства (это стандартный режим фона). В режиме OPAQUE по умолчанию используется белый цвет. Таким образом, эта функция либо разрешает, либо запрещает окраску фона текста. Функция объявляется следующим образом:

int CDC::SetBkMode( int nBkMode );

Вызывая функцию CDC::SetBkColor() можно установить различные цвета фона. Функция OnDraw() класса представления определяет режим TRANSPARENT так, чтобы символы отображались поверх цвета фона окна представления, поэтому в программе не нужно устанавливать цвет фона. Обратите внимание: фон окна окрашивается с использованием системы цветов “Window”, устанавливаемой апплетом Display панели управления (Control Panel) Windows. Прототип функции CDC::SetBkColor() определен таким образом:

virtual COLORREF CDC::SetBkColor( COLORREF crColor );

В качестве параметра используется RGB код цвета фона.

Текущий режим отображения, определяющий систему координат и единицы измерения для позиционирования текста и графики, устанавливается с помощью функции CDC::SetMapMode(), прототип которой определяется так:

virtual int CDC::SetMapMode( int nMapMode );

В таблице 8.5 приведены значения констант, которые передаются в функцию CDC::SetMapMode() в качестве аргумента. Напомним, что режим MM_TEXT разрешает работать в пикселах устройства (1 логическая единица соответствует 1 пикселу).

Для выравнивания текста используют функцию CDC::SetTextAlign(). Параметр функции определяет флажки, которые задаются для выравнивания текста по горизонтали или по вертикали. Определен прототип функции:

UINT CDC::SetTextAlign( UINT nFlags );

Функция возвращает значение типа UINT, младший байт которого содержит установку горизонтального выравнивания текста, а старший байт — установку вертикального выравнивания. Значения флажков, определяющих типы выравнивания, приведены в табл. 8.7.

Т а б л и ц а 8.7

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