Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование для IBM OS/2

© Александр Фролов, Григорий Фролов
Том 25, М.: Диалог-МИФИ, 1993, 286 стр.

[Назад] [Содеожание] [Дальше]

4.5. Другие фукнции для рисования текста

Кроме изученной нами функции GpiCharString At приложения Presentation Manager могут использовать для рисования текста еще несколько функций.

Функция GpiCharString отображает строку текста с текущей позиции и имеет следующий прототип:

LONG GpiCharString (
  HPS hps,  // идентификатор пространства отображения
  LONG lCount,     // размер текстовой строки
  PCH  pchString); // адрес текстовой строки

Текущая позиция для вывода текста устанавливается функцией GpiMove . После рисования строки текста текущая позиция устанавливается в конце этой строки, так что с помощью последующих вызовов функции GpiCharString вы можете дописать строку.

Функция GpiMove имеет два параметра:

BOOL GpiMove (
  HPS hps, // идентификатор пространства отображения 
  PPOINTL pptlPoint); // новая позиция

Ниже мы привели пример совместного использования фукнций GpiMove и GpiCharString :

HPS hps;
POINTL ptl;
 
ptl.x = 10L;
ptl.y = 10L;
GpiMove (hps, &ptlStart);
GpiCharString (hps, 5L, "Hello");
GpiCharString (hps, 8L, ", world!");

Нетрудно заметить, что рассмотренная нами ранее функция GpiCharString At является комбинацией функций GpiMove и GpiCharString.

Для рисования текста вы также можете использовать функции GpiCharString Pos, GpiCharStringPosAt и WinDrawText . Эти функции предназначены для форматного вывода текста и допускают выбор индивидуальной позиции для каждого отображаемого символа и использование таких элементов оформления текста, как подчеркивание и перечеркивание.

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

LONG WinDrawText (
  HPS hps,      // идентификатор пространства отображения
  LONG cchText, // длина текстовой строки в байтах
  PCH lpchText, // адрес отображаемой текстовой строки
  PRECTL prcl,  // прямоугольная область
  LONG clrFore, // цвет текста
  LONG clrBack, // цвет фона
  ULONG flCmd); // флаги режима отображения текста

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

При помощи параметра cchText необходимо задать длину отображаемой текстовой строки, адрес которой передается через параметр lpchText. Если эта строка закрыта двоичным нулем, вместо реальной длины строки можно указать значение -1, что очень удобно. Кроме двоичного нуля, строка может быть закрыта символом возврата каретки или перевода строки.

Перед вызовом функции WinDrawText необходимо подготовить структуру типа RECTL, записав в нее координаты прямоугольной области, внутри которой будет отображаться текст. Адрес этой структуры следует передать через параметр prcl.

Если текст не помещается по длине окна, он будет обрезан.

После возвращения из функции WinDrawText содержимое указанной выше структуры изменится. В ней будет записана высота прямоугольной области, занятая текстовой строкой (если в параметре flCmd указан флаг DT_QUERYEXTENT ).

Параметры clrFore и clrBack используются только в том случае, если в параметре flCmd указан флаг DT_TEXTATTRS . С помощью этих параметров вы можете задать, соответственно, цвет текста и цвет фона, которые будут использованы при выводе.

И, наконец, с помощью параметра flCmd вы можете указывать различные флаги, объединяя их при помощи логической операции ИЛИ. Эти флаги, определяющие режим работы функции WinDrawText , перечислены ниже.

Флаг Описание
DT_LEFT Выравнивание строки по левой границе заданной прямоугольной области
DT_RIGHT Аналогично, но по правой границе
DT_TOP Аналогично, но по верхней границе
DT_BOTTOM Аналогично, но по нижней границе
DT_CENTER Центрирование строки по горизонтали
DT_VCENTER Центрирование строки по вертикали
DT_HALFTONE Отображение текста с исользованием полутонов
DT_MNEMONIC Отображение мнемонических символов
DT_QUERYEXTENT После возвращения из функции WinDrawText содержимое структуры, адрес которой передается через параметр prcl, изменяется таким образом, чтобы отражать реальную высоту нарисованной строки символов
DT_WORDBREAK Если строка символов, состоящая из отдельных слов, не помещается в окне, она будет обрезана таким образом, что в окне будут отображаться только полные слова текста
DT_EXTERNALLEADING Используется вместе с флагами DT_TOP и DT_QUERYEXTENT. Если указан этот флаг, возвращаемая в структуре prcl высота символов будет увеличена на размер выступающей части символов
DT_TEXTATTRS При отображении текста необходимо использовать цвета символов и фона, указанные в параметрах функции clrFore и clrBack
DT_ERASERECT Перед отображением текста содержимое прямоугольной области prcl будет стерто
DT_UNDERSCORE Символы текста выделяются подчеркиванием
DT_STRIKEOUT Символы текста выделяются перечеркиванием

После ввыполнения рисования функция возвращает количество нарисованных символов. При ошибке возвращается нулевое значение.

Флаги DT_LEFT, DT_CENTER и DT_RIGHT нельзя использовать вместе, точно также, как и флаги DT_TOP, DT_VCENTER и DT_BOTTOM.

Ниже мы привели пример использования функции WinDrawText для отображения текста в центре окна, размеры которого определяются при помощи функции WinQueryWindow Rect:

WinQueryWindow Rect(hWnd, &rec);
WinDrawText (hps, -1, pszText, &rec, 0L, 0L,
  DT_WORDBREAK | DT_CENTER | DT_VCENTER |
  DT_TEXTATTRS | DT_ERASERECT);
[Назад] [Содеожание] [Дальше]