Ассемблер для Windows


         

флаг точности прилегания шрифта; определяет,


LfClipPrecision - флаг точности прилегания шрифта; определяет, как будут отсекаться части шрифта, не попадающие в видимую область. Возможные значения:

CLIP_DEFAULT_PRECIS = 0 CLIP_CHARACTER_PRECIS = 1 CLIP_STROKE_PRECIS = 2 CLIP_MASK = 0FH CLIP_LH_ANGLES = (1 SHL 4) CLIP_TT_ALWAYS = (2 SHL 4) CLIP_EMBEDDED = (8 SHL 4)

LfQuality - флаг качества шрифта; определяет соответствие логического шрифта и шрифта, допустимого данным устройством. Возможные значения:

DEFAULT_QUALITY = 0 DRAFT_QUALITY = 1 PROOF_QUALITY = 2

LfPitchAndFamily - определяет тип и семейство шрифта. Возможные значения определяются комбинацией (ИЛИ) двух групп констант:

DEFAULT_PITCH = 0 FIXED_PITCH = 1 VARIABLE_PITCH = 2

и

FF_DONTCARE = 0 FF_ROMAN = (1 SHL 4) FF_SWISS = (2 SHL 4) FF_MODERN = (3 SHL 4) FF_SCRIPT = (4 SHL 4) FF_DECORATIVE = (5 SHL 4)

LfFaceName - содержит название шрифта. Длина имени не может превосходить 32 символа.

Обратимся к примеру задания своего шрифта (результат работы программы - на Рисунок 2.1.5). Однако поскольку большая часть программы будет совпадать с аналогичной частью предыдущих программ, я приведу здесь только необходимые фрагменты. Рассмотрим сначала фрагмент, выполняющийся при получении сообщения WM_PAINT (Рисунок 2.1.3).

WMPAINT: ;------- определить контекст PUSH OFFSET PNT PUSH DWORD PTR [EBP+08H] CALL BeginPaint@8 MOV CONT,EAX ; сохранить контекст (дескриптор) ;------- цвет фона = цвет окна PUSH RGBW PUSH EAX CALL SetBkColor@8 ;------- цвет текста (красный) PUSH RGBT PUSH CONT CALL SetTextColor@8 ;------ здесь определение координат MOV XT, 120 MOV YT, 140 ;------ задать (создать) шрифт MOV lg.LfHeight,12 ; высота фонта MOV lg.LfWidth, 9 ; ширина фонта MOV lg.LfEscapement,900 ; ориентация MOV lg.LfOrientation, 0 ; вертикальная MOV lg.LfWeight,400 ; толщина линий шрифта MOV lg.LfItalic, 0 ; курсив MOV lg.LfUnderline, 0 ; подчеркивание MOV lg.LfStrikeOut, 0 ; перечеркивание MOV lg.LfCharSet, 0 ; набор шрифтов MOV lg.LfOutPrecision, 0 MOV lg.LfClipPrecision, 0 MOV lg.LfQuality,2 MOV lg.LfPitchAndFamily,0 PUSH OFFSET lg ; задать название шрифта PUSH OFFSET NFONT PUSH OFFSET lg.LfFaceName CALL COPYSTR CALL CreateFontIndirectA@4 ;------ выбрать созданный объект PUSH EAX PUSH CONT CALL SelectObject@8 PUSH EAX ;------ вычислить длину текста в пикселях текста PUSH OFFSET TEXT CALL LENSTR ;---------- вывести текст ---------------- PUSH EBX PUSH OFFSET TEXT PUSH YT PUSH XT PUSH CONT CALL TextOutA@20 ; удалить объект "FONT" ; идентификатор уже в стеке CALL DeleteObject@4 ;---------------- закрыть контекст PUSH OFFSET PNT PUSH DWORD PTR [EBP+08H] CALL EndPaint@8 MOV EAX, 0 JMP FINISH


Содержание  Назад  Вперед