Шаг 7 - Захват видеоадаптера функция SetCooperativeLevel

Мы с Вами уже знаем, что DirectDraw работает напрямую с видеоадаптером. Так же нужно помнить что Windows многозадачная OS. Соответственно очень может возникнуть ситуация когда две программы захотят например изменить разрешение экрана, или поменять палитру. Вот для решения этих проблем в DirectDraw и была включена функция SetCooperativeLevel. Главным образом, Вы используете эту функцию, чтобы определить, выполняется ли ваша прикладная программа как полноэкранная программа с монопольным доступом на дисплей или как оконная прикладная программа.

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

В полноэкранном и исключительном совместном уровне, Вы можете использовать аппаратные средства наиболее полно. В этом режиме, Вы можете устанавливать заказные и динамические палитры, изменять разрешающею способность дисплея, выполнять зеркальное отражение страницы. Исключительный (полноэкранный) режим не запрещает другим прикладным программам распределять поверхности, и при этом не исключает их из использования DirectDraw или GDI. Однако он предотвращает от изменения режима отображения или палитры из других программ.

Visual Basic
Visual C++

Visual Basic

Описание функции
DirectDraw7.SetCooperativeLevel метод определяет поведение прикладной программы верхнего уровня.

object.SetCooperativeLevel(  hdl As Long,  flags As CONST_DDSCLFLAGS)

Параметры
object
Объектное перемененная к объекту DirectDraw7.
hdl
Дескриптор окна, используемый для прикладной программы. Установите к окну верхнего уровня. Этот параметр может быть 0, когда флажок DDSCL_NORMAL определен в параметре флажков.
flags
Один или большее количество констант CONST_DDSCLFLAGS.

Ошибки
Если сбои метода, вызовется ошибка. Номер ошибки может быть установлен к одному из следующих значений:

DDERR_EXCLUSIVEMODEALREADYSET  
DDERR_HWNDALREADYSET  
DDERR_HWNDSUBCLASSED  
DDERR_INVALIDOBJECT  
DDERR_INVALIDPARAMS  
DDERR_OUTOFMEMORY  

Visual C++

Описание функции
IDirectDraw7::SetCooperativeLevel метод определяет поведение прикладной программы верхнего уровня.

HRESULT SetCooperativeLevel
(
	HWND hWnd,     
	DWORD dwFlags  
);

Параметры
hWnd
Дескриптор окна, используемый для прикладной программы. Этот параметр может быть NULL, когда флажок DDSCL_NORMAL определен в dwFlags параметре. В MFC окно программы можно получить следующим снобом.

HWND hwndTop = AfxGetMainWnd()->GetSafeHwnd();

flags
Один или большее количество констант

DDSCL_ALLOWMODEX 
DDSCL_ALLOWREBOOT 
DDSCL_CREATEDEVICEWINDOW 
DDSCL_EXCLUSIVE 
DDSCL_FPUPRESERVE 
DDSCL_FPUSETUP 
DDSCL_FULLSCREEN 
DDSCL_MULTITHREADED 
DDSCL_NORMAL 
DDSCL_NOWINDOWCHANGES 
DDSCL_SETDEVICEWINDOW 
DDSCL_SETFOCUSWINDOW 

Возвращаемое значение
Если метод успешен, возвращаемое значение - DD_OK.
Если метод терпит неудачу, возвращается одна из следующих значений ошибки:

DDERR_EXCLUSIVEMODEALREADYSET  
DDERR_HWNDALREADYSET  
DDERR_HWNDSUBCLASSED  
DDERR_INVALIDOBJECT  
DDERR_INVALIDPARAMS  
DDERR_OUTOFMEMORY  

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