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

12. Вывод текста. Логические и физические шрифты.

При помощи функции DrawText, имеющей следующий прототип:

BOOL DrawText(

HDC hdc. // дескриптор контекста устройства

LPCTSTR IpString. // указатель на символьную строку

int nCount, // длина текста

LPRECT lpRect. // указатель на ограничивающий прямоугольник

UINT uFormat // флаги форматирования текста

);

можно вывести текст из строки IpString в прямоугольную область, заданную структурой типа RECT, используя метод форматирования, заданный параметром uFormat. Количество символов в выводимой строке задается параметром nCount. Если установить значение nCount в -1, то система сама определит длину строки IpString по завершающему нулевому символу. Но в этом случае программист должен позаботиться о том, чтобы строка действительно завершалась нулевым байтом. На месте последнего параметра функции задан набор флагов DT_SINGLELINE | DT_CENTER | DT_VCENTER, значения которых определяются в заголовочных файлах Windows. Флаги показывают, что текст будет выводиться в одну строку, по центру относительно горизонтали и вертикали внутри прямоугольной области, заданной четвертым параметром.

Когда клиентская область становится недействительной (например, при изменении размеров окна), WndProc получает новое сообщение WM_PAINT. Обрабатывая его, программа вновь вызывает функцию GetCLientRect и поэтому рисует текст опять в центре окна.

К счастью, при выводе текста приложениям не приходится напрямую общаться с физическими шрифтами. С физическими шрифтами работают шрифтовые драйверы, находящиеся в системе на одном уровне с драйверами графических устройств. В программах же используются так называемые логические шрифты. Логический шрифт представляет собой объект GDI, описывающий требования к шрифту со стороны приложения. GDI анализирует запрошенные параметры и подбирает наиболее подходящий шрифт из тех, которые зарегистрированы в системе. Объект логического шрифта находится под управлением GDI вместе с другими логическими объектами. Приложения работают с логическими шрифтами только через их дескрипторы, имеющие тип HFONT.

Функция CreateFont использует для описания логического шрифта 14 параметров, поэтому она не слишком удобна в использовании. Вместо нее лучше пользоваться функцией CreateFontIndirect. Эта функция получает указатель на структуру LOGFONT, в которой упакованы эти же 14 параметров. Функция имеет следующий прототип:

HFONT CreateFontIndiret(CONST LOGFONT* Iplf);

После того как логический шрифт выбран в контекст устройства, приложение может получить дополнительную информацию о подобранном физическом шрифте и его метриках.

13. Системы координат. Трансформации. Режимы масштабирования.

Система координат для окна базируется на координатной системе дисплея. Основной единицей измерения служит пиксел. Точки на экране задаются парой координат (х, у). При этом х-координаты возрастают слева направо, а у-координаты — сверху вниз. Расположение начала координат зависит от режима отображения.

  • Мировая система координат (world space) может использоваться как начальная система координат, обеспечивающая любое преобразование.

  • Страничная система координат (page space) используется или как следующая система координат после мировой системы координат, или как стартовая система, которая поддерживает ограниченные преобразования. В этой системе могут устанавливаться режимы отображения.

  • Система координат устройства (device space) используется после страничной системы. В ней осуществляется только перемещение начала координат, чтобы обеспечить надлежащее положение изображения в физической системе координат.

  • Физическая система координат (physical device space) — последняя система в конвейере геометрических преобразований. Она используется драйвером графического устройства.

Для упрощения работы программиста Win32 API содержит несколько заготовок страничных систем координат, называемых режимами отображения (mappingmodes). В большинстве режимов отображения устанавливаются заранее выбранные габариты окна и области просмотра. Эти габариты определяют размер единицы измерения в страничной системе координат и коэффициент масштабирования при переходе к системе координат устройства. Впрочем, приложение может изменить положение начала координат окна и области просмотра, что позволяет выводить различные фрагменты геометрической модели в разных частях экрана. Режим отображения контекста устройства выбирается следующей функцией:

int SetMapMode (HDC hDC. int iMapMode);

В этой функции параметр iMapMode задает один из восьми идентификаторов режимов отображения.