Шаг 22 - Очищаем вторичную поверхность ClearSurfSecond

Итак, мы добавим в функцию ClearSurfSecond код для очистки этой поверхности. И будем вызывать эту функцию при загрузке окна. Раньше мы вызывали ее по нажатию на клавишу. Нажатие мы оставим для других целей. Техника очистки простая, мы получаем указать на поверхность, и устанавливаем все пиксели в 0.

Visual Basic
Visual C++

Visual Basic

Переносим очистку в функцию загрузки формы.

Private Sub Form_Load()
...........
...........
If (DirectDrawClass.ClearSurfSecond() = False) Then
MsgBox ("Error Clear")
End If
End Sub

Теперь получим указатель на поверхность и произведем очистку.

Public Function ClearSurfSecond() As Boolean
On Error GoTo Errors:

	Dim tempRECT As RECT
	Dim MyArray() As Byte
    
	SecondarySurf.Lock tempRECT, DdsdSecond, DDLOCK_WAIT Or DDLOCK_SURFACEMEMORYPTR, 0
	' Место под код работы с поверхностью, пока пустое
	SecondarySurf.GetLockedArray MyArray()
	For x = 0 To DdsdSecond.lWidth - 1
	For y = 0 To DdsdSecond.lHeight - 1
	MyArray(x, y) = 0
	Next y
	Next x
	'
	SecondarySurf.Unlock tempRECT
	ClearSurfSecond = True
	Exit Function
Errors:
	ClearSurfSecond = False
End Function

Visual C++

Переносим очистку в функцию загрузки диалога.

BOOL CDirectDlg::OnInitDialog()
{
	............
	if (cDirecDraw.ClearSurfSecond() !=TRUE)
	{
		AfxMessageBox("Error Clear");
		return FALSE;
	}

	return TRUE;  // return TRUE  unless you set the focus to a control
}

Теперь получим указатель на поверхность и произведем очистку.

BOOL CDirectDraw::ClearSurfSecond()
{
	memset(&DdsdSecond,0,sizeof(DDSURFACEDESC));
	DdsdSecond.dwSize = sizeof(DDSURFACEDESC);
	if (SecondarySurf->Lock(NULL,&DdsdSecond,DDLOCK_WAIT |
		DDLOCK_SURFACEMEMORYPTR,NULL)!=DD_OK) return FALSE;

	// Место под код работы с поверхностью, пока пустое
	char* buf = (char*)DdsdSecond.lpSurface;
	memset(buf,0,(DdsdSecond.dwHeight * DdsdSecond.dwHeight)); 
	//
    
	if (SecondarySurf->Unlock(NULL)!=DD_OK) return FALSE;
	return TRUE;
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 27.04.2002