Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 12:

Вывод текста на экран и устройство в Windows

12.7. Приложение № I. Описание функций текстового ввода-вывода

ФУНКЦИЯ TEXTOUT
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: BOOL TextOut( hdc, nxStart, nYStart, lpszString, UINT cbString) ; где
  • HDC hdc - контекст устройства вывода;
  • int nXStart - начальная горизонтальная координата в окне (в пикселях), с которой начинается вывод текста;
  • int nYStart - начальная вертикальная координата в окне (в пикселях), с которой начинается вывод текста;
  • LPSTR lpszString - дальний указатель на выводимую строку текста;
  • cbString - длина выводимой символьной строки в байтах;
НАЗНАЧЕНИЕ: Выводит текст в окно с атрибутами контекста по-умолчанию;
ОПИСАНИЕ: Функция выводит текст в окно с параметрами контекста, заданными по-умолчанию или изменённые в процессе обработки сообщения WM_PAINT. По-умолчанию шаг координат в окне - один пиксель, начало координат находится в левом верхнем углу рабочей области окна, ось X направлена вправо, а ось Y - вниз;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: TRUE - при удачном выводе текста и FALSE в случае неудачи;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

ФУНКЦИЯ EXTTEXTOUT
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: BOOL WINAPI ExtTextOut( hdc, nxStart, nYStart, fuOptions, lprc, lpszString, cbString, lpDx ) ; где
  • HDC hdc - контекст устройства вывода;
  • int nXStart - начальная горизонтальная координата в окне (в пикселях), с которой начинается вывод текста;
  • int nYStart - начальная вертикальная координата в окне (в пикселях), с которой начинается вывод текста;
  • UINT fuOptions - флаги, позволяющие определить тип ограничивающей прямоугольной области, заданной параметром: lprc. Этот параметр задаётся в виде двух флагов, которые можно определить логической операцией ИЛИ ;
  • const RECT FAR *lprc - дальний указатель на структуру типа RECT. Он определяет прямоугольную область, используемую для ограничения и закрашивания (смотри флаги в примечании). Если вместо него указать значение NULL, то область ограничения не используется;
  • LPSTR lpszString - дальний указатель на выводимую строку текста;
  • cbString - длина выводимой символьной строки в байтах;
  • int FAR *lpDx - этот параметр позволяет задать расстояние между отдельными символами. Если вместо этого параметра указано значение NULL, то при выводе текста расстояние между символами определяется шрифтом, выбранным в контекст отображения. Если же в качестве этого параметра указать дальний адрес массива значений int, то Вы сможете определить индивидуальные расстояния между отдельными символами. Размер массива должен быть равен значению, указанному в параметре: cbString ;
НАЗНАЧЕНИЕ: Выводит строку символов в рабочую область окна. Имеет расширенные параметры вывода;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: TRUE - при удачном выводе текста и FALSE в случае неудачи;
ПЕРЕНОСИМОСТЬ: Только WinAPI;
ПРИМЕЧАНИЕ: Флаги в параметре функции fuOptions могут принимать следующие значения:
  • ETO_CLIPPED - указывает, что прямоугольная область, заданная параметром lprc, определяет область ограничения для вывода текста;
  • ETO_OPAQUE - позволяет закрасить прямоугольную область цветом, заданным при помощи функции SetBkColor ;

ФУНКЦИЯ TABBEDTEXTOUT
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: LONG WINAPI TabbedTextOut( hdc, nXStart, nYStart, lpszString, cbString, cTabStops, lpnTabPositions, nTabOrigin ) ; где
  • HDC hdc - контекст устройства вывода;
  • int nXStart - начальная горизонтальная координата в окне (в пикселях), с которой начинается вывод текста;
  • int nYStart - начальная вертикальная координата в окне (в пикселях), с которой начинается вывод текста;
  • LPSTR lpszString - дальний указатель на выводимую строку текста;
  • cbString - длина выводимой символьной строки в байтах;
  • int cTabStops - определяет количество значений в массиве позиций символов табуляции. Если значение этого параметра равно 1, расстояние между символами табуляции определяется первым элементом массива, адрес которого передаётся через параметр: lpnTabPositions ;
  • int FAR *lpnTabPositions - определяет адрес массива целых чисел, определяющих расположение символов табуляции. Массив должен быть отсортирован в порядке увеличения значений;
  • int nTabOrigin - определяет логическую X координату начальной позиции, относительно которой происходит расширение символов табуляции;
