Condividi tramite


Metodo IDirectDrawSurface7::Lock (ddraw.h)

Ottiene un puntatore alla memoria superficiale.

Sintassi

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

Parametri

[in] unnamedParam1

Puntatore a una struttura RECT che identifica l'area della superficie bloccata. Se questo parametro è NULL, l'intera superficie è bloccata.

[in, out] unnamedParam2

Puntatore a una struttura DDSURFACEDESC2 che descrive i dettagli rilevanti sulla superficie e che riceve informazioni sulla superficie.

[in] unnamedParam3

Combinazione di flag che determinano come bloccare la superficie. Vengono definiti i flag seguenti:

DDLOCK_DONOTWAIT

Nelle interfacce IDirectDrawSurface7 il valore predefinito è DDLOCK_WAIT. Se si vuole eseguire l'override del valore predefinito e usare il tempo in cui l'acceleratore è occupato (come indicato dal valore restituito DDERR_WASSTILLDRAWING), usare DDLOCK_DONOTWAIT.

DDLOCK_EVENT

Non implementato attualmente.

DDLOCK_NOOVERWRITE

Novità per DirectX 7.0. Usato solo con blocchi del vertex buffer Direct3D. Indica che nessun vertice a cui viene fatto riferimento in un'operazione di disegno dall'inizio del frame (o dall'ultimo blocco senza questo flag) viene modificato durante il blocco. Ciò può essere utile quando si desidera aggiungere dati solo al vertex buffer.

DDLOCK_NOSYSLOCK

Non prendere Win16Mutex (noto anche come Win16Lock). Questo flag viene ignorato quando si blocca la superficie primaria.

DDLOCK_DISCARDCONTENTS

Novità per DirectX 7.0. Usato solo con blocchi del vertex buffer Direct3D. Indica che non vengono effettuate ipotesi sul contenuto del buffer dei vertici durante questo blocco. In questo modo Direct3D o il driver possono fornire un'area di memoria alternativa come vertex buffer. Ciò è utile quando si prevede di cancellare il contenuto del vertex buffer e di compilare nuovi dati.

DDLOCK_OKTOSWAP

Questo flag è obsoleto ed è stato sostituito dal flag DDLOCK_DISCARDCONTENTS.

DDLOCK_READONLY

Indica che la superficie bloccata può essere di sola lettura.

DDLOCK_SURFACEMEMORYPTR

Indica che deve essere restituito un puntatore di memoria valido all'inizio del rettangolo specificato. Se non viene specificato alcun rettangolo, viene restituito un puntatore alla parte superiore della superficie. Questo è il valore predefinito.

DDLOCK_WAIT

Se non è possibile ottenere un blocco perché è in corso un'operazione bit block transfer (bitblt), i tentativi di blocco fino a quando non viene ottenuto un blocco o si verifica un altro errore, ad esempio DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Indica che la superficie bloccata è abilitata per la scrittura.

[in] unnamedParam4

Handle dell'evento. Questo parametro non è attualmente utilizzato e deve essere impostato su NULL.

Valore restituito

Se il metodo ha esito positivo, il valore restituito viene DD_OK.

Se ha esito negativo, il metodo può restituire uno dei valori di errore seguenti:

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

Commenti

In IDirectDrawSurface7 il comportamento predefinito di Lock deve attendere il completamento dell'acceleratore. Pertanto, in condizioni predefinite, Lock non restituisce mai DDERR_WASSTILLDRAWING. Se si desidera visualizzare i codici di errore e non attendere che l'operazione bitblt abbia esito positivo, usare il flag DDLOCK_DONOTWAIT.

Dopo aver recuperato un puntatore alla memoria della superficie, è possibile accedere alla memoria della superficie fino a quando non viene chiamato un metodo IDirectDrawSurface7::Unlock corrispondente. Quando la superficie viene sbloccata, il puntatore alla memoria della superficie non è valido.

Non chiamare le funzioni bitblt directDraw in bitblt da un'area bloccata di una superficie. In tal caso, bitblt restituisce DDERR_SURFACEBUSY o DDERR_LOCKEDSURFACES. Anche le funzioni di blit GDI hanno esito negativo in modo invisibile all'utente quando vengono usate su una superficie di memoria video bloccata.

A meno che non includa il flag DDLOCK_NOSYSLOCK, Lock fa sì che DirectDraw contenga Win16Mutex (noto anche come Win16Lock) fino a quando non chiami il metodo IDirectDrawSurface7::Unlock . I debugger GUI non possono funzionare mentre win16Mutex è mantenuto.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione ddraw.h
Libreria Ddraw.lib
DLL Ddraw.dll

Vedi anche

IDirectDrawSurface7