Печать и вывод текста, страница 15

GetTextExtentExPoint                   * Windows 98   + Windows 2000

Описание

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

Синтаксис

BOOL GetTextExtentExPoint( HDC hDC, LPCTSTR IpszStr, int cchStrin, int nMaxExtent, LPINT IpnFit, LPINT alpDx, LPSIZE IpSize )

Параметры hDC

HDC. Контекст устройства.

IpszStr

LPCTSTR. Указатель на строку с нулевым символом в конце, для KO1J рой должны быть определены экстенты.

cchString

int. Число байтов в строке, указанной параметром IpszStr.

nMaxExtent

int. Максимальная допустимая ширина отформатированной строки (в логических единицах длины).

Ipnfit

LPINT. Указатель на целое число, принимающее значение максимального количества символов, которые могут поместиться в экстенте, указанном параметром nMaxExtent. Если значение этого параметра установлено равным NULL, параметр nMaxExtent игнорируется.

alpDx

LPINT. Указатель на массив целых чисел, который принимает частичные экстенты строкового текста. Каждый элемент массива содержит расстояние в логических единицах длины между началом строки и соответствующим символом в строке, который помещается в указанном месте. Число элементов этого массива должно быть не меньше числа символов, указанных параметром cchString; однако, функция заполняет массив зна чениями экстентов только для тех символов, которые помещаются в этот пространстве. Если значение этого параметра установлено равным NULL функция не вычисляет частичные экстенты строкового текста.

IpSize

LPSIZE. Указатель на структуру SIZE, которая принимает значения размеров строки (в логических единицах длины). Это значение не может быть равно NULL.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

GetTextExtentPoint32

Пример

В следующем примере показано, как с помощью функции GetTextExtentExPoint определить, сколько символов можно поместить в прямоугольник. Когда пользователь выбирает пункт меню Test!, на экране появляется прямоугольник, и в нем отображается строка "This is a long string". Прямоугольник отсекает все символы, которые в нем не помещаются.

См.    \local-sources\chapl4\14-17. txt

GetTextExtentPoint32                    Windows 98   * Windows 2000

Описание

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

Синтаксис

BOOL GetTextExtentPoint32( HOC HOC, LPCTSTR Ipsz, int cbString, LPSIZE IpSize )

Параметры

hDC

HDC. Контекст устройства.

Ipsz

LPCTSTR Указатель на символьную строку. В конце этой строки может не находиться нулевой символ, поскольку длину строки определяет параметр cbString.

cbString

int. Число символов в строке.

IpSize

LPSIZE. Указатель на структуру SIZE, которая принимает размеры строки.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

GetTextExtentExPoint

Пример

См. пример для функции SetText Justification.

GetTextFace                              Windows 98   • Windows 2000

Описание

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

Синтаксис

int GetTextFace( HDC hDC, bit nCount, LPTSTR IpFaceName )

Параметры

hDC

HDC. Контекст устройства.

тCount

int. Максимальное число символов, которые должны быть скопированы в буфер, указанный параметром IpFaceName.

IpFaceName

LPTSTR. Указатель на буфер, который должен принять имя гарнитуры. Если значение этого параметра установлено равным NULL, функция возвращает число символов в имени, включая нулевой признак конца.

Возвращаемое значение

int. В случае успешного выполнения — число символов, скопированных в буфер; в ином случае возвращаемое значение — 0.

Включаемый файл

wingdi.h

См. также

EnumFontFamilies, CreateFont, CreateFontlndirect, GetTextAlign

Пример

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

См.    \iocai-soi

irces\chap!4\14-18. txt

GetTextMetrics                          Windows 98   • Windows 2000

Описание

Функция GetTextMetrics возвращает данные о выбранном шрифте, заполняя структуру данных TEXTMETRIC.

Синтаксис

BOOL GetTextMetrics( HDC hDC, LPTEXTMETRIC Iptm )

Параметры

hDC

HDC. Контекст устройства.

Iptn

LPTEXTMETRIC. Указатель на структуру TEXTMETRIC, которая принимает метрику текста. Определение структуры TEXTMETRIC приведено ниже. Система мер, используемых при описании текста, проиллюстрирована на рис. 14.1.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

GetTextAlign, GetTextExtentPoint32

Определение TEXTMETRIC typedef

struct tag TEXTMETRIC {

LONG tmHeight;

LONG tmAscent;

LONG tmDescent ;

LONG tmlnternalLeading;

LONG tmExternalLeading;

LONG tmAveCharWidth;

LONG tmMaxCharWidth;

LONG tmWeight;

LONG tmOverhang;

LONG tmDigitizedAspectX;

LONG tmDigitizedAspectY;

TCHAR tmFirstChar;

TCHAR tmLastChar;

TCHAR tmDefaultChar;

TCHAR tmBreakChar;

BYTE tmltalic;

BYTE tmUnderlined;

BYTE tmStruckOut;

BYTE tmPitchAndFamily;

BYTE tmCharSet; }   TEXTMETRIC;

