Программирование для 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_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); |