Exemple #1
0
/*------------------------------------------------------------------------------*/
void AkindDI::Message( UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch ( msg ){
	case WM_ACTIVATE:
		if ( m_BackGround == FALSE ){
			if ( WA_INACTIVE == wParam ){ Unacquire(); }
			else						{   Acquire(); }
		}
		break;
	case WM_DEVICECHANGE:
		switch ( wParam ){
		case DBT_DEVICEARRIVAL        : JoyAdd();	break;
		case DBT_DEVICEREMOVECOMPLETE : JoyDel();	break;
		}
		break;
	}
}
/*------------------------------------------------------------------------------*/
void AkindDI::Message( UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch ( msg ){
	case WM_ACTIVATE:
		if ( m_BackGround == FALSE ){
			if ( WA_INACTIVE == wParam ){ Unacquire(); }
			else						{   Acquire(); }
		}
		break;
	case WM_DEVICECHANGE:
		if (wParam == DBT_DEVICEARRIVAL && IsInputDevice((DEV_BROADCAST_HDR*)lParam)) {
			JoyAdd();
		} else if (wParam == DBT_DEVICEREMOVECOMPLETE && IsInputDevice((DEV_BROADCAST_HDR*)lParam)) {
			JoyDel();
		}
		break;
	}
}
/*------------------------------------------------------------------------------*/
BOOL AkindDI::Init( HWND hWnd, BOOL BackGround )
{
	HRESULT hRes;
	HINSTANCE hInstance = GetModuleHandle( NULL );

	m_hWnd = hWnd;
	m_JoyNum = 0;
	m_BackGround = BackGround;

	ZeroMemory( m_KeyBuff, sizeof(m_KeyBuff) );
	ZeroMemory( m_JoyGUID, sizeof(m_JoyGUID) );
	ZeroMemory( m_JoyData, sizeof(m_JoyData) );
	for ( int i=0; i<JOY_MAX; i++ ){ m_JoyReady[i] = FALSE; }

	hRes = DirectInput8Create( hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&m_pDInput, NULL );
	if ( FAILED( hRes ) ){ Error( 0, hRes ); return( FALSE ); }
	hRes = m_pDInput->CreateDevice( GUID_SysKeyboard, &m_pDInputKey, NULL );
	if ( FAILED( hRes ) ){ Error( 1, hRes ); return( FALSE ); }
	hRes = m_pDInputKey->SetDataFormat( &c_dfDIKeyboard );
	if ( FAILED( hRes ) ){ Error( 2, hRes ); return( FALSE ); }
	if ( m_BackGround ){
		hRes = m_pDInputKey->SetCooperativeLevel( hWnd, DISCL_BACKGROUND|DISCL_NONEXCLUSIVE );
	} else {
		hRes = m_pDInputKey->SetCooperativeLevel( hWnd, DISCL_FOREGROUND|DISCL_NONEXCLUSIVE );
	}
	if ( FAILED( hRes ) ){ Error( 3, hRes ); return( FALSE ); }

	JoyAdd();

	DEV_BROADCAST_DEVICEINTERFACE filter;
	filter.dbcc_size       = sizeof(filter);
	filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
	filter.dbcc_classguid  = GUID_CLASS_INPUT;
	m_hJoyDeviceNotify = RegisterDeviceNotification( hWnd, &filter, DEVICE_NOTIFY_WINDOW_HANDLE );

	return( TRUE );
}