Члены

tmHeight

LONG. Высота символов (подъем + спуск).

tmAscent

LONG. Высота верхних выносных элементов символов подъем (в единицах длины).

tmDescent

LONG. Высота нижних выносных элементов символов спуск (в единицах длины).

tmlnternalLeading

LONG. Величина внутреннего интерлиньяжа, находящегося в пределах, установленных членом tmHeight. Проектировщик шрифтов может установить значение этого члена равным 0.

tmExternalLeading

LONG. Величина внешнего интерлиньяжа, который может быть введен в приложении между строками. Проектировщик шрифтов может установить значение этого члена равным 0.

tmAveCharWidth

LONG. Средняя ширина символов в шрифте. Это значение не включает выступ (литеры за границу очка), требуемый для полужирных или курсивных символов.

tmMaxCharWidth

LONG. Ширина самого широкого символа в шрифте.

tmWeight

LONG. Вес шрифта.

tmOverhang

LONG. Дополнительная ширина в расчете на строку, которая может быть добавлена для некоторых синтезируемых шрифтов. При синтезировании функциями GDI (Graphics Device Interface — Интерфейс графических устройств) или самим устройством вывода некоторых атрибутов, например полужирного или курсивного, иногда приходится увеличивать ширину строки с учетом отдельных символов и всей строки. Этот член позволяет определить в приложении, какая часть ширины символа, возвращенной функцией GetTextExtentPoint32 в результате ее вызова для отдельного символа, является фактической шириной символа, а какая — дополнительной шириной, в расчете на строку. Фактическая ширина равна разнице между экстентом и выступом (литеры за границу очка).

tmDigitizedAspectX

LONG. Коэффициент сжатия по горизонтали в устройстве, для которого был разработан шрифт.

tmDigitizedAspect Y

LONG. Коэффициент сжатия по вертикали в устройстве, для которого был разработан шрифт.

tmFirstChar

TCHAR. Значение первого символа, определенного в шрифте.

tmLastChar

TCHAR. Значение последнего символа, определенного в шрифте.

tmDefaultChar

TCHAR. Значение символа, которым должны быть заменены символы, не принадлежащие к шрифту.

tmBreakChar

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

tmltalic

BYTE. Для курсивного шрифта устанавливается в значение, отличное от нуля.

tm Underlined

BYTE. Для подчеркнутого шрифта устанавливается в значение, отличное от нуля.

tmStruckOut

BYTE. Для зачеркнутого шрифта устанавливается в значение, отличное от нуля.

tmPitchAndFamily

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

Таблица 14.36. Шаг и технология шрифта

Константа

Описание

TMPF_DEVICE

Если этот бит установлен, используется шрифт устройства.

TMPF_FIXED_PITCH

Если этот бит установлен, шрифт является разноширинным. Если этот бит очищен, шрифт — одноширинный. Обратите особое внимание на то, что смысл этих битов противоположен значению, подразумеваемому именем этой константы.

TMPF_TRUETYPE

Если этот бит установлен, используется шрифт TrueType.

TMPF_VECTOR

Если этот бит установлен, шрифт — векторный.

Четыре старших бита обозначают семейство шрифта. Для маскировки четырех младших битов параметра tmPitchAndFamily и получения значения, которое может непосредственно использоваться для сравнения с именами семейств шрифтов и определения соответствующего имени применяете" значение OxFO и поразрядный оператор AND (&). Семейства шрифтов которые определены в системе, перечислены в табл. 14.37.

Таблица 14.37. Семейства шрифтов

Значение

Описание

FF_DECORATIVE

Узорчатые шрифты, например, Old English.

FF_DONTCARE

He имеет значения или неизвестно.

FF_MODERN

Шрифты с постоянной шириной штриха, с засечками или без засечек, например, Pica, Elite и Courier New.

FF_ROMAN

Шрифты с переменной шириной штриха и с засечками, например, MS Serif.

FF_SCRIPT

Шрифты, имитирующие рукописный текст, например Script и Cursive.

FF_SWISS

Шрифты с переменной шириной штриха и без засечек, например, MS Sans Serif.

tmCharSet        BYTE. Набор символов шрифта.

ANSI_CHARSET

TURKISH_CHARSET

DEFAULT_CHARSET

HEBREW  CHARSET

SYMBOL  CHARSET

ARABIC  CHARSET

SHIFTJIS  CHARSET

BALTIC_CHARSET

HANGEOL_CHARSET

RUSSIAN_CHARSET

GB2312_CHARSET

THAI_CHARSET

CHINESEBIG5_CHARSET

EASTEOROPE_CHARSET

