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 |