Шаг 8 - Устанавливаем совместный доступ – SetCooperativeLevel.

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

Visual Basic
Visual C++

Visual Basic

object.SetCooperativeLevel(hwnd As Long,  flags As CONST_DISCLFLAGS)

Параметры
object
Объектная переменная типа DirectInputDevice
hwnd
Дескриптор окна связанный с устройством.
flags
Флаг совместного доступа

DISCL_BACKGROUND		Приложение использует устройство когда имеет фокус ввода
DISCL_FOREGROUND		Приложение может использовать устройство даже когда не активно
DISCL_EXCLUSIVE		Монопольный доступ к устройству
DISCL_NONEXCLUSIVE		Приложение не требует монопольного доступа

Следующие комбинации имеют силу

DISCL_NONEXCLUSIVE Or DISCL_BACKGROUND		все
DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND		все
DISCL_EXCLUSIVE Or DISCL_BACKGROUND			джойстик
DISCL_EXCLUSIVE Or DISC_FOREGROUND			все

Ошибки
Если создание не успешно, то будет сгенерирована ошибка и код установлен в Err.Number в одно из следующих значений

DIERR_INVALIDPARAM  
DIERR_INVALIDHANDLE

Visual C++

HRESULT SetCooperativeLevel
(
  HWND hwnd,     
  DWORD dwFlags  
);

Параметры
hwnd
Дескриптор окна связанный с устройством.
flags
Флаг совместного доступа

DISCL_BACKGROUND		Приложение использует устройство когда имеет фокус ввода
DISCL_FOREGROUND		Приложение может использовать устройство даже когда не активно
DISCL_EXCLUSIVE		Монопольный доступ к устройству
DISCL_NONEXCLUSIVE		Приложение не требует монопольного доступа

Приложение должно обязательно определить DISCL_FOREGROUND или DISCL_BACKGROUND и обязательно DISCL_EXCLUSIVE или DISCL_NONEXCLUSIVE.

Возвращаемое значение.
Если вызов успешный функция возвращает DI_OK. Иначе один из следующих кодов ошибки.

DIERR_INVALIDPARAM  
DIERR_NOTINITIALIZED  
E_HANDLE
Hosted by uCoz