Gestion de la souris dans une fenêtre OpenGL

Signaler
Messages postés
1
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
1 février 2003
-
Messages postés
10
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
18 janvier 2007
-
salut,

je commence à écrire des petits pgs OpenGL; maintenant,
je doit gérer l'entrée (clavier et souris) pour interagir avec
l'utilisateur. Le pb est que je veux savoir comment récupérer la position de la souris (les coordonnées dans une fenêtre OpenGL) lorsque les messages WM_LBUTTONDOWN et WM_LBUTTONUP sont envoyés à cette fenêtre.

MERCI.

9 réponses

Messages postés
4
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
24 septembre 2004

Salut,

Dans main il faut que tu mettes : glutMouseFunc(souris);
et après tu crée une fonction du style :
void souris(int button, int state, int x, int y)
{
if(menuPrinc)
{
// bouton Jouer
if((x>=320) && (x<=480) && (y>=260) && (y<=310) && (button==GLUT_LEFT_BUTTON) && (state==GLUT_DOWN))
{
menuPrinc = false;
menuJouer = true;
}
// etc...
}
}
C'est une partie de mon programme donc les variables menu n'ont pas d'importance!
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
Si tu n'utilise pas glut voici plus simplement

GetCursorPos(&souris);

ou souris est une variable du type POINT donc

POINT souris;

GetCursorPos(&souris);
rrk275

PS: la position de la souris est donc bien entendu dans souris.x et souris.y

...
Messages postés
10
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
18 janvier 2007

Je voudrais changer le rapport des deplacements souris/curseur, cad
lorsque je deplace la souris de 10 cm je voudrais que le curseur ne se
deplace que de 1 cm!

J'ai bien compris, je crois, l'utilisation de getcursorpos preconisee
par rrk275, mais quand j'essaie de reprendre (en les modifiant)
souris.x et souris.y dans setcursorpos cela ne marche pas. Quelqu'un
(rrk275?) aurait-il une idee?
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
Deja Setcursurpos est pour placer la souris donc tu stocke dans souris ta position :
static POINT souris;
GetCursorPos(&souris);
ensuite a chaque deplacement tu recupere la nouvelle valeur dans une autre variable
POINT souris2;
GetCursorPos(&souris2);
et tu divise par 10 la difference ; et tu stocke dans un 3eme buffer
POINT souris3;
souris3.x = souris.x - souris2.x /10 + souris.x;
souris3.y = souris.y - souris2.y/10 + souris.y;
et ensuite tu remet
ton curseur a souris3
SetCursorPos(&souris);

PS: ca utilise l'api windows donc window.h ou windows.h ...
voir :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/cursors/cursorreference/cursorfunctions/setcursorpos.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/cursors/cursorreference/cursorfunctions/getcursorpos.asp
Messages postés
10
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
18 janvier 2007

Ca me plaisait bien ton idee! J'ai ecrit ce bout de code:

#include <windows.h>

int main(int argc, char *argv[])

{

static POINT pt;

POINT pt2;

POINT pt3;

BOOL bContinue = TRUE;

const SHORT Mask = 32768;

while (bContinue)

{

if (GetKeyState(VK_ESCAPE) & Mask)

bContinue = FALSE;

GetCursorPos(&pt);



GetCursorPos(&pt2);



pt3.x = (pt.x - pt2.x)/10 + pt.x;

pt3.y = (pt.y - pt2.y)/10 + pt.y;



SetCursorPos(pt.x,pt.y);

Sleep(10);

}

return 0;

}

Mais IL NE MARCHE PAS.

Dommage.

Tu as une autre idee?
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
bah en fait tu aligne or ce qu'il faut faire c'est une 1ere fois stocker dans pt puis dans pt2 je te montre
#include <windows.h>
int main(int argc, char *argv[])
{
static POINT pt;
POINT pt2;
POINT pt3;
BOOL bContinue = TRUE;
const SHORT Mask = 32768;
GetCursorPos(&pt);//on l'initialise une 1ere fois...
while (bContinue)
{
if (GetKeyState(VK_ESCAPE) & Mask)
bContinue = FALSE;

GetCursorPos(&pt2);

pt3.x = ( pt2.x-pt.x)/10 + pt.x;//me suis trompé de sens ..
pt3.y = (pt2.y- pt.y )/10 + pt.y;

SetCursorPos(pt3.x,pt3.y);//les resultats sont dans pt3 pas dans pt .... me suis encore trompé devais pas etre reveillé...
GetCursorPos(&pt);
//enregistre apres tes calculs mais avant de faire ton sleep... et donc pour le tour d'apres...
Sleep(10);// 10 c'est beaucoup moi je mettrais 2 ou 1 ... et j'utiliserais un code pur API ,
// comme ca des que ca bouge on change ...
}
return 0;
}
Messages postés
10
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
18 janvier 2007

OK ca marche!

Mais le curseur tremble, la trajectoire se fait par a-coup.

C'est quoi un code pur API? Je croyais qu'en utilisant #include <windows.h> j'etais dans l'api windows. Je suis paume.
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
Euh fin par pur api j'entend une fonction qui est appele a chaque deplacement ... mais pour cela il faut un vrai code windows..
Messages postés
10
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
18 janvier 2007

Merci beaucoup pour ton aide, c'est vraiment super!

Encore une question: c'est quoi "un vrai code windows", moi j'utilise
l'ide Visual C++ 2005 Express Edition, je croyais faire du code
windows???