Метод ITextServices2::TxGetNaturalSize2 (textserv.h)
Изменяет размер элемента управления таким образом, чтобы он соответствовал его содержимому. Этот метод аналогичен TxGetNaturalSize, но также извлекает подъем верхней строки текста.
Синтаксис
HRESULT TxGetNaturalSize2(
DWORD dwAspect,
HDC hdcDraw,
HDC hicTargetDev,
DVTARGETDEVICE *ptd,
DWORD dwMode,
const SIZEL *psizelExtent,
LONG *pwidth,
LONG *pheight,
LONG *pascent
);
Параметры
dwAspect
Тип: DWORD
Аспект для рисунка. Это может быть любое из значений перечисления DVASPECT .
hdcDraw
Тип: HDC
Контекст устройства, в котором выполняется рисование.
hicTargetDev
Тип: HDC
Контекст устройства, для которого должен быть отформатирован текст (то есть для WYSIWYG).
ptd
Тип: DVTARGETDEVICE*
Дополнительные сведения о целевом устройстве.
dwMode
Тип: DWORD
Тип запрошенной установки. Это может быть один из следующих вариантов.
Значение | Значение |
---|---|
|
Используйте английские единицы метрик (EMU) вместо пикселей в качестве единиц измерения (в обоих случаях) для параметров этого метода. |
|
Измените размер элемента управления в соответствии со всем текстом, отформатируя текст в соответствии с передаваемой шириной. Объект text services возвращает высоту всего текста и ширину самой широкой строки.
Например, это следует делать, когда пользователь дважды щелкает один из дескрипторов элемента управления. |
|
Измените размер элемента управления так, чтобы он соответствовал содержимому с отступом. |
|
Измените размер элемента управления так, чтобы он соответствовал содержимому с отступом и пробелам в конце. |
|
Измените размер элемента управления таким образом, чтобы он соответствовал неотправленным содержимому и пробелам в конце. |
|
Для элемента управления в виде обычного текста включите высоту конечного возврата каретки при вычислении размера. |
|
Измените размер элемента управления, чтобы отобразить целое число строк (линия не обрезается). Отформатируйте достаточно текста, чтобы заполнить ширину и высоту, которые передаются, а затем вернуть высоту, округленную до ближайшей границы линии.
Примечание Переданная и возвращаемая ширина и высота соответствуют прямоугольнику представления. При необходимости узел должен вернуться к клиентскому прямоугольнику. Поскольку эти значения представляют экстент текстового объекта, они являются входными и выходными данными в координатах HIMETRIC (каждая единица HIMETRIC составляет 0,01 миллиметра), а измерение не включает коэффициент масштабирования. Описание коэффициента масштабирования см. в разделе TxGetExtent.
|
psizelExtent
Тип: const SIZEL*
Размеры экстентов (в единицах HIMETRIC), используемых для масштабирования.
pwidth
Тип: LONG*
Ширина установки, определяемая dwMode.
pheight
Тип: LONG*
Высота установки, определяемая dwMode.
pascent
Тип: LONG*
Для однострочных элементов управления получает восхождение (единицы выше базового плана) символов в верхней строке текста.
Возвращаемое значение
Тип: HRESULT
Если метод выполнен успешно, возвращаемое значение будет S_OK.
Если текстовым службам не удалось активировать объект, возвращаемым значением будет один из следующих кодов HRESULT . Дополнительные сведения о кодах ошибок COM см. в разделе Обработка ошибок в COM.
Код возврата | Описание |
---|---|
|
Не удается определить правильный размер. |
|
Один или несколько аргументов недопустимы. |
|
Недостаточно памяти. |
Комментарии
Первые четыре параметра похожи на эквивалентные параметры в ITextServices::TxDraw и предоставляют те же сведения. В случае, когда строки должны быть пересчитаны, TxGetNaturalSize2 использует эти значения так же, как в ITextServices::TxDraw.
Параметры pwidth и pheight являются параметрами in/out. Узел передает предварительную ширину и высоту естественного экстента текстового объекта. Объект текстовых служб сравнивает эти значения с текущим кэшированным состоянием и, если они отличаются, пересчитывает строки. Затем он вычисляет и возвращает естественный размер, как указано в dwMode.
Примеры
В следующем примере показано, как инициализировать параметр psizelExtent для с коэффициентом масштабирования 1:1. Многоточие указывает на код, который необходимо предоставить.
LONG dxpi = GetDeviceCaps(hdc, LOGPIXELSX);
LONG dypi = GetDeviceCaps(hdc, LOGPIXELSY);
LONG dyAscent = 0;
LONG dx = ... ; // Text image width, in pixels
LONG dy = ... ; // Text image height, in pixels
SIZEL sizel; // dx and dy, in HIMETRIC
ITextServices2 *pserv = ... ; // Interface for single-line control
sizel.cx = MulDiv(dx, HIMETRIC_PER_INCH, dxpi);
sizel.cy = MulDiv(dy, HIMETRIC_PER_INCH, dypi);
pserv->TxGetNaturalSize2(DVASPECT_DOCPRINT, hdc, hdcNil, pNil,
TXTNS_FITTOCONTENT, &sizel, &dx, &dy, &dyAscent)))
Требования
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | textserv.h |
DLL | Msftedit.dll |