C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 22 - Очищаем вторичную поверхность ClearSurfSecond / DirectDraw / Microsoft DirectX

Шаг 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;
}

Загрузить проект | | |
Автор Каев Артем.
[AD]