Шаг 8 - Полноэкранный режим

В прошлом шаге мы узнали о функции установки уровня доступа. Ее необходимо вызывать сразу после создание объекта DirectDraw. Заметили вариантов флагов и типов много. Наша задача будет попробовать полноэкранный режим. Для этого мы создадим метод GetFullScreenCooperativeLevel который в зависимости от успешности выполнения будет возвращать TRUE или FALSE. Будем считать, что если по каким то причинам получить данный режим не удалось, программа должна прекратить свое выполнение.

Visual Basic
Visual C++

Visual Basic

Нам нужно создать метод, внутри него указать полноэкранный (DDSCL_FULLSCREEN) и эксклюзивный(DDSCL_EXCLUSIVE) режим. Проверить на ошибки, и в зависимости от результата вызове метода вернуть TRUE или FALSE. Реализуем.

Public Function GetFullScreenCooperativeLevel() As Boolean
On Error GoTo Errors:
    objDirectDraw.SetCooperativeLevel DirectDraw.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE
    GetFullScreenCooperativeLevel = True
    Exit Function
Errors:
  GetFullScreenCooperativeLevel = False
End Function

Обратите внимание, что нам нужен был дескриптор окна. Оно это форма. Вот из формы мы его и взяли (DirectDraw.hWnd). Вообще свойство hWnd формы было создано для обращения к формe из Win32 API. Проверять успешность данной операции будем опять при загрузки формы.

Private Sub Form_Load()
If (DirectDrawClass.InitDirectDraw() = False) Then
	ErrorForm.Show 1
	End
End If

If (DirectDrawClass.GetFullScreenCooperativeLevel() = False) Then
	MsgBox ("Error Full Screen Level")
	End
End If
End Sub

При успешном выполнении данной функции, форма по размеру займет весь экран.

Visual C++

Нам нужно создать метод, внутри него указать полноэкранный (DDSCL_FULLSCREEN) и эксклюзивный(DDSCL_EXCLUSIVE) режим. Создаем функцию в нашем классе CDirectDraw

class CDirectDraw  
{
public:
	BOOL GetFullScreenCooperativeLevel();
	BOOL InitDirectDraw();
	CDirectDraw();
	.......
};

Пишем код.

BOOL CDirectDraw::GetFullScreenCooperativeLevel()
{
if (lpDD->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(),DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN )!=DD_OK) return FALSE;
return TRUE;
}

Функция AfxGetMainWnd глобальная и доступна из любого места программы. Она возвращает дескриптор окна. Проверять результат установки режима мы будем при инициализации диалогового окна.

BOOL CDirectDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	...................

	// TODO: Add extra initialization here
	if (cDirecDraw.InitDirectDraw() !=TRUE)
	{
		CErrorDirectDraw ce;
		ce.DoModal(); 
		return FALSE;
	}

	if (cDirecDraw.GetFullScreenCooperativeLevel()!=TRUE)
	{
		AfxMessageBox("Error Full Screen Level");
		return FALSE;
	}

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

При успешном выполнении данной функции, диалоговое окно по размеру займет весь экран.


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