НАЗНАЧЕНИЕ: Функция предназначена для вывода текстовых строк, содержащих символы табуляции;
ОПИСАНИЕ: Эту функцию удобно использовать для вывода текстовых таблиц;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает размер (в логических единицах) области, занятой выведённой строкой. Старшее слово возвращаемого значения содержит высоту строки, младшее - ширину строки;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

ФУНКЦИЯ DRAWTEXT
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: int WINAPI DrawText( hdc, lpszString, cbString, lprc, fuFormat ) ; где
  • HDC hdc - контекст устройства вывода. Этим контекстом не может быть контекст метафайла;
  • LPSTR lpszString - дальний указатель на выводимую строку текста;
  • cbString - длина выводимой символьной строки в байтах;
  • RECT FAR *lprc - дальний указатель на структуру типа RECT, определяющую координаты левого верхнего и правого нижнего углов прямоугольной области, в которую будет выведен текст. Текст может быть выровнен и отформатирован внутри этой области в соответствии со значением, указанным параметром fuFormat ;
  • UINT fuFormat - параметр задаётся как набор флагов с использованием операции логического ИЛИ. Полный список используемых флагов перечислен в таблице 12.1.
НАЗНАЧЕНИЕ: Функция предназначена для форматированного вывода текста в прямоугольную область окна;
ОПИСАНИЕ: Если перед выводом функции Вы включили режим обновления текущей позиции вывода (вызвав функцию SetTextAlign с параметром: TA_UPDATECP ), то текст будет выведен начиная с текущей позиции вывода, которая устанавливается за последним выведенным ранее символом. Перенос слов при этом не выполняется;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: В случае успешного завершения функция возвращает высоту прямоугольной области, использованной для вывода текста;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

Таблица 12.1. Флаги команды DrawText
Флаг Описание
DT_BOTTOM Выравнивание текста по верхней границе прямоугольника, заданного параметром lprc. Этот флаг должен использоваться в комбинации с флагом DT_SINGLELINE
DT_CALCRECT Определение высоты и ширины прямоугольника без вывода текста. Если указан этот флаг, функция DrawText возвращает высоту текста. Если выводимый текст состоит из нескльких строк, функция использует ширину прямоугольника, заданную параметром lprc, и расширяет базу этого прямоугольника до тех пор, пока прямоугольник не вместит в себя последнюю строку текста. Если текст состоит из одной строки, функция изменяет правую сторону прямоугольника до тех пор, пока последний символ строки не поместится в прямоугольник.

В структуру, заданную параметром lprc, после возврата из функции будут записаны размеры прямоугольной области, использованной для вывода текста.

DT_CENTER Центрирование текста по горизонтали.
DT_EXPANDTABS Расширение символов табуляции. По-умолчанию каждый символ табуляции расширяется на восемь символов.
DT_EXTERNALLEADING Вывод текста выполняется с учётом межстрочного расстояния (external leading), определённого для выбранного шрифта разработчиком шрифтов.
DT_LEFT Выраввнивание текста по левой границе прямоугольной области, заданной параметром lprc.
DT_NOCLIP Вывод текста выполняется без ограничения области вывода. Этот режим увеличивает скорость вывода текста.
DT_NOPREFIX Выключение директивы подчёркивания &. По-умолчанию символ "&" используется для того, чтобы вывести следующий символ с выделением подчёркиванием. Для вывода самого символа "&" его нужно повторить дважды. Флаг DT_NOPREFIX выключает этот режим.
DT_RIGHT Выравнивание текста по правой границе прямоугольной области, заданного параметром lprc.
DT_SINGLELINE Текст состоит только из одной строки. Символы возврата каретки и перевода строки не вызывают перехода на следующую строку.
DT_TABSTOP Установить точки останова по символам табуляции.
DT_TOP Выравнивание текста по верхней грангице прямоугольной области, заданной параметром lprc. Данный флаг используется совместно с флагом DT_SINGLELINE.
DT_VCENTER Выравнивание текста по вертикали. Данный флаг используется вместе с флагом DT_SINGLELINE.
DT_WORDBREAK Выполнение свёртки слов в пределах заданной параметром lprc прямоугольной области. Если слово не помещается в строке, оно может быть перенесено на следующую строку текста.

ФУНКЦИЯ SETTEXTALIGN
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: UINT WINAPI SetTextAlign( hdc, fuAlign ) ; где
  • HDC hdc - контекст устройства вывода;
  • UINT fuAlign - набор из трёх битовых флагов, управляющими выравниванием и переносом текста. Обозначение и назначение этих флагов смотри в таблице 12.2.
