Come per la tastiera anche per il mouse DirectInput rappresenta la migliore soluzione soprattutto per la velocità. Tuttavia, a seconda di quello che dovete fare, non tutti useranno questo tipo di controllo. Perchè? Il motivo è che Direct Input non restituisce la posizione in cui si trova lo schermo ma il numero di pixel di cui si è spostata la freccia in una direzione. La cosa è ottima per i Pc dato che la maggior parte dei giochi hanno controlli Mouse e Tastiera ma per alcuni programmi può essere più semplice da usare il sistema standard di VB (o meglio ancora un unione tra i due). Come per la tastiera è necessaria la creazione di un device di controllo.
Public mouse As Device
mouse = New DirectInput.Device(SystemGuid.Mouse)
Come vedete è identico alla tastiera ma è necessario passargli la guida del mouse
I settaggi sono gli stessi: per la modalità background
mouse.SetCooperativeLevel(fhWnd, CooperativeLevelFlags.Foreground Or CooperativeLevelFlags.Exclusive)
mentre per la background (quella consigliata)
mouse.SetCooperativeLevel(fhWnd, CooperativeLevelFlags.Background Or CooperativeLevelFlags.NonExclusive)
Ricordate che fhwnd è un control che deve essere posto uguale al form. Ora settiamo il tipo di dati e attiviamo il device
mouse.SetDataFormat(DeviceDataFormat.Mouse)
mouse.Acquire()
Semplicissimo. Ora leggiamo i dati.
Per leggere i dati è necessario un oggetto
Dim tasti As DirectInput.MouseState
per leggere i dati dal mouse, a differenza della tastiera, occorre usare
tasti=mouse.CurrentMouseState
Ora tasti contiene la situazione in quell'istante
I dati da tasti si leggono così
tasti.x e tasti.y : indicano il numero di pixel di cui si è spostato il mouse dall'ultimo controllo
tasti.z : questo si riferisce alla rotellina del mouse se presente
tasti.GetMouseButtons(n) : riporta un valore che indica se il tasto numero n è premuto. Se 0 il tasto non è premuto, se >0 (in genere 128) il tasto è premuto. Il tasto sinistro del mouse è il numero 0, il destro 1 e quello centrale 2. I numeri proseguono per mouse a più tasti.
Vi lascio gli esempi:
Esempio VB.Net
Esempio C#