Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UP03_Vyvod_v_okno.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
550.4 Кб
Скачать

3.4. Вывод текста

3.4.1. Настройка параметров шрифта

В контекст отображения по умолчанию выбирают системный шрифт. Для создания логического шрифта удобно вызвать функцию CreateFontIndirect:

HFONT WINAPI CreateFontIndirect(const LOGFONT FAR* tptf);

Она возвращает дескриптор созданного шрифта. В качестве аргумента вызова функции CreateFontIndirect передают указатель на структуру типа LOGFONT:

typedef struct {

LONG lfHeight;

LONG lfWidth;

LONG lfEscapement;

LONG lfOrientation;

LONG lfWeight;

BYTE lfItalic;

BYTE lfUnderline;

BYTE lfStrikeOut;

BYTE lfCharSet;

BYTE lfOutPrecision;

BYTE lfClipPrecision;

BYTE lfQuality;

BYTE lfPitchAndFamily;

TCHAR lfFaceName[LF_FACESIZE];

} LOGFONT;

Назначение полей этой структуры:

  1. lfHeight – высота шрифта в логических единицах. Положительное значение поля lfHeight задает высоту ячейки вывода букв. Если lfHeight < 0, то абсолютная величина значения lfHeight задает высоту символов. При lfHeight = 0 создают шрифт с высотой символов по умолчанию: lfHeight = 12.

  2. lfWidth – ширина символов в логических единицах. Если указано нулевое значение, используют ширину по умолчанию.

  3. lfEscapement – угол (в направлении против часовой стрелки) в десятых долях градуса между линией вывода строки и координатной осью X. Значение lfEscapement может отличаться от нуля только для масштабируемых и векторных шрифтов.

  4. lfOrientation – угол (в направлении против часовой стрелки) в десятых долях градуса между линией основания символа и координатной осью X. Рекомендуется задавать равным значению lfEscapement.

  5. lfWeight – вес шрифта. Определяет жирность символов шрифта и может находиться в пределах от 0 до 1000. Принимает значения констант из следующей таблицы:

Константа

Вес

Константа

Вес

Константа

Вес

FW_DONTCARE

0

FW_NORMAL

400

FW_BOLD

700

FW_THIN

100

FW_REGULAR

400

FW_EXTRABOLD

800

FW_EXTRALIGHT

200

FW_MEDIUM

500

FW_ULTRABOLD

800

FW_ULTRALIGHT

200

FW_SEMIBOLD

600

FW_BLACK

900

FW_LIGHT

300

FW_DEMIBOLD

600

FW_HEAVY

900

Многие шрифты содержат символы только весов FW_NORMAL, FW_REGULAR (нормальный) и FW_BOLD (полужирный). Если задать нулевое значение (lfWeight = 0), используют вес по умолчанию.

  1. Если lfItalic не равен 0, запрашивают шрифт с наклонными буквами.

  2. Если lfUnderline не равен 0, запрашивают шрифт с подчеркиванием букв.

  3. Если lfStrikeOut не равен 0, запрашивают шрифт с перечеркнутыми буквами.

  4. lfCharSet – наиболее важное поле структуры. Оно задает набор требуемых символов. Может принимать значения констант из следующей таблицы:

Константа

Описание

ANSI_CHARSET

Набор символов в кодировке ANSI

DEFAULT_CHARSET

Задают для запроса логического шрифта

SYMBOL_CHARSET

Символьный шрифт (например, Wingdings)

SHIFTJIS_CHARSET

Нужен для работы с японской версией Windows

OEM_CHARSET

Набор символов в кодировке OEM

Если lfCharSet = 0, будет выбран шрифт ANSI_CHARSET.

  1. lfOutPrecision задает необходимую степень соответствия между параметрами запрашиваемого и предоставляемого шрифта. Можно указывать одну из следующих констант:

Константы

Описание

OUT_DEFAULT_PRECIS

Степень соответствия по умолчанию

OUT_STRING_PRECIS или OUT_CHARACTER_PRECIS

Выбрать шрифт с наибольшим соответствием в размерах символов

OUT_STROKE_PRECIS

Искать шрифт с полным соответствием

OUT_TT_PRECIS

Предпочтение шрифтам True Туре

OUT_DEVICE_PRECIS

Выбрать шрифт устройства вывода

OUT_RASTER_PRECIS

Выбрать растровый шрифт

OUT_TT_ONLY_PRECIS

Выбирать только шрифты True Туре

  1. lfClipPrecision задает способ обрезания изображения символа на границе вывода. Можно использовать следующие константы: CLIP_STROKE_PRECIS, CLIP_MASK, CLIP_DEFAULT_PRECIS, CLIP_LH_ANGLES, CLIP_TT_ALWAYS, CLIP_EMBEDDED и CLIP_CHARACTER_PRECIS. Если указана CLIP_LH_ANGLES, направление вращения текста зависит от установленного режима отображения.

  2. lfQuality задает качество отображения символов. Можно указывать одну из следующих констант:

    Константа

    Описание

    DEFAULT_QUALITY

    Качество не имеет значения

    DRAFT_QUALITY

    Низкое качество

    PROOF_QUALITY

    Высокое качество

  3. lfPitchAndFamily задает ширину символов и определяет семейство шрифта. Фиксированная или переменная ширина символов задается при помощи следующих констант:

Константа

Описание

DEFAULT_PITCH

Не имеет значения, будет ли шрифт иметь фиксированную или переменную ширину символов

FIXED_PITCH

Нужен шрифт фиксированной ширины символов

VARIABLE_PITCH

Нужен шрифт с переменной шириной символов

Следующие константы задают семейство шрифта:

Константа

Описание

FF_DECORATIVE

Шрифт, содержащий маленькие рисунки (например, Wingdings)

FF_DONTCARE

Семейство шрифта не имеет значения

FF_MODERN

Семейство Modem. Фиксированная ширина символов, могут быть засечки (но могут и не бьггь)

FF_ROMAN

Семейство Roman. Переменная ширина букв, есть засечки

FF_SCRIPT

Семейство Script. Рукописный шрифт

FF_SWISS

Семейство Swiss. Переменная ширина букв, нет засечек

  1. lfFaceName – строка с именем шрифта. Длина этой строки не должна превышать 32 символа. Если lfFaceName – пустая строка, используют шрифт, который соответствует по другим атрибутам.

Получив запрос, GDI начинает искать шрифт, сравнивая последовательно поля lfCharSet, lfPitchAndFamily и lfFaceName. После сравнения этих полей GDI сравнивает высоту букв шрифта, затем поля lfWidth, lfItalic, lfUnderline и lfStrikeOut.

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