JOHAB_CHARSET

OEM CHARSET

GREEK_CHARSET

MAC  CHARSET

Пример

В следующем примере показано, как чаще всего применяется функция GetTextMetrics. Сумма значений tmHeight и tmExternalLeading равна высоте шрифта. Высота шрифта используется для установки интерлиньяжа (интервала между строками).

См.    \local-sources\cbapl4\14-19. txt

ResetDC                                   Windows 98   • Windows 2000

Описание

Функция ResetDC обновляет заданный контекст устройства (DC) принтера или графопостроителя на основе информации, содержащейся в структуре DEVMODE. В приложении эта функция обычно используется при получении сообщения   WM_DEVMODECHANGE. Функцию   ResetDC можно также использовать для смены ориентации бумаги или магазина бумагоподающего устройства во время печати документа. Эту функцию нельзя использовать для изменения имени драйвера, имени устройства или порта вывода. Если функции ResetDC передается информационный контекст устройства, она всегда возвращает DC принтера.

Синтаксис

HDC ResetDC( HDC hDC, CONST DEVMODE* IpInitData )

Параметры

hDC

HDC. Контекст устройства, который должен быть обновлен.

Ip f nit Data

CONST DEVMODE*. Указатель на структуру DEVMODE, содержащую новую информацию контекста устройства.

Возвращаемое значение

HDC. В случае успешного выполнения — дескриптор первоначального контекста устройства; в ином случае возвращаемое значение — NULL.

Включаемый файл

wingdi.h

См. также

DeviceCapabilities

Пример

В следующем примере показано, как с помощью функции ResetDC изменить во время печати ориентацию бумаги с книжной на альбомную. Когда пользователь выбирает пункт меню Test!, первая страница печатается в книжном формате, а вторая — в альбомном. Обратите внимание, что вызов функции ResetDC перед печатью страницы обеспечивает печать в книжном формате, если принтер настроен на печать в альбомном формате по умолчанию.

См.    \local-sources\chapl4\14-20.txt

SetAbortProc                             Windows 98   • Windows 2000

Описание

Функция SetAbortProc устанавливает функцию AbortProc, которая позволяет отменить задание на печать во время буферизации.

Синтаксис

rat SetAbortProc( HDC hDC, ABORTPROC IpAbortProc )

Параметры

hDC

HDC. Контекст устройства для задания на печать.

IpAbortProc

ABORTPROC. Указатель на определяемую приложением функцию аварийного прекращения работы. Дополнительная информация о функции обратного вызова приведена ниже, в описании функции AbortProc.

Возвращаемое значение

int. В случае успешного выполнения возвращаемое значение — больше нуля; в ином случае возвращаемое значение — SP_ERROR.

Включаемыйфайл

wingdi.h

См. также

AbortDoc

Синтаксис обратного вызова BOOL CALLBACK AbortProc( HDC hDC, int nError)

Параметры обратного вызова

hDC

HDC. Контекст устройства для задания на печать.

nError

int. Если не возникло никаких ошибок, этот параметр равен 0; в ином случае он принимает одно из значений ошибки, перечисленных в табл. 14.38

Таблица 14.38. Коды ошибок AbortProc

Значение

Описание

SP_ERROR

Общая ошибка.

SP_OUTOFDISK

В настоящее время нет достаточного объема дискового пространства дл буферизации и нельзя рассчитывать на появление дополнительного пространства.

SP OUTOFMEMORY

Нет достаточного объема памяти для буферизации.

SP_USERABORT

Пользователь завершил задание с помощью диспетчера печати Windows Print Manager.

Возвращаемое значение функции обратного вызова

BOOL. Функция обратного вызова должна возвратить TRUE, чтобы продолжить печатать, или FALSE, чтобы прервать задание на печать.

Пример

См. пример для функции AbortDoc.

SetTextAlignWindows 98   • Windows 2000

Описание

Функция SetTextAlign позволяет установить флажки выравнивания текста для контекста устройства. Функции TextOut и ExtTextOut указывают, где должен начаться вывод строки с учетом логических координат х,у. П" умолчанию в контексте устройства в качестве позиции х,у применяете левый верхний угол первого символа. Эта функция позволяет указать приложении вместо данной точки отсчета выравнивания другую точку о' счета, начиная с первого символа. Специальный флажок, обозначенный TA_UPDATECP, дает возможность следить за тем, где в контексте устройства оказался конец последней вьь веденной строки. Это позволяет выполнять последовательные вызовы функций вывода, размещая начало следующей строки в конце предыдущей

Синтаксис

UINT SetTextAlign( HDC hDC, UINT uMode )

Параметры hDC

HDC. Контекст устройства.

uMode

