Учебное пособие: Вывод текста

если оба они равны 0, то табулятор будет останавливаться через каждых 8 средних ширин символов.

если массив содержит только одно число N (и cTabStops равно 1), то табулятор будет останавливаться через каждые N единиц.

Параметр nTabOrigin указывает x–координату, начиная от которой отсчитываются положения табулятора. Функция возвращает размер выведенной строки.

С введением этой функции пришлось ввести еще одну функцию, которая определяет размеры строки, содержащей символы табуляции:

DWORD GetTabbedTextExtent( hDC, lpsString, wLength, cTabStops, lpnTabPositions );

Однако эта функция не имеет параметра nTabOrigin, поэтому ее результат может отличаться от результата функции TabbedTextOut(...).

Существует специальная функция, осуществляющая вывод строки текста и устанавливающая требуемые промежутки между отдельными символами строки:

BOOL ExtTextOut( hDC, nXStart, nYStart, fuOption, lpRect, lpsString, wLength, lpnDx );

Параметры hDC, nXStart, nYStart, lpsString и wLength используютсятакже, какивфункции TextOut(). Два дополнительных параметра fuOption и lpRect задают прямоугольник, в котором осуществляется вывод текста и метод использования этого прямоугольника.

Если fuOption равно ETO_OPAQUE, то указанный прямоугольник закрашивается текущим цветом фона; если fuOption равно ETO_CLIPPED, то прямоугольник ограничивает область вывода текста. Оба параметра fuOption и lpRect могут быть 0, тогда такой прямоугольник не используется.

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

Функция

int DrawText( hDC, lpszString, wLength, lpRect, fuFormat );

осуществляет вывод текста в указанный прямоугольник, осуществляя простейшие операции форматирования текста. Первые три параметра этой функции аналогичны таким–же параметрам функции TextOut(), за одним исключением: Вы можете указать длину строки равной -1, тогда Windows будет предполагать, что это asciiz строка (оканчивающаяся нулевым байтом) и сам вычислит ее длину.

Два последних параметра определяют прямоугольник, в который Вы хотите осуществить вывод, и правила размещения текста в этом прямоугольнике.

Параметр fuFormat может содержать следующие флаги:

DT_CENTER

DT_LEFT

DT_RIGHT

задают режим выравнивания текста по горизонтали.
DT_SINGLELINE указывает, что текст должен размещаться в одной строке

DT_VCENTER

DT_TOP

DT_BOTTOM

используются только с DT_SINGLELINE и указывают размещение строки текста по вертикали.
DT_WORDBREAK разрешает переносить (разбивать) слова.
DT_EXPANDTABS разрешает распознавать символы табуляции. По умолчанию используются табулятор на каждой 8 позиции.
DT_TABSTOP задает шаг табуляции. Старший байт содержит число символов в одном шаге табулятора.
Все описанные ниже флаги несовместимы с флагом DT_TABSTOP:
DT_EXTERNALLEADING включает в высоту строки пропуск между строк. По умолчанию этого не делается.
DT_NOCLIP выполняет вывод игнорируя указанный прямоугольник. Это иногда ускоряет процесс вывода.
DT_NOPREFIX исключает обработку префикса & как подчеркивание текущего символа. По умолчанию префикс & обозначает подчеркнутый символ, последовательность && - одиночный &.
DT_CALCRECT только вычисляет размер прямоугольника и не осуществляет вывода. Если используется DT_SINGLELINE, то определяется ширина прямоугольника, а если текст многострочный, то вычисляется высота, достаточная для размещения заданного текста при фиксированной ширине.

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

Так как Windows использует в качестве цвета текста только чистый цвет, то пришлось разработать специальную функцию, позволяющую осуществлять вывод смешанным цветом. Основная идея ее работы заключается в следующем:

BOOL GrayString( hDC, hBrush, lpfnDraw, lParam, cChars, nX, nY, nWidth, nHeight );

текст выводится черным цветом в промежуточный контекст устройства, ассоциированный с белым битмапом

выполняется операция OR между выведенным текстом и кистью, состоящей из черных и белых точек в шахматном порядке (Функция PatBlt(), ROP код равен 0xFA0089 (DPo))

полученный битмап переносится на контекст-приемник изображения с помощью операции BitBlt() с ROP–кодом 0xB8074A (PSDPxax), реализующей следующие действия:

( ( destination ^ pattern ) & source ) ^ pattern

К-во Просмотров: 412
Бесплатно скачать Учебное пособие: Вывод текста