[DirectInput] Wechsel Non-Exclusive -> Exclusive und wieder zurück
-
Hi!
Ich bin grade dabei OIS mit u. a.
OIS::Mouse::grab ()
zu erweitern. Die Linux-Version funktioniert einwandfrei. Unter wine funktioniert die Windows-Version auch problemlos. Aber unter (dem "echten") Windows XP sendet die Maus ihre Events weiterhin an das Fenster, auch wenn ich den Exclusive-Mode bereits ausgeschaltet habe - d. h. andere Fenster erhalten keine Events. Wenn ich das Programm starte, funktioniert alles noch, das Problem taucht erst auf, nach dem ich den Exclusive-Mode ein- und wieder ausschalte.Hier der Code:
void Win32Mouse::grab (bool grab) { if (mGrabMouse == grab) return; mMouse->Unacquire (); if (grab) { coopSetting &= ~DISCL_NONEXCLUSIVE; coopSetting |= DISCL_EXCLUSIVE; } else { coopSetting &= ~DISCL_EXCLUSIVE; coopSetting |= DISCL_NONEXCLUSIVE; } if( FAILED(mMouse->SetCooperativeLevel(mHwnd, coopSetting)) ) OIS_EXCEPT( E_General, "Win32Mouse::Win32Mouse >> Failed to set coop level" ); HRESULT hr = mMouse->Acquire(); if (FAILED(hr) && hr != DIERR_OTHERAPPHASPRIO) OIS_EXCEPT( E_General, "Win32Mouse::Win32Mouse >> Failed to aquire mouse!" ); ShowCursor (mHideMouse); mGrabMouse = grab; }
Das ganze dürfte DirectInput 8 sein.