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 コールバック*

サポートされていません。

dwContinue

型: DWORD

continue 関数に渡すパラメーター。

lViewId

型: LONG

描画するビューを指定します。

値 説明
TXTVIEW_ACTIVE
インプレース アクティブ ビューを描画します。
TXTVIEW_INACTIVE
インプレース アクティブ ビュー以外のビューを描画します。たとえば、印刷プレビューなどです。

戻り値

型: HRESULT

通常、戻り値は S_OK。

解説

このメソッドは、テキスト サービス オブジェクトをレンダリングします。 OLE の対応する IViewObject::D raw メソッドと同じパラメーターを受け取り、追加の 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
ヘッダー textserv.h
[DLL] Msftedit.dll

関連項目

概念

DVTARGETDEVICE

ITextServices

IViewObject::Draw

OnTxInPlaceActivate

その他のリソース

Rect

RECTL

リファレンス

TxGetClientRect

TxGetExtent

ウィンドウレスリッチエディットコントロール