次の方法で共有


IViewObject::D raw メソッド (oleidl.h)

指定したデバイス コンテキストにオブジェクトの表現を描画します。

構文

HRESULT Draw(
  [in] DWORD                          dwDrawAspect,
  [in] LONG                           lindex,
  [in] void                           *pvAspect,
  [in] DVTARGETDEVICE                 *ptd,
  [in] HDC                            hdcTargetDev,
  [in] HDC                            hdcDraw,
  [in] LPCRECTL                       lprcBounds,
  [in] LPCRECTL                       lprcWBounds,
  [in] BOOL(* )(ULONG_PTR dwContinue) pfnContinue,
  [in] ULONG_PTR                      dwContinue
);

パラメーター

[in] dwDrawAspect

描画するアスペクト、つまり、オブジェクトがどのように表示されるかを指定します。 表現には、コンテンツ、アイコン、サムネイル、または印刷されたドキュメントが含まれます。 有効な値は、 DVASPECT 列挙体と DVASPECT2から取得されます。 最適化された描画インターフェイスをサポートする新しいオブジェクトとコンテナーでは 、DVASPECT2 列挙値がサポートされることに注意してください。 最適化された描画インターフェイスをサポートしていない古いオブジェクトとコンテナーは 、DVASPECT2をサポートしていない可能性があります。 ウィンドウレス オブジェクトでは、 DVASPECT_CONTENT 、DVASPECT_OPAQUE、 DVASPECT_TRANSPARENT のみが許可されます。

[in] lindex

描画操作の対象となるオブジェクトの一部分。 その解釈は、dwAspect パラメーターの値によって異なります。 詳細については、 DVASPECT 列挙を参照してください。

[in] pvAspect

指定された側面に応じて描画の最適化を可能にする DVASPECTINFO 構造体内の追加情報へのポインター。 最適化された描画インターフェイスをサポートする新しいオブジェクトとコンテナーでも、このパラメーターがサポートされることに注意してください。 最適化された描画インターフェイスをサポートしていない古いオブジェクトとコンテナーでは、常にこのパラメーターに NULL が 指定されます。

[in] ptd

オブジェクトをレンダリングするデバイスを記述する DVTARGETDEVICE 構造体へのポインター。 NULL の場合は、既定のターゲット デバイス (通常は表示) に対してビューをレンダリングする必要があります。 NULL 以外の値は、hdcTargetDev および hdcDraw と組み合わせて解釈されます。 たとえば、 hdcDraw でプリンターがデバイス コンテキストとして指定されている場合、 ptd パラメーターはそのプリンター デバイスを記述する構造体を指します。 hdcTargetDev が有効な値である場合は、実際にデータが印刷される場合があります。また、hdcTargetDevNULL の場合は印刷プレビュー モードで表示される場合があります。

[in] hdcTargetDev

オブジェクトがデバイス メトリックを抽出し、デバイスの機能をテストできる ptd パラメーターによって示されるターゲット デバイスの情報コンテキスト。 ptdNULL の場合。オブジェクトは、hdcTargetDev パラメーターの値を無視する必要があります。

[in] hdcDraw

描画を行うデバイス コンテキスト。 ウィンドウレス オブジェクトの場合、 hdcDraw パラメーターは、含まれているウィンドウのクライアント座標と一致する論理座標を持つMM_TEXTマッピング モードである必要があります。 ウィンドウレス オブジェクトの場合、デバイス コンテキストは、通常、WM_PAINT メッセージによって渡される状態と同じ状態である必要があります。

[in] lprcBounds

hdcDraw の四角形を指定し、オブジェクトを描画する必要がある RECTL 構造体へのポインター。 このパラメーターは、オブジェクトの配置とストレッチを制御します。 ウィンドウなしのインプレース アクティブ オブジェクトを描画するには、このパラメーターを NULL にする 必要があります。 その他の状況では、 NULL は有効な値ではなく、E_INVALIDARGエラー コードになります。 コンテナーが NULL 以外の値をウィンドウレス オブジェクトに渡す場合、オブジェクトは要求された側面を指定されたデバイス コンテキストと四角形にレンダリングする必要があります。 コンテナーにより、ウィンドウレス オブジェクトからこれを要求することで、オブジェクトの 2 つ目の非アクティブなビューをレンダリングすることや、オブジェクトを出力することができます。

[in] lprcWBounds

hdcDraw がメタファイル デバイス コンテキストの場合は、基になるメタファイル内の外接する四角形を指定する RECTL 構造体へのポインター。 rectangle 構造体には、ウィンドウの範囲とウィンドウの原点が含まれています。 これらの値はメタファイルの描画に役立ちます。 lprcBounds で示される四角形は、この lprcWBounds 四角形内に入れ子になっています。これらは同じ座標空間にあります。

hdcDraw がメタファイル デバイス コンテキストでない場合。lprcWBoundsNULL になります

[in] pfnContinue

ビュー オブジェクトが、時間のかかる描画操作中、操作を続行するかキャンセルするかを判断するために定期的に呼び出すコールバック関数へのポインター。 この関数は TRUE 返して描画を続行します。 FALSE を返して図面を停止します。この場合、IViewObject::D raw はDRAW_E_ABORTを返します。

