Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TPKS.docx
Скачиваний:
11
Добавлен:
16.03.2016
Размер:
51.33 Кб
Скачать

19. Встановлення та отримання характеристик тексту. Системні та логічні шрифти.

Из книги: Встановлення та отримання характеристик тексту

Функція TextOut() надає можливість вивести текстовий рядок, почина-ючи з вказаної позиції, але не дозволяє задавати формат виведення й не виконує переведення тексту на новий рядок.

Windows використовує різні шрифти і мають існувати способи їх зміни.

За допомогою функції GetTextMetrics() можна отримати інформацію про поточний шрифт. Ця функція має такий прототип:

BOOL CDC::GetTextMetrics( LPTEXTMETRIC lpMetrics ) ;

Функція записує поточні установки системного шрифту у покажчик lpMetrics. Цей покажчик вказує на тип TEXTMETRIC, який містить поточні установки текстового шрифту, пов’язаного із даним контекстом пристрою.

typedef struct tagTEXTMETRIC { /* tm */

int tmHeight; // повна висота шрифту

int tmAscent; // висота над базовою лінією

int tmDescent; // висота підрядкових елементів

int tmInternalLeading; // пустий простір над символами

int tmExternalLeading; // інтервал між рядками

int tmAveCharWidth; // середня ширина символів

int tmMaxCharWidth; // максимальна ширина символів

int tmWeight; // насиченість (жирність) символів

int tmOverhang; // додаткова насиченість для спеціальних шрифтів

int tmDigitizedAspectX; // горизонтальний коефіцієнт стискання

int tmDigitizedAspectY; // вертикальний коефіцієнт стискання

BYTE tmItalic; // не 0, якщо шрифт – курсив

BYTE tmUnderlined; // не 0, якщо шрифт – із підкресленням

BYTE tmStruckOut; // не 0, якщо шрифт – перекреслений

BYTE tmFirstChar; // перший символ шрифту

BYTE tmLastChar; // останній символ шрифту

BYTE tmDefaultChar; // символ шрифту за замовчуванням

BYTE tmBreakChar; // символ – роздільник слів

BYTE tmPitchAndFamily; // тип та сімейство шрифту

BYTE tmCharSet; // ідентифікатор базового набору символів

} TEXTMETRIC;

Такі основні характеристики має шрифт тексту, що правда, практично, ми не бачимо належності цього шрифту до будь-якого звичайного читачеві шрифту, наприклад “Times New Roman”. Про це – дещо пізніше.

З тієї причини, що символи шрифту можуть мати різну ширину, обчис-лення довжини рядка на основі кількості символів у рядку втрачає сенс. Тому потрібно використовувати функцію GetTextExtent():

СSize СDC::GetTextExtent(LPCSTR lpszString, int Len);

де lpszString – покажчик на рядок, довжину якого необхідно обчислити; Len – кількість символів у рядку; CSize – окремий тип, відповідний структурі SIZE:

typedef struct tagSize

{LONG cx; // ширина

LONG cy; // висота

}SIZE;

Лаба4:

void CMainWin::OnText()

{char t[255];

CClientDC DC(this);

TEXTMETRIC tm;

CSize size;

DC.SetTextColor(RGB(125,125,0));

DC.SetBkColor(RGB(255,125,0));

DC.GetTextMetrics(&tm);

wsprintf(t,"Шрифт має висоту %ld логічних одиниць",tm.tmHeight);

DC.TextOut(m_X,m_Y,t,strlen(t));

m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

strcpy(t,"Рядок перейшов на наступну позицію");

DC.TextOut(m_X,m_Y,t,strlen(t));

m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

wsprintf(t,"Шрифт має насиченість %ld одиниць",tm.tmWeight);

DC.TextOut(m_X,m_Y,t,strlen(t));

size=DC.GetTextExtent(t,strlen(t));

wsprintf(t,"Попередній рядок має довжину %ld логічних одиниць",size.cx);

m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

DC.TextOut(m_X,m_Y,t,strlen(t));

m_Y=m_Y+tm.tmHeight+tm.tmExternalLeading;

wsprintf(t,"Розміри екрану: %d %d",maxX,maxY);

DC.TextOut(m_X,m_Y,t,strlen(t));

}

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