DInput - Maus



  • Hallo,

    ich habe gerade ein Problem mit meiner Maus. Und zwar habe ich zB etwas auf den Bildschirm gezeichnet, was sich um die eigene Achse dreht. Bewege ich nun die Maus, hört die Bewegung des gezeichneten Objekts auf - bis ich die Maus wieder still halte.
    Hat jemand eine generelle Idee, woran das liegen könnte?

    Danke im Voraus!



  • Hm, zugegebenermaßen habe ich mich vielleicht nicht präzise genug ausgedrückt...

    Da mein Problem weiterhin besteht, frage ich einfach nochmal 😃

    hier kurz mein Code:

    Vor der WinMain Schleife:

    DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&pdin,NULL);
    pdin->CreateDevice(GUID_SysMouse, &pdinmouse, NULL);
    pdinmouse->SetDataFormat(&c_dfDIMouse);
    pdinmouse->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND);
    pdinmouse->Acquire()
    

    In jedem Schleifendurchgang wird folgendes gemacht:

    ZeroMemory(&mousestate,sizeof(mousestate));
    pdinmouse->Acquire();
    pdinmouse->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&mousestate);
    if(mousestate.rgbButtons[0] & 0x80)
      //mach irgendwas
    
    //danach zB Zeichnen der Objekte (das oben erwähnte sich drehende Objekt)
    

    Nach der WinMain Schleife:

    if(pdinkeyboard)
      pdinkeyboard->Unacquire();
    if(pdinmouse)
      pdinmouse->Unacquire();
    SAFE_RELEASE(pdinkeyboard);
    SAFE_RELEASE(pdinmouse);
    SAFE_RELEASE(pdin);
    

    Noch eine kurze Erläuterung des "Problems":
    Ich gebe ein 3D Objekt aus, welches sich um seine eigene Achse dreht solange ich die Maus nicht bewege. Die Drehung des Objekts hört auf, sobald ich die Maus einfach nur hin und her bewege.

    Habe ich im Code etwas falsch gemacht oder verstehe ich das Prinzip falsch?
    Klärt mich bitte auf 😕



  • Acquire musst du nicht in jedem Frame aufrufen. Einmal sollte reichen, und dann wieder, wenn dir die Maus "weggenommen" wurde.



  • Ja, das habe ich schon versucht. Funktioniert leider auch nicht.. trotzdem Danke fürs ansehen!

    Hat sonst noch jemand eine andere Idee, woran das liegen kann?


Anmelden zum Antworten