J'ai perdu beaucoup d'heures à essayer de saisir exclusivement la souris dans mon application et de la relâcher.Récupérer exclusivement/libérer la souris dans l'application (Windows, C++)
En ce moment, je l'attrape correctement: le curseur de la souris disparaît de l'écran et je peux lire ses propriétés très bien.
Cependant, je ne peux pas le libérer correctement! Le curseur de la souris réapparaît à l'écran mais aucune autre application ne reçoit plus de clics de souris; sauf le mien.
Voici le code problématique:
IDirectInputDevice8* mMouse;
void Win32Mouse::grab(bool grab)
{
if (mGrabMouse == grab)
return;
mMouse->Unacquire();
if (grab)
{
// grab = true; seems to work fine
coopSetting &= ~DISCL_BACKGROUND;
coopSetting &= ~DISCL_NONEXCLUSIVE;
coopSetting |= DISCL_FOREGROUND | DISCL_EXCLUSIVE;
}
else
{
// grab = false; this surely isn't working as it should
coopSetting &= ~DISCL_FOREGROUND;
coopSetting &= ~DISCL_EXCLUSIVE;
coopSetting |= DISCL_BACKGROUND | DISCL_NONEXCLUSIVE;
}
if(FAILED(mMouse->SetCooperativeLevel(mHwnd, coopSetting))) {
std::cout << "Failed to set coop level\n";
}
HRESULT hr = mMouse->Acquire();
if (FAILED(hr) && hr != DIERR_OTHERAPPHASPRIO) {
std::cout << "Failed to aquire mouse!\n";
}
mGrabMouse = grab;
}
Peut-être le problème que j'ai Windows7 ?!