次の方法で共有


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

オブジェクトが画面上のインプレース アクティブイメージ内の領域をスクロールできるようにします。

構文

HRESULT ScrollRect(
  [in] INT     dx,
  [in] INT     dy,
  [in] LPCRECT pRectScroll,
  [in] LPCRECT pRectClip
);

パラメーター

[in] dx

x 軸をスクロールする量。

[in] dy

y 軸をスクロールする量。

[in] pRectScroll

スクロールする四角形 (含まれているウィンドウのクライアント座標)。 NULL の値は、完全なオブジェクトを示します。

[in] pRectClip

クリップする四角形。 この四角形にスクロールするピクセルのみが描画されます。 外にスクロールするピクセルは表示されません。 このパラメーターが NULL の場合、四角形はクリップされません。

戻り値

このメソッドは、成功したS_OKを返します。

注釈

このメソッドは、呼び出し元が透明であり、不透明または透明の重複するオブジェクトがある可能性があるという事実を考慮する必要があります。 このメソッドで使用できるアルゴリズムの提案については、以下の「実装者へのメモ」を参照してください。

実装者へのメモ

コンテナーは、さまざまな方法でこのメソッドを実装できます。 ただし、スクロールを要求するオブジェクトが透明であるか、背景がソリッドでない可能性を考慮する必要があります。 コンテナーでは、オブジェクトが重複している可能性も考慮する必要があります。

このメソッドを実装する最も簡単な方法は、単に四角形を再描画してスクロールすることです。

この単純な実装に対する追加の絞り込みは、スクロールを要求するオブジェクトが不透明で、オブジェクトの背景が固体で、重複するオブジェクトがない場合に ScrollDC 関数を使用することです。

より高度な実装では、次の手順を使用できます。

  • IViewObjectEx::GetViewStatus を使用して、オブジェクトが不透明で背景が純色であるかどうかを確認します。 そうでない場合は、スクロールする四角形を無効にします。 追加の絞り込みは、スクロールする四角形が部分的に透明なオブジェクトの不透明な領域に完全に含まれるかどうかをチェックすることです。
  • ウィンドウ デバイス コンテキストを取得します。
  • IViewObjectEx::GetRect によって返された重なり合うオブジェクトの不透明な部分をクリップアウトします。
  • 最後に、 ScrollDC 関数を呼び出します。
  • 重複するオブジェクトの、以前に無効にした透明部分を再描画します。
スクロール四角形とクリッピング四角形に関係なく、オブジェクトのサイト四角形に含まれるピクセルのみが描画されます。 スクロール操作によって明らかにされた領域は無効になり、このメソッドが返される直前に再描画されます。

このメソッドによって生成されたすべての再描画は、このメソッドが返される前に同期的に行われる必要があります。

このメソッドは、スクロール操作中にキャレットを自動的に非表示にし、キャレットがクリップ四角形内にある場合はスクロール量だけ移動する必要があります。

要件

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

こちらもご覧ください

IOleInPlaceSiteWindowless

IViewObjectEx::GetRect

IViewObjectEx::GetViewStatus