
- •Уп. 3. Вывод в окно
- •3.1. Сообщение wm_paint
- •3.2. Виды контекста отображения
- •Общий контекст отображения
- •Контекст отображения для класса окон
- •Личный контекст отображения
- •Родительский контекст отображения
- •Контекст отображения для окна
- •3.3. Установка атрибутов контекста отображения
- •3.4. Вывод текста
- •3.4.1. Настройка параметров шрифта
- •3.4.2. Выбор шрифта в контекст отображения
- •3.4.3. Функции вывода текста
- •3.4.4. Пример вывода текста в окно
- •3.4.5. Определение метрик шрифта
- •3.5. Рисование геометрических фигур
- •3.5.1. Функции рисования точки
- •3.5.2. Функции рисования линий
- •3.5.3. Функции рисования замкнутых фигур
- •Контрольные вопросы
- •Упражнения
- •Приложение 3
3.4.2. Выбор шрифта в контекст отображения
Пусть в структуре типа LOGFONT заполнены нужные поля и ее адрес передан функции CreateFontIndirect. Тогда эта функция вернет дескриптор созданного шрифта hfont.
Для выбора шрифта hfont в контекст отображения hdc вызывают функцию SelectObject:
SelectObject(hdc, hfont);
Как только в шрифте hfont отпадет необходимость, его следует удалить при помощи макрокоманды DeleteObject, предварительно выбрав в контекст отображения предыдущий шрифт.
3.4.3. Функции вывода текста
Функция TextOut выводит символьную строку в указанной позиции, соблюдая выбранные атрибуты контекста отображения.
Функция TextOut объявлена следующим образом:
BOOL TextOut( HDC hdc, int nXStart, int nYStart,
LPCTSTR lpString, int cbString );
Параметры этой функции:
nXStart задает логическую х-координату операции вывода.
nYStart задает логическую у-координату операции вывода.
lpString указывает на строку, которая будет выведена.
cbString равен количеству символов в выводимой строке.
Функция TextOut заданную строку выводит внутри воображаемого прямоугольника, сформированного ячейками символов выводимой строки. Координаты nXStart и nYStart, в зависимости от режима выравнивания, определяют различные точки этого прямоугольника.
Функция SetTextAlign выбирает режим выравнивания текста в контекст отображения:
UINT SetTextAlign( HDC hdc, UINT fMode);
Параметр fMode задает режим выравнивания и определяется при помощи трех групп флагов. Символические имена флагов начинаются с префикса ТА_.
Первая группа флагов отвечает за выравнивание строки по горизонтали:
Флаг |
Описание |
TA_LEFT |
Выравнивать по левой границе. Координата nXStart определяет левую границу воображаемого прямоугольника. Этот режим выбран по умолчанию |
TA_CENTER |
Выравнивать по центру. Координата nXStart определяет центр воображаемого прямоугольника |
TA_RIGHT |
Выравнивать по правой границе. Координата nXStart определяет правую границу воображаемого прямоугольника |
Вторая группа флагов отвечает за выравнивание текста по вертикали:
Флаг |
Описание |
ТА_ТОР |
Выравнивать по верхней границе. Координата nYStart определяет верхнюю границу воображаемого прямоугольника. Этот режим выбран по умолчанию |
TA_BASELINE |
Выравнивать по базовой линии выбранного шрифта |
TA_BOTTOM |
Выравнивать по нижней границе |
Третья группа флагов относится к текущей позиции вывода:
Флаг |
Описание |
TA_NOUPDATECP |
Не изменять значения текущей позиции вывода текста (используется по умолчанию) |
TA_UPDATECP |
После вывода вычислить новое значение текущей позиции |
Из каждой группы флагов используют только один, например:
SetTextAlign(hdc, TA_CENTER | TA_BASELINE | TA_UPDATECP);
Функция SetTextAlign возвращает старое значение режима выравнивания или, в случае ошибки, – GDI_ERROR.
Если задан режим выравнивания TA_UPDATECP, функция TextOut начинает вывод текста с текущей позиции, игнорируя параметры, определяющие расположение текста в окне.