int IfEscapement; //Поворот текста в десятых долях градуса
int IfOrientation; //Угол наклона символа
int IfWeight; //Жирность символа от 0 до 1000
BYTE Ifltalic; //Не ноль, если курсив
BYTE IflJnderlinc; //Не ноль, если подчеркнуто
BYTE IfStrikeOut; //Не ноль, если перечеркнуто
BYTE IfCharSet; //Особенности кодировки
BYTE OutPreccision; //Точность рисования
BYTE IfCli pPreci si on: //Точность отсечения
BYTE IfQuality: //Качество формирования
//DRAFT_QUALYTY - черновое. PR00F_QUALYTY - высокое, обычно DEFAULT_QUALYTY BYTE IfPitchAndFamily; //Флаги, определяющие семейство шрифта BYTE 1 fFaceName[LF_FACESIZE]; //Название шрифта } LOGFONT; Название шрифта 1 f FaceName определяет дизайн символов. Существуют шрифты матричные, векторные и шрифты семейства True Туре. В матричных шрифтах конфигурация символов задается прямоугольной таблицей, содержащей единицы и нули. В векторных шрифтах форма символов задается координатами отрезков, из которых составлен символ. Шрифты True Туре содержат дополнительные данные, позволяющие не искажать форму символов при их масштабировании и выводе на носители изображения с разным разрешением.
При создании шрифта от программиста не требуется определять все 14 полей. Чтобы шрифт был создан, достаточно заполнить часть полей структуры L0GF0NT (остальные могут быть нулями) и вызвать функцию hFont - CreateFontlndi rect(), как показано в листинге 19.1.
Листинг 19.1
HFONT hFont; L0GF0NT If; if(F-3) {
HDC hdc - GetDC(UkOkn);
lf.lfHeight »-12.5; //При отрицательном числе шрифт получается крупнее.
//чем при таком же положительном значении
lf.lfWeight - 200; If.Ifltalic - 1;
strcpy (If.IfFaceName. "Courier"):
hFont - CreateFontlndirect (&lf);
hFont -(HFONT) SelectObject (hdc. hFont);
Если нет возможности точно подобрать заданные в структуре L0GF0HT требования к шрифту, функция создания шрифта создает наиболее близкий шрифт. Например, если отсутствует шрифт с заданным именем, то выбирается другой шрифт из того же семейства.