Input* gInput = 0;
Input::Input()
{
raw = 0;
}
Input::~Input()
{
}
void Input::Release()
{
}
void Input::Initialize()
{
Rid[0].usUsagePage = 1;
Rid[0].usUsage = 6;
Rid[0].dwFlags = 0;
Rid[0].hwndTarget=NULL;
Rid[1].usUsagePage = 1;
Rid[1].usUsage = 2;
Rid[1].dwFlags = 0;
Rid[1].hwndTarget=NULL;
RegisterRawInputDevices(Rid, 2, sizeof(Rid[0]));
}
void Input::Update()
{
if (raw->header.dwType== RIM_TYPEMOUSE)
{
lastMouseX = raw->data.mouse.lLastX;
lastMouseY = raw->data.mouse.lLastY;
mouseFlags = raw->data.mouse.usFlags;
mouseButtonFlags = raw->data.mouse.usButtonFlags;
leftButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_LEFT_BUTTON_DOWN;
rightButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_RIGHT_BUTTON_DOWN;
middleButtonDown = raw->data.mouse.ulButtons & RI_MOUSE_MIDDLE_BUTTON_DOWN;
if(raw->data.mouse.ulButtons & RI_MOUSE_WHEEL)
{
wheelZ = raw->data.mouse.usButtonData;
}
}
if (raw->header.dwType== RIM_TYPEKEYBOARD)
{
keyCode=raw->data.keyboard.VKey;
bool keyPressed=raw->data.keyboard.Flags & RI_KEY_BREAK;
}
}
class Input
{
#pragma region REGION:INPUT_METHODS
public:
Input();
~Input();
void Release();
void Initialize();
void Update();
#pragma endregion
#pragma region REGION:INPUT_MEMBERS
public:
RAWINPUTDEVICE Rid[2];
RAWINPUT *raw;
long lastMouseX;
long lastMouseY;
USHORT mouseFlags;
USHORT mouseButtonFlags;
USHORT wheelZ;
bool leftButtonDown;
bool rightButtonDown;
bool middleButtonDown;
USHORT keyCode;
#pragma endregion
};
extern Input* gInput;
#endif
When I initialize it in the main function like this:
gInput = new Input();
gInput->Initialize();
The window starts lagging and all 4 cores of my CPU show increased load,as much as 20% - 40% !!
I tried to read input with Enter and LeftMouseButton,but it doesn't respond:
while(!done)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(msg.message == WM_QUIT)
{
done = true;
}
if(msg.message == WM_INPUT)
{
UINT bufferSize;
GetRawInputData((HRAWINPUT)msg.lParam, RID_INPUT, NULL, &bufferSize, sizeof (RAWINPUTHEADER));
BYTE *buffer=new BYTE[bufferSize];
GetRawInputData((HRAWINPUT)msg.lParam, RID_INPUT, (LPVOID)buffer, &bufferSize, sizeof (RAWINPUTHEADER));
SafeDelete(gInput->raw);
gInput->raw = (RAWINPUT*)buffer;
gInput->Update();
if(gInput->keyCode = VK_RETURN)
{
done = true;
}
if(gInput->leftButtonDown)
{
done = true;
}
}
else
{
gGraphics->Render();
}
}
What am I doing wrong?Did I initialize with the wrong flags?I also tried it like this:
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY;
Rid[0].hwndTarget = 0;
Rid[1].usUsagePage = 0x01;
Rid[1].usUsage = 0x06;
Rid[1].dwFlags = RIDEV_NOLEGACY;
Rid[1].hwndTarget = 0;
Same thing happens..