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