Partager via


IDirectDrawSurface7 ::Lock, méthode (ddraw.h)

Obtient un pointeur vers la mémoire de surface.

Syntaxe

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

Paramètres

[in] unnamedParam1

Pointeur vers une structure RECT qui identifie la région de la surface verrouillée. Si ce paramètre a la valeur NULL, la surface entière est verrouillée.

[in, out] unnamedParam2

Pointeur vers une structure DDSURFACEDESC2 qui décrit des détails pertinents sur la surface et qui reçoit des informations sur la surface.

[in] unnamedParam3

Combinaison d’indicateurs qui déterminent comment verrouiller la surface. Les indicateurs suivants sont définis :

DDLOCK_DONOTWAIT

Sur les interfaces IDirectDrawSurface7 , la valeur par défaut est DDLOCK_WAIT. Si vous souhaitez remplacer la valeur par défaut et utiliser le temps pendant lequel l’accélérateur est occupé (comme indiqué par la valeur de retour DDERR_WASSTILLDRAWING), utilisez DDLOCK_DONOTWAIT.

DDLOCK_EVENT

Actuellement non implémenté.

DDLOCK_NOOVERWRITE

Nouveauté de DirectX 7.0. Utilisé uniquement avec les verrous de tampon de vertex Direct3D. Indique qu’aucun sommet référencé dans une opération de dessin depuis le début du cadre (ou le dernier verrou sans cet indicateur) n’est modifié pendant le verrouillage. Cela peut être utile lorsque vous souhaitez uniquement ajouter des données à la mémoire tampon de vertex.

DDLOCK_NOSYSLOCK

Ne prenez pas win16Mutex (également appelé Win16Lock). Cet indicateur est ignoré lors du verrouillage de la surface primaire.

DDLOCK_DISCARDCONTENTS

Nouveauté de DirectX 7.0. Utilisé uniquement avec les verrous de tampon de vertex Direct3D. Indique qu’aucune hypothèse n’est faite concernant le contenu de la mémoire tampon de vertex pendant ce verrouillage. Cela permet à Direct3D ou au pilote de fournir une autre zone mémoire comme tampon de vertex. Cela est utile lorsque vous envisagez d’effacer le contenu de la mémoire tampon de vertex et de renseigner de nouvelles données.

DDLOCK_OKTOSWAP

Cet indicateur est obsolète et a été remplacé par l’indicateur DDLOCK_DISCARDCONTENTS.

DDLOCK_READONLY

Indique que la surface verrouillée peut uniquement être lue.

DDLOCK_SURFACEMEMORYPTR

Indique qu’un pointeur de mémoire valide vers le haut du rectangle spécifié doit être retourné. Si aucun rectangle n’est spécifié, un pointeur vers le haut de la surface est retourné. Il s’agit de la valeur par défaut.

DDLOCK_WAIT

Si un verrou ne peut pas être obtenu parce qu’une opération de transfert de bloc de bits (bitblt) est en cours, réessayez de verrouiller jusqu’à ce qu’un verrou soit obtenu ou qu’une autre erreur se produise, telle que DDERR_SURFACEBUSY.

DDLOCK_WRITEONLY

Indique que la surface verrouillée est activée en écriture.

[in] unnamedParam4

Handle de l’événement. Ce paramètre n’est pas utilisé actuellement et doit être défini sur NULL.

Valeur retournée

Si la méthode réussit, la valeur de retour est DD_OK.

En cas d’échec, la méthode peut retourner l’une des valeurs d’erreur suivantes :

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

Remarques

Dans IDirectDrawSurface7, le comportement par défaut de Lock consiste à attendre la fin de l’accélérateur. Par conséquent, dans les conditions par défaut, Lock ne retourne jamais DDERR_WASSTILLDRAWING. Si vous souhaitez voir les codes d’erreur et ne pas attendre que l’opération bitblt réussisse, utilisez l’indicateur DDLOCK_DONOTWAIT.

Après avoir récupéré un pointeur de mémoire de surface, vous pouvez accéder à la mémoire de surface jusqu’à ce qu’une méthode IDirectDrawSurface7 ::Unlock correspondante soit appelée. Lorsque la surface est déverrouillée, le pointeur vers la mémoire de la surface n’est pas valide.

N’appelez pas les fonctions de bitblt DirectDraw pour bitblt à partir d’une zone verrouillée d’une surface. Si c’est le cas, le bitblt retourne DDERR_SURFACEBUSY ou DDERR_LOCKEDSURFACES. Les fonctions blit GDI échouent également silencieusement lorsqu’elles sont utilisées sur une surface mémoire vidéo verrouillée.

À moins que vous n’incluiez l’indicateur DDLOCK_NOSYSLOCK, Lock permet à DirectDraw de maintenir l’élément Win16Mutex (également appelé Win16Lock) jusqu’à ce que vous appeliez la méthode IDirectDrawSurface7 ::Unlock . Les débogueurs d’interface graphique graphique ne peuvent pas fonctionner pendant la durée de l’opération Win16Mutex.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête ddraw.h
Bibliothèque Ddraw.lib
DLL Ddraw.dll

Voir aussi

IDirectDrawSurface7