НАЗНАЧЕНИЕ: Функция управляет выравниванием и переносом текста при текстовом выводе в рабочую область окна;
ОПИСАНИЕ: Первый набор флагов используется при выравнивании воображаемого прямоугольника, ограничивающего текст, по горизонтали относительно указанных выше функций. Второй набор флагов отвечает за выравнивание текста по вертикали. И, наконец, третья группа флагов отвечает за обновление текущей позиции вывода в строке. Если указан флаг: TA_UPDATECP, то вывод текста продолжится с прежней позиции вывода, а координаты: nXStart и nYStart в функциях вывода текста игнорируются;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Прежнее значение параметров выравнивания и переноса текста;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

Таблица 12.2. Флаги команд SetTextAlign
Флаг Описание
Выравнивание по горизонтали
TA_LEFT Выравнивание по левой границе. Координаты соответствуют левой границе воображаемого прямоугольника, охватывающего текст (используется по-умолчанию).
TA_CENTER Выравнивание по центру. Координаты соответствуют центру воображаемого прямоугольника, охватывающего текст.
TA_RIGHT Выравнивание по правой границе воображаемого прямоугольника, охватывающего текст.
Выравнивание по вертикали
TA_TOP Выравнивание по верхней границе. Координаты соответствуют верхней границе воображаемого прямоугольника, охватывающего текст (используется по-умолчанию).
TA_BASELINE Выравнивание по базовой линии выбранного шрифта.
TA_BOTTOM Выравнивание по нижней границе воображаемого прямоугольника, охватывающего текст.
Текущая позиция вывода текста
TA_NOUPDATECP Не изменять значение текущей позиции вывода текста (используется по-умолчанию).
TA_UPDATECP После использования функций TextOut и ExtTextOut вычислять новое значение текущей позиции вывода текста.

ФУНКЦИЯ GETTEXTALIGN
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: UINT WINAPI GetTextAlign( hdc ), где HDC hdc - контекст устройства вывода;
НАЗНАЧЕНИЕ: Возвращает текущее состояние флагов выравнивания текста в текущем контексте вывода;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Текущее значение параметров выравнивания и переноса текста;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

ФУНКЦИЯ SETTEXTCOLOR
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: COLORREF WINAPI SetTextColor( hdc, clrref ) ; где
  • HDC hdc - контекст устройства вывода;
  • COLORREF clrref - структура, определяющая цвет (в данном случае выводимых символов);
НАЗНАЧЕНИЕ: функция меняет цвет выводимых символов;
ОПИСАНИЕ: функция изменяет в контексте текущего устройства вывода Windows hdc цвет выводимых на экран (устройство) символов при помощи функций текстового вывода;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Прежнее значение цвета текста в контексте вывода;
ПЕРЕНОСИМОСТЬ: Только WinAPI;

ФУНКЦИЯ GETTEXTCOLOR
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: COLORREF WINAPI GetTextColor( hdc ) ; где HDC hdc - контекст устройства вывода;
НАЗНАЧЕНИЕ: функция выводит цвет символов;
ОПИСАНИЕ: функция выводит в контексте текущего устройства вывода Windows hdc цвет выводимых на устройство символов при помощи функций текстового вывода;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Текущее значение цвета текста в контексте вывода, в виде структуры: COLORREF (смотри приложение №I к "Атрибуты и функции работы с контекстом (приложение)" , пункт 11.3);
ПЕРЕНОСИМОСТЬ: Только WinAPI;

ФУНКЦИЯ GETTEXTEXTENT
ОПРЕДЕЛЕНА В: <windows.h>
СИНТАКСИС: DWORD GetTextExtent( hdc, lpszString, cbString ) ; где
  • HDC hdc - контекст устройства вывода;
  • LPCSTR lpszString - дальный константный указатель на выводимую строку;
  • int cbString - число литер (байт) в строке;
НАЗНАЧЕНИЕ: Данная функция вычисляет ширину и высоту строки текста, использующего текущий шрифт для вычисления своего размера (в единицах логических координат).;
ОПИСАНИЕ: Функция выдаёт значения в единицах логических координат области вывода. Для вывода текста в стандартной системе координат рабочей области окна единицей логических координат принят один пиксель. Ширина строки расчитывается как сумма ширины и интервалов всех литер, входящих в текст. Это справедливо не для всех устройств, поэтому на них функция возвращает неверные значения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Двойное слово, в котором младшее слово содержит значение ширины строки текста (в логических единицах), а старшее слово - высоту строки в логических единицах. В случае неудачи или ошибки функция возвращает нулевое значение;
ПЕРЕНОСИМОСТЬ: Только WinApi;
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Олег Корсак
Олег Корсак
Латвия, Рига