UINT. Выравнивание текста, которое должно быть установлено для контекста устройства. Значение этого параметра создается с использованием в качестве маски значений, перечисленных в табл. 14.39. Можно выбирать только по одному флажку из тех, что влияют на выравнивание по горизонтали и вертикали. Кроме того, может быть разрешен одновременно только один из двух флажков, которые влияют на текущую позицию.

Таблица 14.39. Значения параметра uMode функции SetTextAlign

Значение

Описание

TA_BASELINE

Точка отсчета находится на опорной линии текста. Для шрифтов с применяемой по умолчанию вертикальной опорной линией, типа японских иероглифов кандзи, используется значение VTA_BASELINE.

ТА_ВОТТОМ

Точка отсчета находится на нижнем краю ограничительного прямоугольника.

TA_CENTER

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

TAJ.EFT

Точка отсчета находится на левом краю ограничительного прямоугольника.

TA_NOUPDATECP

Текущая позиция не обновляется после каждого вызова функции вывода текста.

TA_RIGHT

Точка отсчета находится на правом краю ограничительного прямоугольника.

TAJtTLREADING

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

TA_TOP

Точка отсчета находится на верхнем краю ограничительного прямоугольника.

TA_UPDATECP

Текущая позиция обновляется после каждого вызова функции вывода текста.

Возвращаемое значение

UINT. В случае успешного выполнения — предыдущая настройка выравнивания текста; в ином случае возвращаемое значение — GDI_ERROR

Включаемый файл

wingdi.h

См. также

GetTextAlign, ExtTextOut

Пример

См. пример для функции GetTextAlign.

SetTextCharacterExtra                   Windows 98   • Windows 2000

Описание

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

Синтаксис

int SetTextCharacterExtra( HDC hDC, int nCharExtra )

Параметры

hDC

HDC. Контекст устройства.

nChar Extra

int. Ширина дополнительного промежутка (в логических единицах длины), который должен быть добавлен к каждому символу. Если текущий режим отображения отличен от ММ_ТЕХТ, параметр nCharExtra преобразуется и округляется до ближайшего целого числа единиц длины устройства.

Возвращаемое значение

int. В случае успешного выполнения — предыдущий межсимвольный интервал; в ином случае функция возвращает значение 0x80000000.

Включаемый файл

wingdi.h

См. также

GetTextCharacterExtra, ExtTextOut, TextOut, DrawText

Пример

См. пример для функции GetTextCharacterExtra.

SetTextColor                              Windows 98   • Windows 2000

Описание

Функция SetTextColor устанавливает цвет текста для контекста устройства. По умолчанию для текста DC применяется черный цвет. Эта функция позволяет установить для вывода текста любой цвет RGB. Установленный цвет остается в силе до тех пор, пока не будет освобожден контекст устройства или не будет установлен другой цвет текста.

Синтаксис

COLORREF SetTextColor( HDC hDC, COLORREF crColor)

Параметры

hDC

HDC. Контекст устройства.

crColor

COLORREF. Цвет текста. Макрокоманда RGB возвращает значение COLORREF.

Возвращаемое значение

COLORREF. В случае успешного выполнения — ссылка на предыдущий цвет текста; в ином случае возвращаемое значение — CLR_INVALID.

Включаемый файл

wingdi.h

См. также

GetTextColor, ExtTextOut, TextOut, SetBkColor

Пример

См. пример для функции GetTextColor.

SetTextJustification                      Windows 98   • Windows 2000

Описание

Функция SetTextJustification позволяет определить величину промежутка, которую система Windows должна добавить к символам, определяющим границу между словами в строке текста. Промежуток для размещения строки в конкретном пространстве добавляется, когда в приложении вызывается функция TextOut или ExtTextOut.                                            "' В приложении необходимо определить экстент символьной строки, вызвав функцию GetTextExtentPoint32, а затем рассчитать величину промежутка выравнивания, необходимого для размещения строки в заданном пространстве. Промежуток выравнивания устанавливается с помощью функции SetTextJustification до вызова функции TextOut или ExtTextOut. Для строк с несколькими шрифтами необходимо выравнивать и выводить каждую группу символов с шрифтом одного типа. Функция SetTextJustification накапливает ошибки округления, возникающие после каждого вызова, для усреднения этих ошибок по длине строки. В начале каждой новой строки функция SetTextJustification должна вызываться с параметром nBreakExtra, равным 0, для очистки ошибки округления.

Синтаксис

BOOL SetTextJustification( HDC hDC, int nBreakExtra, int nBreakCount )

Параметры

hDC

HDC. Контекст устройства.

nBreakExtra

int. Общее дополнительное пространство (в логических единицах длину) которое должно быть введено в строку текста. Если текущий режим ото* брожения отличен от ММ_ТЕХТ, значение этого параметра преобразуется и округляется до ближайшего целого числа единиц длины устройства.

nBreakCount

int. Число символов в строке, определяющих границу между словами.