Читайте также: |
|
Все тексты диалогового окна Windows пишет, используя по умолчанию системный шрифт. При помощи стиля DS_SETFONT прикладная программа может предписать Windows использовать в диалоговом окне другой шрифт и установить размер в пунктах и название шрифта. Не смотря на то, что шаблон диалогового окна может установить шрифт, Windows для заголовков и меню блока диалога всегда использует системный шрифт; стиль DS_SETFONT этого не меняет.
Когда установлен стиль DS_SETFONT, система передает процедуре диалогового окна и каждому элементу управления, когда она создает элементы управления, сообщение WM_SETFONT. Процедура диалогового окна ответственна за сохранение дескриптора шрифта при передаче сообщения DS_SETFONT и выбор дескриптора в контексте устройства отображения всегда, когда она записывает текст в окне. Предопределенные элементы управления делают это по умолчанию.
Когда дается стиль DS_SETFONT, Windows использует среднюю символьную ширину шрифта, чтобы вычислить позицию и габариты диалогового окна. Иначе, он использует среднюю символьную ширину системного шрифта.
Структура TEXTMETRIC содержит основную информацию о физическом шрифте. Все размеры даются на логических устройствах; то есть, они зависят от текущего распределения режима дисплейного контекста.
typedef struct tagTEXTMETRIC
{
LONG tmHeight; //Полная высота шрифта
LONG tmAscent; //Высота над основной линией
LONG tmDescent; //Высота подстрочных элементов
LONG tmInternalLeading; //Пустое пространство над символами
LONG tmExternalLeading; //Интервал между строками
LONG tmAveCharWidth; //Средняя ширина символов
LONG tmMaxCharWidth; //Максимальная ширина символов
LONG tmWeight; //Насыщенность (жирность) символов
LONG tmOverhang; //Дополнительная жирность для специальных шрифтов
LONG tmDigitizedAspectX; //Горизонтальный коэффициент сжатия
LONG tmDigitizedAspectY; //Вертикальный коэффициент сжатия
BCHAR tmFirstChar; //Первый символ шрифта
BCHAR tmLastChar; //Последний символ шрифта
BCHAR tmDefaultChar; //Символ, выбираемый по умолчанию
BCHAR tmBreakChar; //Символ, используемый для разделения слов
BYTE tmItalic; //Не ноль, если шрифт курсивный
BYTE tmUnderlined; //Не ноль, если шрифт подчеркнутый
BYTE tmStruckOut; //Не ноль, если шрифт перечеркнутый
BYTE tmPitchAndFamily; //Тип и семейство шрифта
BYTE tmCharSet; //Идентификатор базового набора символов
} TEXTMETRIC;
Получить информацию о текущем шрифте можно с помощью функции GetTextMetrics(). Её прототип таков:
BOOL CDC::GetTextMetrics(LPTEXTMETRIC lpTextAtrib) const;
Здесь параметр lpTextAtrib является указателем на структуру типа TEXTMETRIC, в которой после выполнения функции будут содержаться текстовые установки текущего шрифта, связанного с данным контекстом устройства. Функция возвращает ненулевое значение при успешном завершении и ноль - в противном случае.
Шрифты в Windows описываются в структуре LOGFONT, поля которой перечислены ниже. Большинство из них может иметь значение 0 или значение по умолчанию - все зависит от конкретной ситуации в приложении.
Поле | Описание |
lfHeight | Высота шрифта, логических единиц |
lfWidth | Ширина шрифта, логических единиц |
lfEscapement | Угол нанесения текста - угол между базовой линией текста и горизонталью (десятые доли градуса) |
lfOrientation | Наклон символов (десятые доли градуса) |
lfWeight | Толщина линий начертания шрифта ("жирность") |
lfItalic | Ненулевое значение означает курсив |
lfUnderline | Ненулевое значение означает подчеркивание |
lfStrikeOut | Ненулевое значение означает перечеркнутый шрифт |
lfCharSet | Номер набора символов шрифта - таблицы кодировки |
lfOutPrecision | Параметр, определяющий соответствие запрашиваемого шрифта и имеющегося в наличии |
lfClipPrecision | Параметр, определяющий способ "обрезания" изображения литер при их выходе за пределы области ограничения вывода |
lfQuality | Качество воспроизведения шрифта |
lfPitchAndFamily | Это поле определяет, будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит шрифт |
lfName | Имя шрифта |
Какой высоты, например, будут литеры шрифта, для которого в поле lfHeight задано значение 8 логических единиц? Значение логической единицы определяется режимом наложения (mapping mode). Соответствие между режимом наложения и значением логической единицы видно ниже.
Режимы наложения (mapping mode):
Режим | Логическая единица | Координата X | Координата Y |
Возрастание координат | |||
MM_HIENGLISH | 0,001 дюйма | Слева направо | Снизу вверх |
MM_HIMETRIC | 0,01 мм | Слева направо | Снизу вверх |
MM_ISOTROPIC | Произвольное | Определяется | Определяется |
MM_LOENGLISH | 0,01 дюйма | Слева направо | Снизу вверх |
MM_LOMETRIC | 0,1 мм | Слева направо | Снизу вверх |
MM_TEXT | Пиксель устройства | Слева направо | Сверху вниз |
MM_TWIPS | 1/1440 дюйма | Слева направо | Снизу вверх |
Толщина шрифта есть параметр, характеризующий некоторым посредственным образом толщину контурных линий литер. Для этого поля определен набор констант: FW_DONTCARE, FW_THIN, FW_EXTRALIGHT, FW_NORMAL, FW_ULTRALIGHT, FW_LIGHT, FW_REGULAR, FW_MEDIUM, FW_SEMIBOLD, FW_DEMIBOLD, FW_BOLD, FW_EXTRABOLD, FW_ULTRABOLD, FW_BLACK, FW_HEAVY. Не все шрифты могут принимать любое из указанных значений толщины.
Существует четыре возможных варианта шрифтов: ANSI_CHARSET, OEM_CHARSET, SYMBOL_CHARSET, UNICODE_CHARSET. Например, для написания только английским шрифтом следует воспользоваться вариантом ANSI_CHARSET.
Дата добавления: 2015-09-03; просмотров: 100 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Окончание работ | | | Схема последовательного технологического процесса |