Freigeben über


IDirectDrawSurface7::Lock-Methode (ddraw.h)

Ruft einen Zeiger auf den Oberflächenspeicher ab.

Syntax

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

Parameter

[in] unnamedParam1

Ein Zeiger auf eine RECT-Struktur , die den Bereich der gesperrten Oberfläche identifiziert. Wenn dieser Parameter NULL ist, wird die gesamte Oberfläche gesperrt.

[in, out] unnamedParam2

Ein Zeiger auf eine DDSURFACEDESC2 Struktur, die relevante Details zur Oberfläche beschreibt und Informationen über die Oberfläche empfängt.

[in] unnamedParam3

Eine Kombination von Flags, die bestimmen, wie die Oberfläche gesperrt wird. Die folgenden Flags sind definiert:

DDLOCK_DONOTWAIT

Auf IDirectDrawSurface7-Schnittstellen ist der Standardwert DDLOCK_WAIT. Wenn Sie die Standardeinstellung überschreiben und die Zeit verwenden möchten, zu der die Zugriffstaste ausgelastet ist (wie durch den DDERR_WASSTILLDRAWING Rückgabewert gekennzeichnet), verwenden Sie DDLOCK_DONOTWAIT.

DDLOCK_EVENT

Derzeit nicht implementiert.

DDLOCK_NOOVERWRITE

Neu für DirectX 7.0. Wird nur mit Direct3D-Vertexpuffersperren verwendet. Gibt an, dass während der Sperre keine Scheitelpunkte geändert werden, auf die in einem Zeichnungsvorgang seit dem Beginn des Frames (oder der letzten Sperre ohne dieses Flag) verwiesen wurde. Dies kann nützlich sein, wenn Sie nur Daten an den Vertexpuffer anfügen möchten.

DDLOCK_NOSYSLOCK

Nehmen Sie win16Mutex (auch bekannt als Win16Lock) nicht. Dieses Flag wird beim Sperren der primären Oberfläche ignoriert.

DDLOCK_DISCARDCONTENTS

Neu für DirectX 7.0. Wird nur mit Direct3D-Vertexpuffersperren verwendet. Gibt an, dass während dieser Sperre keine Annahmen über den Inhalt des Vertexpuffers getroffen werden. Dadurch kann Direct3D oder der Treiber einen alternativen Speicherbereich als Vertexpuffer bereitstellen. Dies ist nützlich, wenn Sie den Inhalt des Vertexpuffers löschen und neue Daten eingeben möchten.

DDLOCK_OKTOSWAP

Dieses Flag ist veraltet und wurde durch das flag DDLOCK_DISCARDCONTENTS ersetzt.

DDLOCK_READONLY

Gibt an, dass die gesperrte Oberfläche nur gelesen werden kann.

DDLOCK_SURFACEMEMORYPTR

Gibt an, dass ein gültiger Speicherzeiger auf den oberen Rand des angegebenen Rechtecks zurückgegeben werden soll. Wenn kein Rechteck angegeben ist, wird ein Zeiger auf den oberen Rand der Oberfläche zurückgegeben. Dies ist die Standardoption.

DDLOCK_WAIT

Wenn eine Sperre nicht abgerufen werden kann, weil ein Bitblockübertragungsvorgang (Bitblt) ausgeführt wird, wird die Sperre wiederholt, bis eine Sperre abgerufen wird oder ein anderer Fehler auftritt, z. B. DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Gibt an, dass die gesperrte Oberfläche schreibfähig ist.

[in] unnamedParam4

Handle des Ereignisses. Dieser Parameter wird derzeit nicht verwendet und muss auf NULL festgelegt werden.

Rückgabewert

Wenn die Methode erfolgreich ist, wird der Rückgabewert DD_OK.

Wenn ein Fehler auftritt, kann die -Methode einen der folgenden Fehlerwerte zurückgeben:

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

Hinweise

In IDirectDrawSurface7 besteht das Standardverhalten von Lock darin, auf den Abschluss der Beschleuniger zu warten. Daher gibt Lock unter Standardbedingungen nie DDERR_WASSTILLDRAWING zurück. Wenn Sie die Fehlercodes anzeigen und nicht warten möchten, bis der Bitblt-Vorgang erfolgreich ist, verwenden Sie das Flag DDLOCK_DONOTWAIT.

Nach dem Abrufen eines Surface-Speicherzeigers können Sie auf den Surface-Speicher zugreifen, bis eine entsprechende IDirectDrawSurface7::Unlock-Methode aufgerufen wird. Wenn die Oberfläche entsperrt ist, ist der Zeiger auf den Surface-Speicher ungültig.

Rufen Sie keine DirectDraw-Bitbltfunktionen auf, um bitblt aus einem gesperrten Bereich einer Oberfläche zu bitblt. Wenn Sie dies tun, gibt die Bitblt entweder DDERR_SURFACEBUSY oder DDERR_LOCKEDSURFACES zurück. GDI-Blitfunktionen schlagen auch automatisch fehl, wenn sie auf einer gesperrten Videospeicheroberfläche verwendet werden.

Sofern Sie nicht das flag DDLOCK_NOSYSLOCK einschließen, bewirkt Lock , dass DirectDraw win16Mutex (auch als Win16Lock bezeichnet) hält, bis Sie die IDirectDrawSurface7::Unlock-Methode aufrufen. GUI-Debugger können nicht ausgeführt werden, während win16Mutex gehalten wird.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile ddraw.h
Bibliothek Ddraw.lib
DLL Ddraw.dll

Weitere Informationen

IDirectDrawSurface7