DirectX Input fehler im Fenstermodus



  • Hi

    ich habe jetzt herrausgefunden das wenn ich DirectX Input initialisiere und nutzen möchte ich mein Fenster nicht mehr frei bewegen kann.
    sprich ohne DirectX kann ich über die WindowProc funktion die maus ja immer noch auslesen. und tastatur wird auch klappen.

    bietet DirectX input irgendwelche vorteile, wieso ich es nutzen sollte?
    ohne scheint es grade besser zu gehen bei mir.



  • Sprichst du von DirectInput oder XInput? Was genau ist das Problem? Kann es sein dass du einfach keine Fensterprozedur mehr gemacht hast? (das wäre natürlich falsch)



  • wenn ich diese beiden funktionen vor meiner MainLoop ausführe dann ist mein fenster vollkommen unantastbar. ich kann es nicht verschieben oder sonst etwas.

    void initDInput(HINSTANCE hInstance, HWND hWnd, LPDIRECTINPUT8& din, 
    				LPDIRECTINPUTDEVICE8& dinmouse, LPDIRECTINPUTDEVICE8& dinkeyboard)
    {
    
        DirectInput8Create(hInstance,			
    						DIRECTINPUT_VERSION, 
    						IID_IDirectInput8,	
    						(void**)&din,	
    						NULL);				
    
        din->CreateDevice(GUID_SysKeyboard,		
    						&dinkeyboard,			
    						NULL);		
    	din->CreateDevice(GUID_SysMouse,
    						&dinmouse,
    						NULL);
    
        dinkeyboard	->	SetDataFormat(&c_dfDIKeyboard);
        dinmouse	->	SetDataFormat(&c_dfDIMouse);
    
        dinkeyboard	->	SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
        dinmouse	->	SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
    }
    
    void detect_input(	LPDIRECTINPUTDEVICE8& dinmouse, LPDIRECTINPUTDEVICE8& dinkeyboard,
    					BYTE keystate[], DIMOUSESTATE& mousestate)
    {
        dinkeyboard	->	Acquire();
        dinmouse	->	Acquire();
    
        dinkeyboard	->	GetDeviceState(256, (LPVOID)keystate);
        dinmouse	->	GetDeviceState(sizeof(DIMOUSESTATE), /*(LPVOID)*/&mousestate);
    }
    


  • Kein Wunder denn DISCL_EXCLUSIVE dreht die normalen Windows Messages ab.

    Wenn es nur um Maus und Tastatur geht, solltest du DirectInput sowieso nicht benutzen. Besser einfach die normalen Windows Messages oder, wenn es wirklich sein muss, Raw Input verwenden. Microsoft selbst rät davon ab, DirectInput zu benutzen, wenn es nicht gerade um irgendwelche Joysticks geht...



  • ah!

    vielen dank!
    ich werde dann gleich mal anwenden.


Anmelden zum Antworten