пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

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

Функція 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;

          За допомогою функції GetSystemMetric() можна обчислити деякі параметри системи, у тому числі розміри екрана:

int GetSystemMetrics(int nIndex );

де як nIndex можна задати параметр, що необхідно отримати.

Вбудовані шрифти є готовими об’єктами. Їх використання забезпечується MFC-функцією CreateStockObject(int nIndex).

ANSI_FIXED_FONT     - фіксований ANSI системний шрифт. ANSI_VAR_FONT - змінний ANSI системний шрифт. DEVICE_DEFAULT_FONT - апаратно-залежний шрифт. OEM_FIXED_FONT - шрифт виробника апаратного забезпечення  SYSTEM_FONT  - системний шрифт за замовчуванням.

Для роботи із вбудованими шрифтами необхідно:

1.       Створити об’єкт типу CFont.

2.       Завантажити об’єкт шрифту за допомогою функції CreateStockObject().

3.       Обрати завантажений шрифт функцією SelectObject().

Створення логічних шрифтів забезпечується структурою LOGFONT. Вона певною мірою схожа на структуру TEXTMETRIC, але має й ряд власних особливостей.

Для використання логічного шрифту зробимо таку послідовність дій:

1. Оголосимо глобальні змінні типу LOGFONT та CFont:

LOGFONT lf;

CFont font1;

2. Завантажити діалог вибору шрифтів та обрати необхідний шрифт:

CFontDialog a;

a.DoModal();

a.GetCurrentFont(&lf);    // вибір опису шрифта у структуру логічного шрифту

3. Безпосередньо перед виведенням тексту створити фізичний шрифт на основі логічного опису та завантажити його у контекст пристрою вікна:

CClientDC dc(this);

font1.CreateFontIndirect(&lf); // створення фізичного шрифту на основі логічного опису

dc.SelectObject(font1);       //  вібір фізичного шрифту

dc.TextOut(60,60,str,strlen(str));     // виведення тексту

font1.DeleteObject();                         //  вилучення фізичного шрифту


21.06.2015; 22:37
хиты: 80
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь