Direct Input (Maus) Problem



  • Hi !

    also ich sitze jetzt schon 2 Stunden und probiere den Mausinput hinzubekommen, aber es klappt einfach nicht. Ich rufe in einem Dialog per Button Klick zunächst die Init Funktion auf :

    Init_Mouse(m_hWnd, GetModuleHandle(NULL));
    
    LPDIRECTINPUTDEVICE8 pMouse; 
    LPDIRECTINPUT8 pInput;
    DIMOUSESTATE2 mouseData;
    
    HRESULT SimplyDX::Init_Mouse(HWND m_HND, HINSTANCE hinst)
    {
    	Release_Mouse(m_HND);
    	KillTimer(m_HND, 0); 
    
    	HRESULT h;
    
    	h = DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&pInput, NULL);
    	h = pInput->CreateDevice(GUID_SysMouse, &pMouse, NULL);
    	h = pMouse->SetDataFormat(&c_dfDIMouse);
    	h = pMouse->SetCooperativeLevel(m_HND, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
    
    	h = pMouse->Acquire();
    
    	SetTimer(m_HND, 0, 1000 / 12, NULL);	// 12x pro Sekunde abfragen
    
    	return S_OK;
    
    }
    

    alle Funktionen geben S_OK zurück.

    So nun Frage ich in meinem Dialog im ON_TIMER die Position ab :

    Read_Mouse();
    
    HRESULT SimplyDX::Read_Mouse()
    {
        ZeroMemory(&mouseData, sizeof(mouseData));
        if (FAILED(pMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &mouseData)))
    		return E_FAIL;
    
    	return S_OK;
    
    }
    

    jetzt sollten sich diverse Informationen in der Variablen mouseData befinden.
    Dem ist leider ned so, denn GetDeviceState() liefert imm E_INVALIDARG zurück.

    Ich habe mir das Beispiel vom DirectInput Tutorial zum Mouse Input angeschaut
    und es wirklich Schritt für Schritt genauso gemacht wie dort... nur das es
    bei mir nicht klappt und in dem Tutorial schon, weiß echt nicht worans liegt,
    vielleicht seht ihr den Fehler 😕

    Gruß
    paddy



  • Kann es sein, das die Argumente nicht valid sind?

    Bye, TGGC (Der Held lebt!)



  • dachte ich auch, so deutet ja zumindest der Rückgabewert von GetDeviceState hin, aber es sind genau dieselben Codezeilen wie auch im Demo Tutorial wo es einwandtfrei funktioniert. Ich bin echt ratlos. Es kann doch nicht damit zusammenhängen das ich meine DirectX Funktionen in ner extra Klasse benutze oder ??
    Weil im Demo war einfach per WinAPI alles in eine cpp geklatscht und ich arbeite mit den MFC (wird in den Dialog gerendert)

    Gruß
    paddy



  • Kann ich nicht sagen. Es ist mir leider nicht möglich, deinen gesamten Code mit dem Debugger und den DX DebugRuntimes zu untersuchen.

    Bye, TGGC (Der Held lebt!)



  • Habs gelöst 🙂 indem ich mir die Daten etwas anders besorge :

    DIDEVICEOBJECTDATA data;
    
    HRESULT SimplyDX::Read_Mouse()
    {
        DWORD numElements = 1;
    
        ZeroMemory(&data, sizeof(data));
        if (FAILED(pMouse->GetDeviceData(sizeof(data), &data, &numElements))) return E_FAIL;
    
        return S_OK;
    }
    
    switch (data.dwOfs)
    {
    
    	case DIMOFS_X:	x += data.dwData;
    			break;
    	case DIMOFS_Y:	y += data.dwData;
    	 		break;
    
    }
    

    so gehts einwandtfrei 🙂


Anmelden zum Antworten