#include "winmain.h"
#include "dinput.h"
LPDIRECTINPUT lpDInput = NULL; // pointer to direct input object
LPDIRECTINPUTDEVICE lpDIKeyboard = NULL; // pointer to keyboard device
LPDIRECTINPUTDEVICE lpDIMouse = NULL; // pointer to mouse device
char keyboard[144]; // contains state of keyboard
bool keyevent[144]; // scan code of a pressed key
DIMOUSESTATE MouseState; // contains state of mouse
float mouse_x;
float mouse_y;
#define KEYBOARD_BUFFER_SIZE 1 // number of events in buffer
//==============================================
// InitDInput()
//==============================================
int InitDInput(HWND hWnd, HINSTANCE hInstance)
{
if (DirectInputCreate(hInstance, DIRECTINPUT_VERSION, &lpDInput, NULL) != DI_OK)
{
}
//--------------------
// Keyboard
//--------------------
if (lpDInput->CreateDevice(GUID_SysKeyboard, &lpDIKeyboard, NULL) != DI_OK)
{
}
if (lpDIKeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK)
{
}
if (lpDIKeyboard->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND) != DI_OK)
{
}
DIPROPDWORD dipdw;
dipdw.diph.dwSize = sizeof(DIPROPDWORD);
dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dipdw.diph.dwObj = 0;
dipdw.diph.dwHow = DIPH_DEVICE;
dipdw.dwData = KEYBOARD_BUFFER_SIZE;
if (lpDIKeyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK)
{
}
if (lpDIKeyboard->Acquire() != DI_OK)
{
}
//--------------------
// Mouse
//--------------------
if (lpDInput->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL) != DI_OK)
{
}
if (lpDIMouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND) != DI_OK)
{
}
if (lpDIMouse->SetDataFormat(&c_dfDIMouse) != DI_OK)
{
}
if (lpDIMouse->Acquire() != DI_OK)
{
}
return(0);
}
//==============================================
// GetDInput()
//==============================================
int GetDInput()
{
if(lpDIKeyboard->GetDeviceState(256, (LPVOID)keyboard) != DI_OK)
{
}
if(lpDIMouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&MouseState) != DI_OK)
{
}
mouse_x = MouseState.lX;
mouse_y = MouseState.lY;
DIDEVICEOBJECTDATA key_pressed[KEYBOARD_BUFFER_SIZE];
DWORD dwItems;
HRESULT hRes = DIERR_INPUTLOST;
while (DI_OK != hRes)
{
hRes = lpDIKeyboard->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), key_pressed, &dwItems, 0);
if (hRes != DI_OK)
{
lpDIKeyboard->Acquire();
}
}
if ((key_pressed[0].dwData & 0x80) ? 1 : 0) // only key-down events are reported
{
keyevent[key_pressed[0].dwOfs] = true;
}
return(0);
}
//==============================================
// ReleaseDInput()
//==============================================
int ReleaseDInput()
{
if (lpDInput != NULL)
{
lpDInput->Release();
}
if (lpDIKeyboard != NULL)
{
lpDIKeyboard->Unacquire();
lpDIKeyboard->Release();
}
if (lpDIMouse != NULL)
{
lpDIMouse->Unacquire();
lpDIMouse->Release();
}
return(0);
} |