21 HRESULT hRes = DirectInput8Create( GetModuleHandle( NULL ),
DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&m_poDirectInput8, NULL );
23 if ( SUCCEEDED( hRes ) )
25 if ( m_hMainWindow == NULL )
27 m_hMainWindow = FindWindowA(
"TRenderD3DInterface", NULL );
30 hRes = m_poDirectInput8->EnumDevices( DI8DEVCLASS_ALL, TInputDXInterface::EnumerateDeviceCallback,
this, DIEDFL_ATTACHEDONLY );
49 if ( m_poDirectInput8 != NULL )
51 m_poDirectInput8->Release();
52 m_poDirectInput8 = NULL;
62 pMouse->SetExclusive( m_hMainWindow, a_bIsExclusive );
69 auto input = GetDirectInput();
73 return input->EnumDevices( DI8DEVCLASS_ALL, EnumerateDeviceCallback,
this, DIEDFL_ATTACHEDONLY ) != DI_OK;
79BOOL TInputDXInterface::EnumerateDeviceCallback( LPCDIDEVICEINSTANCEA a_poDeviceInstance, LPVOID poDXInputInterface )
83 TASSERT( poDXInputInterface != NULL );
84 TASSERT( a_poDeviceInstance != NULL );
86 auto pInput8 = pInputInterface->m_poDirectInput8;
88 switch ( GET_DIDEVICE_TYPE( a_poDeviceInstance->dwDevType ) )
90 case DI8DEVTYPE_KEYBOARD:
92 LPDIRECTINPUTDEVICE8A pInputDevice;
93 HRESULT hRes = pInputInterface->m_poDirectInput8->CreateDevice( a_poDeviceInstance->guidInstance, &pInputDevice, NULL );
105 DIPROPDWORD oProperty;
106 oProperty.dwData = 0x20;
107 oProperty.diph.dwSize =
sizeof( DIPROPDWORD );
108 oProperty.diph.dwHeaderSize =
sizeof( DIPROPHEADER );
109 oProperty.diph.dwObj = 0;
110 oProperty.diph.dwHow = DIPH_DEVICE;
112 HRESULT hRes = pInputDevice->SetProperty( DIPROP_BUFFERSIZE, &oProperty.diph );
114 if ( FAILED( hRes ) )
117 hRes = pInputDevice->SetCooperativeLevel(
119 pInputInterface->
GetExclusiveMode() ? ( DISCL_NOWINKEY | DISCL_FOREGROUND | DISCL_EXCLUSIVE ) : ( DISCL_NONEXCLUSIVE | DISCL_BACKGROUND )
131 return DIENUM_CONTINUE;
138 case DI8DEVTYPE_MOUSE:
140 LPDIRECTINPUTDEVICE8A pInputDevice;
142 auto hRes = pInput8->CreateDevice( GUID_SysMouse, &pInputDevice, NULL );
148 if ( pMouse ==
TNULL )
150 pMouse =
new TInputDXDeviceMouse;
153 if ( pMouse ==
TNULL )
155 pInputDevice->Release();
156 return DIENUM_CONTINUE;
159 else if ( pMouse->GetDeviceInstance().dwDevType & DIDEVTYPE_HID )
161 pInputDevice->Release();
162 return DIENUM_CONTINUE;
165 if ( !pMouse->BindToDIDevice( pInputInterface->m_hMainWindow, a_poDeviceInstance, pInputDevice, pInputInterface->m_bExclusive ) )
173 return DIENUM_CONTINUE;
176 DIPROPDWORD oProperty;
177 oProperty.diph.dwSize =
sizeof( DIPROPDWORD );
178 oProperty.diph.dwHeaderSize =
sizeof( DIPROPHEADER );
179 oProperty.diph.dwObj = 0;
180 oProperty.diph.dwHow = DIPH_DEVICE;
181 oProperty.dwData = 0x20;
182 hRes = pInputDevice->SetProperty( DIPROP_BUFFERSIZE, &oProperty.diph );
184 if ( FAILED( hRes ) )
191 pMouse->Initialise();
194 return DIENUM_CONTINUE;
283 return DIENUM_CONTINUE;
#define DIRECTINPUT_VERSION
#define TSTATICCAST(POINTERTYPE, VALUE)
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
#define TDEFINE_CLASS(...)
TInputDevice * GetDeviceByIndex(TClass *a_pClass, TUINT a_uiIndex)
virtual TBOOL GetExclusiveMode() const
virtual void SetExclusiveMode(TBOOL a_bIsExclusive)
void RemoveDevice(TInputDevice *device)
void AddDevice(TInputDevice *device)
virtual TBOOL Acquire() override
const TBOOL BindToDIDevice(HWND a_hMainWindow, LPCDIDEVICEINSTANCEA a_poDeviceInstance, IDirectInputDevice8A *a_poDXInputDevice)
virtual TBOOL Initialise()
virtual TBOOL Deinitialise() override
virtual void SetExclusiveMode(TBOOL a_bIsExclusive) override
virtual TBOOL Initialise() override
HWND GetMainWindow() const