Поделиться через


Метод ITextServices::TxDraw (textserv.h)

Рисует объект текстовых служб.

Синтаксис

HRESULT TxDraw(
  [in] DWORD           dwDrawAspect,
       LONG            lindex,
  [in] void            *pvAspect,
  [in] DVTARGETDEVICE  *ptd,
  [in] HDC             hdcDraw,
  [in] HDC             hicTargetDev,
  [in] LPCRECTL        lprcBounds,
  [in] LPCRECTL        lprcWBounds,
  [in] LPRECT          lprcUpdate,
       BOOL(* )(DWORD) pfnContinue,
       DWORD           dwContinue,
       LONG            lViewId
);

Параметры

[in] dwDrawAspect

Тип: DWORD

Указывает пропорции для рисования (то есть, как должен быть представлен объект). Аспект рисования может иметь одно из следующих значений.

Значение Значение
DVASPECT_CONTENT
Отображает изображение экрана с текстовым содержимым в контексте устройства hdcDraw .

Параметры hicTargetDev и ptd предоставляют сведения о контексте целевого устройства( обычно это принтер).

DVASPECT_DOCPRINT
Отрисовывает объект в контексте устройства hdcDraw , как если бы он был напечатан на принтере. Таким образом, объект текстовых служб может оптимизировать для принтера (например, не закраив цвет фона, если белый). Кроме того, некоторые элементы экрана (например, выбор) не должны отображаться.

ITextServices::TxDraw должен отрисовывать прямоугольник lprcBounds , начиная с текущей позиции прокрутки.

lindex

Тип: LONG

Не поддерживается.

[in] pvAspect

Тип: void*

Сведения об оптимизации рисования.

[in] ptd

Тип: DVTARGETDEVICE*

Целевое устройство.

[in] hdcDraw

Тип: HDC

Отрисовка контекста устройства.

[in] hicTargetDev

Тип: HDC

Контекст целевой информации.

[in] lprcBounds

Тип: LPCRECTL

Ограничивающий (клиентский) прямоугольник.

[in] lprcWBounds

Тип: LPCRECTL

Прямоугольник обрезки для метафайлов.

[in] lprcUpdate

Тип: LPRECT

Область обновления внутри lprcBounds.

pfnContinue

Тип: BOOL CALLBACK*

Не поддерживается.

dwContinue

Тип: DWORD

Параметр для передачи для продолжения функции.

lViewId

Тип: LONG

Указывает представление для рисования.

Значение Значение
TXTVIEW_ACTIVE
Нарисуйте активное представление inplace.
TXTVIEW_INACTIVE
Рисование представления, отличного от активного представления на месте; например, предварительный просмотр.

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

Тип: HRESULT

Возвращаемое значение обычно S_OK.

Комментарии

Этот метод отрисовывает объект текстовых служб. Он принимает те же параметры, что и соответствующий метод IViewObject::D raw в OLE, с дополнительными параметрами lprcUpdate и lViewId . Его можно использовать, когда узел активно или неактивен на месте.

Параметр lprcBounds предоставляет прямоугольник для отрисовки, также называемый клиентским прямоугольником. Этот прямоугольник представляет положение и экстент всего изображения отрисовываемого объекта текстовых служб. Это выражается в логической системе координат hdcDraw. Если lprcBounds имеет значение NULL , элемент управления должен быть активным. В этом случае объект текстовых служб должен отображать активное представление на месте (то есть клиентский прямоугольник, который можно получить, вызвав TxGetClientRect на узле).

Если параметр lprcUpdate не равен NULL, он предоставляет прямоугольник для обновления внутри этого клиентского прямоугольника в логической системе координат hdcDraw. Если lprcUpdate имеет значение NULL, следует закрасить весь клиентский прямоугольник.

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

Общие комментарии к узлам OLE и ITextServices::TxDraw (также для ITextServices::OnTxSetCursor и ITextServices::TxQueryHitPoint):

Узел OLE может в любое время вызывать метод ITextServices::TxDraw с любым контекстом устройства отрисовки или клиентским прямоугольником. Неактивный объект OLE сохраняет только экстент. Чтобы получить прямоугольник для отрисовки, узел вызывает метод IViewObject::D raw . Этот прямоугольник действителен только для область этого метода. Таким образом, один элемент управления может отображаться последовательно в разных прямоугольниках и разных контекстах устройства, например, так как он отображается одновременно в разных представлениях на экране.

Как правило, клиентский прямоугольник и контекст устройства, передаваемые в ITextServices::TxDraw , не должны кэшироваться, так как это приведет к тому, что объект текстовых служб будет пересчитывать линии для каждого отрисовки, что помешает производительности. Вместо этого объект текстовых служб может кэшировать сведения, вычисляемые для определенного клиентского прямоугольника и контекста устройства (например, разрывы строк). Однако при следующем вызове ITextServices::TxDraw необходимо проверить правильность кэшированных сведений перед их использованием и при необходимости повторно создать обновленные сведения.

Кроме того, следует проявлять большую осторожность, когда элемент управления активен на месте. Эта проблема еще более сложна, так как ITextServices::TxDraw по-прежнему можно вызывать для отрисовки других представлений, чем активное на месте. Другими словами, клиентский прямоугольник, передаваемый в ITextServices::TxDraw , может отличаться от активного (передается в ITextServices::OnTxInPlaceActivate и получается через TxGetClientRect на узле).

Требования

   
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header textserv.h
DLL Msftedit.dll

См. также раздел

Основные понятия

DVTARGETDEVICE

ITextServices

IViewObject::D raw

OnTxInPlaceActivate

Другие ресурсы

RECT

RECTL

Справочные материалы

TxGetClientRect

TxGetExtent

Элементы управления расширенным редактированием без окон