次の方法で共有


IOleInPlaceSiteWindowless::GetDC メソッド (ocidl.h)

コンテナーから画面または互換性のあるデバイスのデバイス コンテキストへのハンドルを持つオブジェクトを提供します。

構文

HRESULT GetDC(
  [in]  LPCRECT pRect,
  [in]  DWORD   grfFlags,
  [out] HDC     *phDC
);

パラメーター

[in] pRect

オブジェクトが再描画する四角形へのポインター (含まれているウィンドウのクライアント座標)。 このパラメーターが NULL の場合、オブジェクトの完全なエクステントが再描画されます。

[in] grfFlags

OLEDCFLAGS 列挙からの値の組み合わせ。

[out] phDC

返されるデバイス コンテキストへのポインター。

戻り値

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

リターン コード 説明
OLE_E_NESTEDPAINT
コンテナーは既にペイント セッションの途中にあります。 つまり、このメソッドは既に呼び出されており、 IOleInPlaceSiteWindowless::ReleaseDC メソッドはまだ呼び出されていません。

注釈

このメソッドによって取得されたデバイス コンテキストは、 IOleInPlaceSiteWindowless::ReleaseDC を呼び出して解放する必要があります。

このインターフェイスの他のメソッドと同様に、四角形は、含まれているウィンドウのクライアント座標で指定されます。 コンテナーは、この四角形とオブジェクトのサイトの四角形と交差し、結果として得られる四角形の外側のすべてをクリップする必要があります。 これにより、オブジェクトが意図しない場所に誤って描画されるのを防ぐことができます。

コンテナーは、デバイス コンテキストの原点をマップすることも想定されているため、オブジェクトは、格納しているウィンドウ (通常はコンテナーのウィンドウ) のクライアント座標で描画できます。 コンテナーがそのウィンドウ デバイス コンテキストを単に渡しているだけの場合、これは自動的に発生します。 別のデバイス コンテキスト (たとえば、オフスクリーン メモリ デバイス コンテキスト) を返す場合は、ビューポートの原点を適切に設定する必要があります。

実装者へのメモ

画面上のデバイス コンテキストと画面外のデバイス コンテキストのどちらを返しているかに応じて、コンテナーでは次のいずれかのアルゴリズムを使用できます。
  1. 画面上のワンパス描画
    1. IOleInPlaceSiteWindowless::GetDC メソッドでは、コンテナーは次のことを行う必要があります。
      • ウィンドウ デバイス コンテキストを取得します。
      • OLEDC_PAINTBKGND が設定されている場合は、デバイス コンテキストを要求するオブジェクトの背後にあるすべてのオブジェクトの DVASPECT_CONTENT 側面を描画します。
      • デバイス コンテキストを返します。
    2. ReleaseDC メソッドでは、コンテナーは次の手順を実行する必要があります。
      • 重なっているすべてのオブジェクトのDVASPECT_CONTENTを描画します。
      • デバイス コンテキストを解放します。
  2. 画面上の 2 パス描画
    1. IOleInPlaceSiteWindowless::GetDC メソッドでは、コンテナーは次のことを行う必要があります。
      • ウィンドウ デバイス コンテキストを取得します。
      • 重なり合うオブジェクトの不透明な領域をクリップアウトします。 これらの領域は画面上で既に正しいので、再描画する必要はありません。
      • OLEDC_PAINTBKGNDが設定されていない場合は、デバイス コンテキストを返します。
      • それ以外の場合は、デバイス コンテキストを要求するオブジェクトの不透明な部分をクリップし、その背後にあるすべてのオブジェクトの不透明な部分を前方に描画します。
      • 前方に戻る後ろのすべてのオブジェクトの透明な側面を描画し、毎回適切にクリッピング領域を設定します。
      • 最後に、デバイス コンテキストを返します。
    2. IOleInPlaceSiteWindowless::ReleaseDC メソッドでは、コンテナーは次のことを行う必要があります。
      • 重なり合うオブジェクトの透明部分を描画します。
      • デバイス コンテキストを解放します。
  3. 画面外描画
    1. IOleInPlaceSiteWindowless::GetDC メソッドでは、コンテナーは次のことを行う必要があります。
      • 適切なサイズの互換性のあるビットマップを含む、画面互換のメモリ デバイス コンテキストを作成します。
      • デバイス コンテキストのビューポートの原点をマップして、呼び出し元のオブジェクトが、含まれているウィンドウのクライアント領域座標を使用して描画できることを確認します。
      • OLEDC_PAINTBKGNDが設定されている場合は、呼び出し元のオブジェクトの背後にあるすべてのオブジェクトのDVASPECT_CONTENTを描画します。
      • デバイス コンテキストを返します。
    2. IOleInPlaceSiteWindowless::ReleaseDC メソッドでは、コンテナーは次のことを行う必要があります。
      • 重なり合うすべてのオブジェクトのDVASPECT_CONTENTの側面を描画します。
      • 画面外のビットマップを、 IOleInPlaceSiteWindowless::GetDC で最初に要求された呼び出し元のオブジェクトの位置に画面にコピーします。
      • メモリ デバイス コンテキストを削除して解放します。
このメソッドが戻るとき、デバイス コンテキストのクリッピング領域を設定して、オブジェクトが想定されていない領域で描画できないようにする必要があります。 オブジェクトが不透明でない場合は、背景を塗りつぶす必要があります。 デバイス コンテキストが画面の場合は、重なり合う不透明な領域をクリップアウトする必要があります。

要件

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

こちらもご覧ください

IOleInPlaceSiteWindowless

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS