Compartilhar via


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

Obtém um ponteiro para a memória da superfície.

Sintaxe

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

Parâmetros

[in] unnamedParam1

Um ponteiro para uma estrutura RECT que identifica a região da superfície que está sendo bloqueada. Se esse parâmetro for NULL, toda a superfície será bloqueada.

[in, out] unnamedParam2

Um ponteiro para uma estrutura DDSURFACEDESC2 que descreve detalhes relevantes sobre a superfície e que recebe informações sobre a superfície.

[in] unnamedParam3

Uma combinação de sinalizadores que determinam como bloquear a superfície. Os seguintes sinalizadores são definidos:

DDLOCK_DONOTWAIT

Nas interfaces IDirectDrawSurface7 , o padrão é DDLOCK_WAIT. Se você quiser substituir o padrão e usar o tempo quando o acelerador estiver ocupado (conforme indicado pela DDERR_WASSTILLDRAWING valor retornado), use DDLOCK_DONOTWAIT.

DDLOCK_EVENT

Não implementado atualmente.

DDLOCK_NOOVERWRITE

Novo para DirectX 7.0. Usado somente com bloqueios de buffer de vértice Direct3D. Indica que nenhum vértices que foram referenciados em uma operação de desenho desde o início do quadro (ou o último bloqueio sem esse sinalizador) é modificado durante o bloqueio. Isso pode ser útil quando você deseja acrescentar apenas dados ao buffer de vértice.

DDLOCK_NOSYSLOCK

Não pegue o Win16Mutex (também conhecido como Win16Lock). Esse sinalizador é ignorado ao bloquear a superfície primária.

DDLOCK_DISCARDCONTENTS

Novo para DirectX 7.0. Usado somente com bloqueios de buffer de vértice Direct3D. Indica que nenhuma suposição é feita sobre o conteúdo do buffer de vértice durante esse bloqueio. Isso permite que o Direct3D ou o driver forneçam uma área de memória alternativa como o buffer de vértice. Isso é útil quando você planeja limpar o conteúdo do buffer de vértice e preencher novos dados.

DDLOCK_OKTOSWAP

Esse sinalizador é obsoleto e foi substituído pelo sinalizador DDLOCK_DISCARDCONTENTS.

DDLOCK_READONLY

Indica que a superfície que está sendo bloqueada só pode ser lida.

DDLOCK_SURFACEMEMORYPTR

Indica que um ponteiro de memória válido para a parte superior do retângulo especificado deve ser retornado. Se nenhum retângulo for especificado, um ponteiro para a parte superior da superfície será retornado. Esse é o padrão.

DDLOCK_WAIT

Se um bloqueio não puder ser obtido porque uma operação bitblt (transferência de bloco de bits) está em andamento, Lock tentará novamente até que um bloqueio seja obtido ou outro erro ocorra, como DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Indica que a superfície que está sendo bloqueada está habilitada para gravação.

[in] unnamedParam4

Identificador do evento. Esse parâmetro não é usado no momento e deve ser definido como NULL.

Retornar valor

Se o método for bem-sucedido, o valor retornado será DD_OK.

Se falhar, o método poderá retornar um dos seguintes valores de erro:

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

Comentários

Em IDirectDrawSurface7, o comportamento padrão de Lock é aguardar a conclusão do acelerador. Portanto, em condições padrão, Lock nunca retorna DDERR_WASSTILLDRAWING. Se você quiser ver os códigos de erro e não esperar até que a operação bitblt seja bem-sucedida, use o sinalizador DDLOCK_DONOTWAIT.

Depois de recuperar um ponteiro de memória de superfície, você pode acessar a memória da superfície até que um método IDirectDrawSurface7::Unlock correspondente seja chamado. Quando a superfície é desbloqueada, o ponteiro para a memória da superfície é inválido.

Não chame as funções bitblt DirectDraw para bitblt de uma região bloqueada de uma superfície. Se você fizer isso, o bitblt retornará DDERR_SURFACEBUSY ou DDERR_LOCKEDSURFACES. As funções blit GDI também falham silenciosamente quando usadas em uma superfície de memória de vídeo bloqueada.

A menos que você inclua o sinalizador DDLOCK_NOSYSLOCK, Lock faz com que o DirectDraw mantenha o Win16Mutex (também conhecido como Win16Lock) até que você chame o método IDirectDrawSurface7::Unlock . Os depuradores de GUI não podem operar enquanto o Win16Mutex é mantido.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho ddraw.h
Biblioteca Ddraw.lib
DLL Ddraw.dll

Confira também

IDirectDrawSurface7