Xbox-Pad Trauma RAWINPUT
-
Hi,
ich amüsiere mich zzt. mit dem doch genialen Xbox Pad.
Hierfür verwende ich eine registrierte RawInput Message und erhalte
auch wunderbar und präzise die Achskoordinaten.Leider kommen die Buttons des Pads nicht mit in dem Event, lediglich
wird das Interface neu gepollt.Woher die Buttoninformationen erlangen, zusätzlich einen JOYSTICK anmelden ?
Danke für Hinwiese
Karsten aus PreußenTestkörper :
void CPadInput::OnRawInput(UINT nInputcode, HRAWINPUT hRawInput) { static BYTE lpb[140] = { 0 }; UINT dwSize = sizeof(lpb); GetRawInputData((HRAWINPUT)hRawInput, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)); RAWINPUT* raw = (RAWINPUT*)&lpb[0]; //all buttons missing if (raw->header.dwType == RIM_TYPEHID) { DWORD RawButton = raw->data.mouse.ulRawButtons;// <-WRONG-> raw->data.keyboard.Message; // // make sure keyboard/mouse HID data didn't somehow sneak its way in here CVersions::DbgMsg(false, "******************* %d %d ******************* %d\r\n", raw->data.hid.dwCount, raw->data.hid.dwSizeHid, RawButton); WORD hi(HIWORD(RawButton)); WORD lo(LOWORD(RawButton)); CVersions::DbgMsg(false,"%d %d %d %d\r\n", LOBYTE(hi), HIBYTE(hi), LOBYTE(lo), HIBYTE(lo)); BYTE *pDat = (BYTE *)&raw->data.hid.bRawData[0]; for (int i(0); i < raw->data.hid.dwSizeHid; i += 2) { CVersions::DbgMsg(false, "(%d) = %d\r\n", i >> 1, (short)raw->data.hid.bRawData[i]); } } /* joyMidd =128 min/max 0-255 (0)=na (1)=JOYA left/right (2)=JOYA top/bottom (3)=JOYB left/right (4)=JOYB top/bottom (5)=PressB 0-128 (normal 128) (5)=PressA 128-255 (normal 128) (6)=top=4 s=20 w=28 e=12 ne=8 se=16 sw=24 nw=32 */ CWnd::OnRawInput(nInputcode, hRawInput); }