dwContinue

[in] dwContinue

pfnContinue パラメーターが指す関数にパラメーターとして渡す値。 通常、 dwContinue は、コールバック関数内で必要なアプリケーション定義構造体へのポインターです。

戻り値

このメソッドは、成功したS_OKを返します。 その他の可能な戻り値は次のとおりです。

リターン コード 説明
OLE_E_BLANK
描画元のデータがありません。
DRAW_E_ABORT
描画操作が中止されました。
VIEW_E_DRAW
描画中にエラーが発生しました。
DV_E_LINDEX
lindex の値が無効です。現在、-1 のみがサポートされています。
DV_E_DVASPECT
dwAspect の値が無効です。
OLE_E_INVALIDRECT
無効な四角形です。

注釈

コンテナー アプリケーションは 、IViewObject::D raw の呼び出しを発行して、包含オブジェクトの表現を作成します。 このメソッドは、指定したデバイス コンテキスト (hdcDraw) で、指定したビュー (dwAspect および pvAspect) の指定された部分 (lindex) を描画します。 書式設定、フォント、およびその他のレンダリングの決定は、ptd パラメーターで指定されたターゲット デバイスに基づいて行われます。

dwDrawAspect 値と lprcbounds 値の間には関係があります。 lprcbounds 値は、図面をマップする hdcDraw の四角形を指定します。 DVASPECT_THUMBNAIL、DVASPECT_ICON、DVASPECT_SMALLICON の場合、オブジェクトは描画したいものを描画し、最適な方法で指定された空間にマップします。 一部のオブジェクトは合わせてスケーリングされる場合がありますが、一部のオブジェクトは合わせてスケーリングされますが、縦横比は維持されます。 さらに、図面が全幅で表示されるように拡大/縮小する場合がありますが、下部はトリミングされます。 コンテナーは IOleObject::SetExtent を使用してサイズを提案できますが、レンダリング サイズを制御することはできません。 DVASPECT_CONTENT の場合、IViewObject::D raw 実装では、IOleObject::SetExtent によって指定されたエクステントを使用するか、lprcBounds パラメーターで指定された外接する四角形を使用する必要があります。

最適化された描画手法をサポートする新しいオブジェクトとウィンドウレス オブジェクトの場合は、次のようにこのメソッドを使用する必要があります。

  • 新しい描画の側面は、DVASPECT2で定義されている dwAspect でサポートされています。
  • pvAspect パラメーターを使用すると、 DVASPECTINFO 構造体を介して描画の最適化を可能にする追加情報を渡すことができます。
  • iViewObject::D raw メソッドを呼び出して、lrpcBounds パラメーターを NULL に設定することで、ウィンドウなしのインプレース アクティブ オブジェクトを再描画できます。 その他の状況では、 NULL は無効な値であり、E_INVALIDARGエラー コードが発生する必要があります。 ウィンドウレス オブジェクトは、このパラメーターを使用する代わりに、アクティブ化動詞によって渡される四角形を使用するか、 IOleInPlaceObject::SetObjectRects を呼び出します。 コンテナーが NULL 以外の値をウィンドウレス オブジェクトに渡す場合、オブジェクトは要求された側面を指定されたデバイス コンテキストと四角形にレンダリングする必要があります。 コンテナーにより、ウィンドウレス オブジェクトからこれを要求することで、オブジェクトの 2 つ目の非アクティブなビューをレンダリングすることや、オブジェクトを出力することができます。 ウィンドウレス オブジェクトの描画の詳細については、 IOleInPlaceSiteWindowless インターフェイスを参照してください。
  • ウィンドウレス オブジェクトの場合、 dwAspect パラメーターでは 、DVASPECT_CONTENT、 DVASPECT_OPAQUE、 DVASPECT_TRANSPARENT の各側面のみが許可されます。
  • ウィンドウレス オブジェクトの場合、hdcDraw パラメーターは、含まれているウィンドウのクライアント座標と一致する論理座標を持つMM_TEXTマッピング モードである必要があります。 ウィンドウレス オブジェクトの場合、デバイス コンテキストは、通常、WM_PAINT メッセージによって渡される状態と同じ状態である必要があります。
描画の最適化をサポートしていない古いオブジェクトやコンテナーとの互換性を維持するには、原点と四角形の範囲を維持するために、すべてのオブジェクト (四角形かどうか) が必要です。 これにより、コンテナーはすべての埋め込みオブジェクトを四角形として引き続き考慮し、 描画で適切なレンダリング四角形を渡すことができます。

オブジェクトの範囲は、描画の側面によって異なります。 四角形以外のオブジェクトの場合、エクステントは側面全体をカバーする四角形のサイズである必要があります。 慣例により、オブジェクトの原点は DVASPECT_CONTENT アスペクトの四角形の左上隅です。 つまり、原点は、四角形以外のオブジェクトの場合でも、オブジェクトのサイトによって維持される四角形の左上隅と常に一致します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー oleidl.h

こちらもご覧ください

DVASPECT

DVASPECT2

DVASPECTINFO

IOleInPlaceSiteWindowless

IViewObject

OleDraw