Compartir a través de


Método IDirectDrawSurface7::Lock (ddraw.h)

Obtiene un puntero a la memoria expuesta.

Sintaxis

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

Parámetros

[in] unnamedParam1

Puntero a una estructura RECT que identifica la región de la superficie que se está bloqueando. Si este parámetro es NULL, toda la superficie está bloqueada.

[in, out] unnamedParam2

Puntero a una estructura DDSURFACEDESC2 que describe los detalles pertinentes sobre la superficie y que recibe información sobre la superficie.

[in] unnamedParam3

Combinación de marcas que determinan cómo bloquear la superficie. Se definen las marcas siguientes:

DDLOCK_DONOTWAIT

En las interfaces IDirectDrawSurface7 , el valor predeterminado es DDLOCK_WAIT. Si desea invalidar el valor predeterminado y usar el tiempo cuando el acelerador esté ocupado (como se indica en el DDERR_WASSTILLDRAWING valor devuelto), use DDLOCK_DONOTWAIT.

DDLOCK_EVENT

No implementado actualmente.

DDLOCK_NOOVERWRITE

Novedades de DirectX 7.0. Solo se usa con bloqueos de búfer de vértices de Direct3D. Indica que no se modifica ningún vértice al que se hace referencia en una operación de dibujo desde el inicio del marco (o el último bloqueo sin esta marca) durante el bloqueo. Esto puede ser útil cuando solo desea anexar datos al búfer de vértices.

DDLOCK_NOSYSLOCK

No tome Win16Mutex (también conocido como Win16Lock). Esta marca se omite al bloquear la superficie principal.

DDLOCK_DISCARDCONTENTS

Novedades de DirectX 7.0. Solo se usa con bloqueos de búfer de vértices de Direct3D. Indica que no se realiza ninguna suposición sobre el contenido del búfer de vértices durante este bloqueo. Esto permite que Direct3D o el controlador proporcionen un área de memoria alternativa como el búfer de vértices. Esto resulta útil cuando planea borrar el contenido del búfer de vértices y rellenar nuevos datos.

DDLOCK_OKTOSWAP

Esta marca está obsoleta y se ha reemplazado por la marca DDLOCK_DISCARDCONTENTS.

DDLOCK_READONLY

Indica que la superficie que se está bloqueando solo se puede leer.

DDLOCK_SURFACEMEMORYPTR

Indica que se debe devolver un puntero de memoria válido a la parte superior del rectángulo especificado. Si no se especifica ningún rectángulo, se devuelve un puntero a la parte superior de la superficie. Este es el valor predeterminado.

DDLOCK_WAIT

Si no se puede obtener un bloqueo porque hay una operación de transferencia de bloques de bits (bitblt) en curso, bloquear los reintentos hasta que se obtiene un bloqueo u otro error, como DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Indica que la superficie bloqueada está habilitada para escritura.

[in] unnamedParam4

Identificador del evento. Este parámetro no se usa actualmente y debe establecerse en NULL.

Valor devuelto

Si el método se realiza correctamente, el valor devuelto es DD_OK.

Si se produce un error, el método puede devolver uno de los siguientes valores de error:

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

Comentarios

En IDirectDrawSurface7, el comportamiento predeterminado de Lock es esperar a que finalice el acelerador. Por lo tanto, en condiciones predeterminadas, Lock nunca devuelve DDERR_WASSTILLDRAWING. Si desea ver los códigos de error y no esperar hasta que la operación bitblt se realice correctamente, use la marca DDLOCK_DONOTWAIT.

Después de recuperar un puntero de memoria de superficie, puede acceder a la memoria de superficie hasta que se llame a un método IDirectDrawSurface7::Unlock correspondiente. Cuando se desbloquea la superficie, el puntero a la memoria de la superficie no es válido.

No llame a las funciones bitblt de DirectDraw para bitblt desde una región bloqueada de una superficie. Si lo hace, el bitblt devuelve DDERR_SURFACEBUSY o DDERR_LOCKEDSURFACES. Las funciones de inserción de GDI también producen un error silencioso cuando se usan en una superficie de memoria de vídeo bloqueada.

A menos que incluyas la marca DDLOCK_NOSYSLOCK, Lock hace que DirectDraw contenga Win16Mutex (también conocido como Win16Lock) hasta que llames al método IDirectDrawSurface7::Unlock . Los depuradores de GUI no pueden funcionar mientras se mantiene Win16Mutex.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado ddraw.h
Library Ddraw.lib
Archivo DLL Ddraw.dll

Consulte también

IDirectDrawSurface7