Мы с Вами создадим метод CreatePrimarySurf. В этом методе мы будем создавать первичную поверхность. Так как создание первичной поверхности может завершиться ошибкой, метод будет BOOL и возвращать TRUE в случае успеха и FALSE в случае ошибки. Если первичную поверхность создать не удается, программа завершается.
Visual Basic Описывает переменную поверхности.
Создаем метод, который заполняет структуру DDSURFACEDESC2 необходимыми данными и создает объект поверхности.
При загрузке формы создаем поверхность, если ошибка выходим.
Нечего нового происходить не должно. Просто программа должны запускаться. Кстати не забывайте освобождать объекты.
Описывает переменную поверхности.
Создаем функцию, который заполняет структуру DDSURFACEDESC необходимыми данными и создает объект поверхности.
При загрузке диалогового окна создаем поверхность, если ошибка выходим.
Нечего нового происходить не должно. Просто программа должны запускаться. Кстати не забывайте освобождать объекты.
Visual C++
Visual Basic
.......
Private PrimarySurf As DirectDrawSurface7
.......
Public Function CreatePrimarySurf() As Boolean
On Error GoTo Errors:
strsurf.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
strsurf.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
strsurf.lBackBufferCount = 1
Set PrimarySurf = objDirectDraw.CreateSurface(strsurf)
CreatePrimarySurf = True
Exit Function
Errors:
CreatePrimarySurf = False
End Function
Private Sub Form_Load()
........
If (DirectDrawClass.CreatePrimarySurf() = False) Then
MsgBox ("Error Create Primary")
End
End If
End Sub
Private Sub Class_Terminate()
Set PrimarySurf = Nothing
Set objDirectDraw = Nothing
Set objDirectX = Nothing
End Sub
Visual C++
class CDirectDraw
{
...........
private:
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE PrimarySurf;
HRESULT rezult;
DDSURFACEDESC strsurf;
};
BOOL CDirectDraw::CreatePrimarySurf()
{
strsurf.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
strsurf.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
strsurf.dwBackBufferCount = 1;
if (lpDD->CreateSurface(&strsurf,&PrimarySurf,NULL) !=DD_OK)
return FALSE;
return TRUE;
}
BOOL CDirectDlg::OnInitDialog()
{
CDialog::OnInitDialog();
.....................
if (cDirecDraw.CreatePrimarySurf() !=TRUE)
{
AfxMessageBox("Error Set Mode");
return FALSE;
}
return TRUE; // return TRUE unless you set the focus to a control
}
CDirectDraw::~CDirectDraw()
{
if (PrimarySurf!=NULL)
PrimarySurf->Release();
if (lpDD!=NULL)
lpDD->Release();
}