IDirectDrawSurface7::Lock 方法 (ddraw.h)

获取指向表面内存的指针。

语法

HRESULT Lock(
  [in]      LPRECT           unnamedParam1,
  [in, out] LPDDSURFACEDESC2 unnamedParam2,
  [in]      DWORD            unnamedParam3,
  [in]      HANDLE           unnamedParam4
);

参数

[in] unnamedParam1

指向 RECT 结构的指针,该结构标识要锁定的图面的区域。 如果此参数为 NULL,则整个图面被锁定。

[in, out] unnamedParam2

指向 DDSURFACEDESC2 结构的指针,该结构描述有关图面的相关详细信息,并接收有关图面的信息。

[in] unnamedParam3

确定如何锁定表面的标志组合。 定义了以下标志:

DDLOCK_DONOTWAIT

IDirectDrawSurface7 接口上,默认值为 DDLOCK_WAIT。 如果要替代默认值并使用加速器正忙 (的时间(如DDERR_WASSTILLDRAWING返回值) 所示),请使用 DDLOCK_DONOTWAIT。

DDLOCK_EVENT

目前尚未实现。

DDLOCK_NOOVERWRITE

DirectX 7.0 的新增功能。 仅用于 Direct3D 顶点缓冲区锁。 指示在锁定期间,不会修改自帧开始 (或最后一个不带此标志) 锁以来在绘制操作中引用的顶点。 当只想将数据追加到顶点缓冲区时,这非常有用。

DDLOCK_NOSYSLOCK

请勿将 Win16Mutex (也称为 Win16Lock) 。 锁定主图面时会忽略此标志。

DDLOCK_DISCARDCONTENTS

DirectX 7.0 的新增功能。 仅用于 Direct3D 顶点缓冲区锁。 指示在此锁定期间未对顶点缓冲区的内容进行假设。 这使 Direct3D 或驱动程序能够提供替代的内存区域作为顶点缓冲区。 当您计划清除顶点缓冲区的内容并填充新数据时,这非常有用。

DDLOCK_OKTOSWAP

此标志已过时,已替换为DDLOCK_DISCARDCONTENTS标志。

DDLOCK_READONLY

指示要锁定的图面只能读取。

DDLOCK_SURFACEMEMORYPTR

指示应返回指向指定矩形顶部的有效内存指针。 如果未指定矩形,则返回指向图面顶部的指针。 这是默认值。

DDLOCK_WAIT

如果由于位块传输 (bitblt) 操作正在进行而无法获取锁,则 锁定 将重试,直到获得锁或发生其他错误(例如DDERR_SURFACEBUSY)。

DDLOCK_WRITEONLY

指示正在锁定的图面已启用写入。

[in] unnamedParam4

事件的句柄。 此参数当前未使用,必须设置为 NULL。

返回值

如果方法成功,则返回值DD_OK。

如果失败,方法可能会返回以下错误值之一:

  • DDERR_INVALIDOBJECT
  • DDERR_INVALIDPARAMS
  • DDERR_OUTOFMEMORY
  • DDERR_SURFACEBUSY
  • DDERR_SURFACELOST
  • DDERR_WASSTILLDRAWING

注解

IDirectDrawSurface7 中, Lock 的默认行为是等待加速器完成。 因此,在默认条件下, Lock 永远不会返回DDERR_WASSTILLDRAWING。 如果想要查看错误代码,而不是等到 bitblt 操作成功,请使用 DDLOCK_DONOTWAIT 标志。

检索 Surface 内存指针后,可以访问 Surface 内存,直到调用相应的 IDirectDrawSurface7::Unlock 方法。 当图面解锁时,指向表面内存的指针无效。

不要从图面的锁定区域调用 DirectDraw bitblt 函数。 如果这样做,则 bitblt 返回DDERR_SURFACEBUSY或DDERR_LOCKEDSURFACES。 在锁定的视频内存图面上使用时,GDI blit 函数也会无提示失败。

除非包含 DDLOCK_NOSYSLOCK 标志, 否则 Lock 会导致 DirectDraw 保留 Win16Mutex (也称为 Win16Lock) ,直到调用 IDirectDrawSurface7::Unlock 方法。 保留 Win16Mutex 时,GUI 调试器无法运行。

要求

要求
目标平台 Windows
标头 ddraw.h
Library Ddraw.lib
DLL Ddraw.dll

另请参阅

IDirectDrawSurface7