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ßen

    Testkö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);
    }
    

Anmelden zum Antworten