2016-04-26 5 views
1

Je suis en train d'implémenter la saisie de la souris en utilisant l'entrée brute. L'inconvénient est que le pointeur balistique n'est pas inclus. Malheureusement, le site Web de Microsoft traitant de ce sujet n'est plus en ligne. En outre, je ne trouve pas de fonction permettant de récupérer l'accélération du pointeur dans Windows (peut-être que je suis trop stupide).Entrée brute et accélération du curseur

Comment puis-je obtenir l'accélération et comment l'utiliser pour calculer la nouvelle position intuitive du curseur par rapport au décalage x et y brut?

EDIT:

Donc, en ce qui concerne la documentation IInspectable a écrit dans son commentaire, le code de calcul de l'accélération serait:

long xPos = raw->data.mouse.lLastX; 
    long yPos = raw->data.mouse.lLastY; 

    int speed; 
    int acceleration[3]; 
    SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); 
    SystemParametersInfo(SPI_GETMOUSE, 0, acceleration, 0); 


    if (acceleration[2] > 0 && acceleration[0] < abs(raw->data.mouse.lLastX)) 
     xPos *= 2; 
    else if (acceleration[2] > 1 && acceleration[1] < abs(raw->data.mouse.lLastX)) 
     xPos *= 2; 

    if (acceleration[2] > 0 && acceleration[0] < abs(raw->data.mouse.lLastX)) 
     yPos *= 2; 
    else if (acceleration[2] > 1 && acceleration[1] < abs(raw->data.mouse.lLastX)) 
     yPos *= 2; 


    xPos *= round((float)speed/10.0f); 
    yPos *= round((float)speed/10.0f); 

Ai-je raison, est-ce comment ajouter une accélération à la entrée de souris brute? Étrange, c'est que lorsque je récupère l'accélération avec SystemParametersInfo et SPI_GETMOUSE les valeurs restent à {6, 10, 1} même si je change l'accélération du pointeur dans Windows.

+0

Vous interrogez le Accélération de la souris en appelant [SystemParametersInfo] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947.aspx) avec un paramètre 'SPI_GETMOUSE'. Des informations sur l'accélération de la souris sont disponibles dans la section * Notes * de la documentation [mouse_event] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260.aspx). – IInspectable

Répondre

0

J'ai une seule fonction qui fait cette mise à l'échelle, pour un delta arbitraire (dq), et elle est similaire à la vôtre. Cependant, mon expérience est que l'accélération Windows et la mise en valeur du pointeur, en particulier quand il y a prise de conscience DPI à prendre en compte, fait la correspondance entre RAWINPUT et quel WM_MOUSEMOVE correspondant verrait, très délicat ...

int ApplyMouseAcceleration(int dq) 
{ 
    auto absdq{ abs(dq) }; 
    // based on https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx 
    if (MouseAccelerationparams[0] && absdq > MouseAccelerationparams[0]) 
    { 
     dq *= 2; 
     if ((absdq > MouseAccelerationparams[1]) && (MouseAccelerationparams[2] == 2)) 
     { 
      dq *= 2; 
     }          
    } 
    dq = (dq*MouseSpeed)/10; 
    return dq; 
} 
+0

Actuellement; le paramètre "mouvement de pointeur amélioré" dans Windows est le coupable; il semble introduire un autre ensemble de modificateurs quelque part qui ne sont * pas * la courbe d'accélération que vous obtenez de SPI_GETMOUSE etc. Je ne peux pas trouver où cela est documenté, alors peut-être que ce n'est pas ... :( – SonarJetLens