Directx tuto 9 : directinput la souris ....

Soyez le premier à donner votre avis sur cette source.

Vue 15 609 fois - Téléchargée 973 fois

Description

Pour ce 9eme tuto, je vous propose la gestion de la souris, sous directx, je ne repars bien sur pas du début, mais je ne donnerais ici que ce qui est nécessaire. J'ai mis comme toujours une source accompagnée de ses commentaires.

Source / Exemple :


'Dans ce 9e tutoriel, je pars sur la base que vous savez afficher une image par Direct Draw.

' Donc, partons dans le vif du sujet. Il vous faut donc avoir déclaré DirectX, DirectDraw, normalement. Ensuite vous rajoutez ces variables :

Public dInput As DirectInput         ' Déclaration de DirectInput pour relever sous DirectX les entrées.
Public diMouse As DirectInputDevice   ' Ici un device pour DirectInput
Public SourisX As Long     ' Les coordonnées de la souris en X
Public SourisY As Long     ' Les coordonnées de la souris en Y

' Declaration d'une surface pour l'image du curseur
Public CurseurSouris As DirectDrawSurface7
Dim ddsdCurseurSouris As DDSURFACEDESC2
' Couleur transparente
Dim ck As DDCOLORKEY

Ensuite il faut initialiser tout ce petit monde :

Juste 5 petites lignes pour pouvoir utiliser la souris.

Set dInput = dx.DirectInputCreate()  ' Initialisation de DirectInput
Set diMouse = dInput.CreateDevice("Guid_sysMouse")   ' Création du device de type Mouse (souris)
diMouse.SetCommonDataFormat DIFORMAT_MOUSE     ' Format de la souris
' on définit un niveau de coopération tel qu'il soit ou exclusif ou en premier plan
diMouse.SetCooperativeLevel Form1.hWnd, DISCL_EXCLUSIVE Or DISCL_FOREGROUND
diMouse.Acquire   ' Dernière chose on capture la souris

Pour ce qui ne se rappelle pas, on définit notre image de curseur et notre colorkey (couleur transparente) comme ceci :

' ColorKey
ck.low = RGB(255, 255, 255)
ck.high = RGB(255, 255, 255)

'Image curseur
Set CurseurSouris = dd.CreateSurfaceFromFile(App.Path & "\curseur.bmp", ddsdCurseurSouris)
CurseurSouris.SetColorKey DDCKEY_SRCBLT, ck

Nous allons utilisé une fonction Souris qui nous permettra d'affiché le curseur et de capturé les appuies sur les boutons :

' Déclaration de la fonction
Public Function Souris()

' Ici on initialise la récupération du statut de la souris :
' Déclaration d'une variable pour récupérer le statut de la souris
Dim MouseState As DIMOUSESTATE
' Récupération du statut de la souris dans notre variable
diMouse.GetDeviceStateMouse MouseState

' Ensuite on définit des limites à ne pas dépasser pour pas que le curseur dépasse les bords de l'écran
' (SourisX + MouseState.x) >= 0)    Si la position de la souris en x est supérieur ou égal à 0
' (SourisX + MouseState.x) < (640 - LargeurCurseur)   Si la position de la souris est inférieur à la largeur de l'écran moins la largeur de notre curseur
' (SourisY + MouseState.y) >= 0)   Si la position de la souris en y est supérieur ou égal à 0
' (SourisY + MouseState.y) < (480 - HauteurCurseur)) Si la position de la souris en y est inférieur à la hauteur de l'écran moins la hauteur de notre curseur

' Bloque conditionnel : 
If ((SourisX + MouseState.x) >= 0) And ((SourisX + MouseState.x) < (640 - 32)) And ((SourisY + MouseState.y) >= 0) And ((SourisY + MouseState.y) < (480 - 51)) Then
    ' Calcul de la position de la souris
    SourisX = SourisX + MouseState.x   ' Ajout de la nouvelle position à l'ancienne, car au 'départ SourisX = 0  donc 0 + 10 vers la droite = 10 mais si on ne mettait pas l'addition sa 
'Ferais 0 + 10 =10
'deuxième mouvement SourisX=10 mais sans l'addition SourisX passe à 0 donc boucle de non 
«-déplacement.
    SourisY = SourisY + MouseState.y    ' Ajout de la nouvelle position à l'ancienne, car au 
'départ SourisY = 0
End If

' Appuis sur un des boutons de la souris, donc on utilise MouseState.buttons()
' si buttons(0) c'est bouton gauche, si buttons(1)  = droite, si buttons(2) = centre

If MouseState.buttons(0) <> 0 Then     ' Si on appuis sur le bouton de gauche
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite  ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Gauche", False   ' On affiche le texte  : Gauche
End If
If MouseState.buttons(1) <> 0 Then     ' Si on appuis sur le bouton du milieu
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite   ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Droite", False  ' On affiche le texte  : Droite
End If
If MouseState.buttons(2) <> 0 Then    ' Si on appuis sur le bouton de droite
Backbuffer.BltColorFill ddRect(0, 0, 0, 0), vbWhite    ' On affiche le fond en blanc
Backbuffer.DrawText 10, 10, "Centre", False  ' On affiche le texte  : Centre
End If

' On affiche dans le backbuffer l'image de la souris.
Backbuffer.BltFast SourisX, SourisY, CurseurSouris, ddRect(0, 0, 0, 0), DDBLTFAST_SRCCOLORKEY
End Function

Voila avec ceci vous pouvais afficher un curseur et récupéré l'appui sur les boutons.

Conclusion :


Si vous avez un problème d'initialisation de DirectDraw reportez-vous soit au tuto précédent que j'ai fait sur DirectDraw, soit à la source, mais attention dans la source seulement la partie DirectInput est commentée.

Derrière chose, DirectInput sert aussi pour le Joystick et le clavier, j'ai déjà expliqué le clavier dans un des tuto précédent.

Bon code, et n'oublier pas que je suis là pour toute remarque.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
jeudi 26 mai 2011
Statut
Membre
Dernière intervention
26 mai 2011

Aucune idée, désolé. Je suis déjà ravi d'avoir trouvé hihi! Je répands l'évangile sur les autres sites...
Messages postés
20
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
15 mars 2008

Ce n'est pas trop tard, je n'avais toujours pas trouvé la solution.
Merci pour ce petit soft c'est exactement ce qu'il me fallait mais... La source est elle disponible?
Messages postés
3
Date d'inscription
jeudi 26 mai 2011
Statut
Membre
Dernière intervention
26 mai 2011

Je me suis trompé dans la copie du lien... et un belle faute de grammaire en plus! donc on ne sait jamais! voici la rustine:
http://www.libellules.ch/dotclear/index.php?post/2010/05/25/The-Maxifier
Bien à vous.
Messages postés
3
Date d'inscription
jeudi 26 mai 2011
Statut
Membre
Dernière intervention
26 mai 2011

Peut être un peu tard, mais on ne sais jamais (je suis bien tombé sur cette page avant de trouver LA solution!):
http://www.vbfrance.com/codes/DIRECTX-TUTO-DIRECTINPUT-SOURIS_26339.aspx
Bon courage!
Messages postés
20
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
15 mars 2008

Oui, j'ai tout regardé du coté des options a décocher ca ne fonctionne pas.
Je vais me pencher sur les hook des mouvements de la souris, merci de ton aide
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.