Gestion de la souris dans une fenêtre OpenGL

philmus Messages postés 1 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 1 février 2003 - 1 févr. 2003 à 12:20
frogeraie Messages postés 10 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 18 janvier 2007 - 1 mars 2006 à 12:36
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

cs_Sebest Messages postés 4 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 24 septembre 2004
7 févr. 2003 à 15:26
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!
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
29 nov. 2005 à 19:17
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

...
0
frogeraie Messages postés 10 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 18 janvier 2007
26 févr. 2006 à 17:55
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?
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
26 févr. 2006 à 20:21
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
frogeraie Messages postés 10 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 18 janvier 2007
27 févr. 2006 à 21:09
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?
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
27 févr. 2006 à 21:40
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;
}
0
frogeraie Messages postés 10 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 18 janvier 2007
28 févr. 2006 à 13:19
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.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
28 févr. 2006 à 18:45
Euh fin par pur api j'entend une fonction qui est appele a chaque deplacement ... mais pour cela il faut un vrai code windows..
0
frogeraie Messages postés 10 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 18 janvier 2007
1 mars 2006 à 12:36
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???
0
Rejoignez-nous