Мы с Вами создадим метод GetSecondarySurf который будет получать вторичную поверхность. Так как он может завершиться ошибкой, тип будет BOOL и возврат TRUE в случае успеха, иначе FALSE.
Visual Basic Объявляем переменную объекта вторичной поверхности и структуру DDSCAPS2.
Создаем метод и реализуем получение поверхности.
Используем данный метод при запуске формы, если ошибка прекращаем программу.
Еще один маленький нюанс. В зависимости от Вашей Windows - 9x-2000 завершение работы программы могло приводить к ошибкам. Об этом в следующем шаге не пугайтесь. А так программа должна просто запускаться и все. Вы пока нечего не видите кроме смены режима.
Объявляем переменную объекта вторичной поверхности и структуру DDSCAPS. Создаем функцию и реализуем получение поверхности.
Используем данный метод при запуске диалога, если ошибка прекращаем программу.
Еще один маленький нюанс. В зависимости от Вашей Windows - 9x-2000 завершение работы программы могло приводить к ошибкам. Об этом в следующем шаге не пугайтесь. А так программа должна просто запускаться и все. Вы пока нечего не видите кроме смены режима.
Visual C++
Visual Basic
Private PrimarySurf As DirectDrawSurface7
Private SecondarySurf As DirectDrawSurface7
Private strsurf As DDSURFACEDESC2
Private strsurfsec As DDSCAPS2
................
Public Function GetSecondarySurf() As Boolean
On Error GoTo Errors:
strsurfsec.lCaps = DDSCAPS_BACKBUFFER
Set SecondarySurf = PrimarySurf.GetAttachedSurface(strsurfsec)
GetSecondarySurf = True
Exit Function
Errors:
GetSecondarySurf = False
End Function
Private Sub Form_Load()
...........
If (DirectDrawClass.GetSecondarySurf() = False) Then
MsgBox ("Error Get Secondary ")
End If
End Sub
Visual C++
class CDirectDraw
{
public:
..........
private:
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE PrimarySurf;
LPDIRECTDRAWSURFACE SecondarySurf;
DDSCAPS strsurfsec;
HRESULT rezult;
DDSURFACEDESC strsurf;
};
BOOL CDirectDraw::GetSecondarySurf()
{
strsurfsec.dwCaps = DDSCAPS_BACKBUFFER;
if (PrimarySurf->GetAttachedSurface(&strsurfsec,
&SecondarySurf)!= DD_OK) return FALSE;
return TRUE;
}
BOOL CDirectDlg::OnInitDialog()
{
CDialog::OnInitDialog();
............
if (cDirecDraw.GetSecondarySurf() !=TRUE)
{
AfxMessageBox("Error Secondary Surf");
return FALSE;
}
return TRUE; // return TRUE unless you set the focus to a control
}