다음을 통해 공유


IDirectDrawSurface7::Lock 메서드(ddraw.h)

표면 메모리에 대한 포인터를 가져옵니다.

구문

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

매개 변수

[in] unnamedParam1

잠겨 있는 표면의 영역을 식별하는 RECT 구조체에 대한 포인터입니다. 이 매개 변수가 NULL이면 전체 표면이 잠깁니다.

[in, out] unnamedParam2

표면에 대한 관련 세부 정보를 설명하고 표면에 대한 정보를 수신하는 DDSURFACEDESC2 구조체에 대한 포인터입니다.

[in] unnamedParam3

표면을 잠그는 방법을 결정하는 플래그의 조합입니다. 다음 플래그가 정의됩니다.

DDLOCK_DONOTWAIT

IDirectDrawSurface7 인터페이스에서 기본값은 DDLOCK_WAIT. DDERR_WASSTILLDRAWING 반환 값으로 표시된 대로 액셀러레이터가 사용 중일 때 기본값 및 사용 시간을 재정의하려면 DDLOCK_DONOTWAIT 사용합니다.

DDLOCK_EVENT

현재 구현되지 않습니다.

DDLOCK_NOOVERWRITE

DirectX 7.0의 새로운 기능입니다. Direct3D 꼭짓점 버퍼 잠금에만 사용됩니다. 프레임의 시작(또는 이 플래그가 없는 마지막 잠금)이 잠금 중에 수정된 이후 그리기 작업에서 참조된 꼭짓점이 없음을 나타냅니다. 꼭짓점 버퍼에만 데이터를 추가하려는 경우에 유용할 수 있습니다.

DDLOCK_NOSYSLOCK

Win16Mutex(Win16Lock이라고도 함)를 사용하지 마세요. 이 플래그는 기본 표면을 잠글 때 무시됩니다.

DDLOCK_DISCARDCONTENTS

DirectX 7.0의 새로운 기능입니다. Direct3D 꼭짓점 버퍼 잠금에만 사용됩니다. 이 잠금 중에 꼭짓점 버퍼의 내용에 대한 가정이 수행되지 않음을 나타냅니다. 이렇게 하면 Direct3D 또는 드라이버가 대체 메모리 영역을 꼭짓점 버퍼로 제공할 수 있습니다. 이는 꼭짓점 버퍼의 내용을 지우고 새 데이터를 채우려는 경우에 유용합니다.

DDLOCK_OKTOSWAP

이 플래그는 사용되지 않으며 DDLOCK_DISCARDCONTENTS 플래그로 대체되었습니다.

DDLOCK_READONLY

잠겨 있는 표면만 읽을 수 있음을 나타냅니다.

DDLOCK_SURFACEMEMORYPTR

지정된 사각형의 맨 위에 유효한 메모리 포인터가 반환되어야 했음을 나타냅니다. 사각형을 지정하지 않으면 표면 위쪽에 대한 포인터가 반환됩니다. 이것이 기본값입니다.

DDLOCK_WAIT

비트 블록 전송(bitblt) 작업이 진행 중이므로 잠금을 가져올 수 없는 경우 잠금이 획득되거나 DDERR_SURFACEBUSY 같은 다른 오류가 발생할 때까지 잠금 을 다시 시도합니다.

DDLOCK_WRITEONLY

잠겨 있는 표면이 쓰기가 가능했음을 나타냅니다.

[in] unnamedParam4

이벤트의 핸들입니다. 이 매개 변수는 현재 사용되지 않으며 NULL로 설정해야 합니다.

반환 값

메서드가 성공하면 반환 값이 DD_OK.

실패하면 메서드는 다음 오류 값 중 하나를 반환할 수 있습니다.

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

설명

IDirectDrawSurface7에서 Lock의 기본 동작은 가속기가 완료되기를 기다리는 것입니다. 따라서 기본 조건에서 Lock 은 DDERR_WASSTILLDRAWING 반환하지 않습니다. 오류 코드를 보고 bitblt 작업이 성공할 때까지 기다리지 않으려면 DDLOCK_DONOTWAIT 플래그를 사용합니다.

Surface 메모리 포인터를 검색한 후 해당 IDirectDrawSurface7::Unlock 메서드가 호출될 때까지 Surface 메모리에 액세스할 수 있습니다. 표면의 잠금이 해제되면 표면 메모리에 대한 포인터가 잘못되었습니다.

DirectDraw 비트blt 함수를 호출하여 표면의 잠긴 영역에서 비트blt하지 마세요. 이 경우 bitblt는 DDERR_SURFACEBUSY 또는 DDERR_LOCKEDSURFACES 반환합니다. 또한 GDI 블릿 함수는 잠긴 비디오 메모리 화면에서 사용할 때 자동으로 실패합니다.

DDLOCK_NOSYSLOCK 플래그를 포함하지 않는 한 LockIDirectDrawSurface7::Unlock 메서드를 호출할 때까지 DirectDraw가 Win16Mutex(Win16Lock이라고도 함)를 유지하도록 합니다. Win16Mutex가 유지되는 동안에는 GUI 디버거가 작동할 수 없습니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 ddraw.h
라이브러리 Ddraw.lib
DLL Ddraw.dll

추가 정보

IDirectDrawSurface7