Шаг 19 - Подготовка к работе с поверхностью Lock

Для того, чтобы произвести операции с поверхностью, например, залить черным цветом, нам нужно поверхность заблокировать. Это понятно зачем нужно, чтобы в один и тот же момент не было два, например, потока, которые работают с поверхностью. После операций с ней нужно произвести разблокирование. Итак, как выглядит общая схема.

Lock
Работа (рисуем, красим еще что то).
Unlock

Смотрим описание Lock

Visual Basic
Visual C++

Visual Basic

Описание

object.Lock(r As RECT,  desc As DDSURFACEDESC2, flags As CONST_DDLOCKFLAGS,   hnd As Long)

Парамерты
object
Объектная переменная к объекту DirectDrawSurface7.
r
RECT тип, который определяет прямоугольника который идентифицирует область блокируемой поверхности. Если RECT пустой, вся поверхность блокирована.
desc
DDSURFACEDESC2 тип, который будет заполнен подробностями относительно поверхности.
flags Одна или большее количество констант CONST_DDLOCKFLAGS которые описывают тип блокировки, которую нужно выполнить.
hnd Не используемый и должен быть установлен к 0.

Ошибки
Если вызов не успешен, то будет сгенерирована ошибка и код установлен в Err.Number. Одно из следующих значений.

DDERR_INVALIDOBJECT  
DDERR_INVALIDPARAMS  
DDERR_OUTOFMEMORY  
DDERR_SURFACEBUSY  
DDERR_SURFACELOST  
DDERR_WASSTILLDRAWING  

Visual C++

Описание

HRESULT Lock
(
	LPRECT lpDestRect,                
	LPDDSURFACEDESC2 lpDDSurfaceDesc,  
	DWORD dwFlags,                    
	HANDLE hEvent                     
);

Параметры
lpDestRect
Адрес структуры RECT, которая идентифицирует область поверхности которая блокируется. Если NULL, вся поверхность блокирована.
lpDDSurfaceDesc
Адрес структуры DDSURFACEDESC2, которая будет заполнена подробностями относительно поверхности.
dwFlags
Одна или большее количество констант DDLOCK_ которые описывают тип блокировки, которую нужно выполнить.
hEvent
Не используемый и должен быть установлен к NULL.

Возвращаемое значение
Если метод успешен, возвращаемое значение - DD_OK.
Если метод терпит неудачу, возвращается одна из следующих значений ошибки:

DDERR_INVALIDOBJECT  
DDERR_INVALIDPARAMS  
DDERR_OUTOFMEMORY  
DDERR_SURFACEBUSY  
DDERR_SURFACELOST  
DDERR_WASSTILLDRAWING  

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 25.04.2002