Мы с Вами уже знаем, что DirectDraw работает напрямую с видеоадаптером. Так же нужно помнить что Windows многозадачная OS. Соответственно очень может возникнуть ситуация когда две программы захотят например изменить разрешение экрана, или поменять палитру. Вот для решения этих проблем в DirectDraw и была включена функция SetCooperativeLevel. Главным образом, Вы используете эту функцию, чтобы определить, выполняется ли ваша прикладная программа как полноэкранная программа с монопольным доступом на дисплей или как оконная прикладная программа.
Нормальный совместный уровень указывает, что ваша DirectDraw прикладная программа функционирует как оконная прикладная программа. В этом уровне Вы не будете способны изменить палитру первичной поверхности или выполнять зеркальное отражение страницы.
В полноэкранном и исключительном совместном уровне, Вы можете использовать аппаратные средства наиболее полно. В этом режиме, Вы можете устанавливать заказные и динамические палитры, изменять разрешающею способность дисплея, выполнять зеркальное отражение страницы. Исключительный (полноэкранный) режим не запрещает другим прикладным программам распределять поверхности, и при этом не исключает их из использования DirectDraw или GDI. Однако он предотвращает от изменения режима отображения или палитры из других программ.
Visual Basic Описание функции Параметры Ошибки Описание функции Параметры flags Возвращаемое значение
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();
Один или большее количество констант
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