La souris en langage c

Signaler
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006
-
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
-
slt je suis une etudiante dans une ecole d ingenieurie en informatique et je demande votre aide j ai un projet en langage c 'menu deroulant ' et je vx bien le faire avec la souris si quelqu un parmis vous a deja la syntaxe je serai vraiment heureuse de votre aide merci bcp

16 réponses

Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Salut, je suis pas sûr de comprendre en quoi consiste ton projet ... Une des API de la souris est GetCursorPos() (structure POINT utilisable), GetWindowFromPoint() qui peut être utile.

Sinon donne nous plus de détail

A+ Bonne prog


if (CPossible)
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

merci bcp pour votre reponse mais j ai pas bien compris ce que je dois faire premierement moi je travail sur langage c et je ne trouve que ces biblio stdio.h et conio.h math .h stdlib.h et deux autre alors j ai fais des recherches sur le net et j ai trouver des programme mais il sont avec des biblio que je connai pas windows.h ....
j ai poser la question a mon prof il m a dit que la syntaxe de la souris en langage c se base sur l assembleur et mnt vraiment je ne sais quoi faire il me reste 1 semaine pour la validation et c mon premier projet
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

pour mon projet c un petit projet : un menu deroulant c a d des fenetre et qu on t on clic sur l une elle change de couleur et des des sous menu s addiche et la meme chse si on lic sure un sous menu il change de couleur c'est a peu pres ca :

remarque : on peux le faire avec le clavier grace au bouton (haut ,bat ,a gauche ,a droit)mais je vx bien le faire avec la souris

ici la souris a cliquer sur le champ 1

Champ 1,
Champ 2,
Champ3,
Champ 4,
Champ 5,
----

sous menu1

sous menu 2

……

…..


merci bcp bcp pour votre patience
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
J'ai vu posé dans les sources il y a peu un tel exemple d'antiquité, fouille un peu.

Faudra indiquer à ton prof qu'il y a plus de 15 ans que ceci est obsolète, c'est au system hote de prendre en charge les périphs au bas niveau.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Bonjour
Je ne sais pas si c'est vraiment utile pour ton cas, voici ce que j'utilise => http://www-ipst.u-strasbg.fr/pat/program/graphic/souris.tc directement dans la source, le tout étant assez bien détaillé... (pour gestion de la souris sous le DOS mode texte/graphique, c'est complétement dépassé, mais ca marche très bien )

Sinon, j'ai d'autres adresses sur la gestion de la souris:
> http://www.alrj.org/docs/hardware/souris/SOURIS.htm
> http://www.brackeen.com/home/vga/mouse.html

++
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

merci bcp pour votre reponse pour monsieur spoolega j ai un petit probleme lors de l execution de ce programmehttp://www-ipst.u-strasbg.fr/pat/program/graphic/souris.tc un msg d 'erreur qui s affiche c'est : undefined symbole main in module c0.asm ;
je crois qu il faut un void main ( ) mais si c le cas qu'elle sont les appel que je dois faire
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Re

Il faut bien évidemment rajouter la main( )
voici a quoi elle ressemble (vite fait dsl j'ai peu de temps )

void main(void)
{
int nb_but;


clrscr();


sinit(&nb_but); /* initialisation de la souris */
printf("il y a %i boutons sur la souris", nb_but);


smontre_curs(); /* on montre le curseur */


getch(); /* pour quitter a l'appuis d'une touche */
}

ceci fonctionne en mode texte, il faut rajouter au début :
#include <conio.h>
#include <stdio.h>

sinon le principe est toujous le même tu passes l'adresse des variables aux fonctions et puis voilà.
En mode graphique, ca passe aussi le curseur se "transforme" en flèche (comme sous Win) a la place du pavé en mode texte (ne pas oublier #include <graphics.h>)

Le reste des fonctions est bien détaillé, si besoin d'aide...
++
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

et pour mon projet vous pouvez m aider je vx le faire en mode graphe et si je clique sur le champs1 alors il affiche les sous menu et avec l echange de choulour du case ou il y a le curseur


et je vous remerci infiniment pour votre aide
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

j ai une question pour monsieur spooliga j ai bien suivi ton aide et ca marcher tres bien je parle de la souris mais vous pouvez m aider je vx bien au lieu d avoir un peit careau je vx bien avoir un fleche si c possible
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Bonjour

Voilà un programme de gestion de la souris (différent de l'autre, mais qui marche tout aussi bien). Il gere la souris en mode graphique, ainsi que le déplacement d'un rectangle(quelques problèmes de trainées, mais bon...).
Il faut faire attention a la fonction void init(void); surtout la ligne:
initgraph(&gdriver, &gmode, "c:\\tc3\\bgi");
Car le chemin c:\\tc3\\bgi n'est surement pas bon dans ton cas, c'est pour aller chercher les fichers *.bgi pour la gestion du mode graphique (ca dépend peut être du compilo, j'utilise TC3 ...)
Donc voilà pour le code.

Sinon pour ton projet, moi, je testerais la position du curseur x et y dès que l'on clique sur le bouton 1 par exemple, et pour chaques champs tu lui donne un identifiant (de 0 à 4). Le champ 0 va du pixel X : 0 à 49, le champ 1 du pixel X : 50 à 99 ainsi de suite...
Un simple switch case est peut être une bonne solution (simple en tout cas.)

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <DOS.H>
#define MOUSE 0x33


void init(void);
void ActivMouse(void);
int ResetMouse(void);
void ShowMouse(void);
void HideMouse(void);
void ReadMouse(int *v,int *h,int *but);


struct menu{
int x, y;


};


void main (void)
{
struct menu menu1; /* structure sur les menus */
int Ver,Hor,But;


init(); /* appelle et initialisation du mode graphique */


menu1.x = 50;
menu1.y = 50;


rectangle(menu1.x,menu1.y, menu1.x+70, menu1.y+20);


ActivMouse(); /* initialisation de la souris */
ShowMouse(); /* on la montre a l ‚cran */


do{
ReadMouse(&Ver,&Hor,&But);
printf("Ver=%i Hor=%i But=%i x=%i y=%i\r", Ver, Hor, But, menu1.x, menu1.y);
if(But==1)
if(Ver>menu1.x && Ver<menu1.x+70 && Hor>menu1.y && Hor<menu1.y+20)
{
do{


ReadMouse(&Ver,&Hor,&But);


menu1.x = Ver;
menu1.y = Hor;


rectangle(menu1.x, menu1.y, menu1.x+70, menu1.y+20);


}while(But==1);


HideMouse();
cleardevice();
rectangle(menu1.x, menu1.y, menu1.x+70, menu1.y+20);
ShowMouse();
}
/* pour quitter=> Appuyer sur les 2 boutonsde la souris en mˆme temps */
/* Leger pb=> Alterner 2 & 3 si pb... */
}while(But!=3);



closegraph(); /* fermeture du mode graphique */
}


void ActivMouse(void)
{
_AX=32;
geninterrupt(MOUSE);
}
int ResetMouse()
{
_AX=0;
geninterrupt(MOUSE);
return(_AX);
}


void ShowMouse()
{
_AX=1;
geninterrupt(MOUSE);
}


void HideMouse()
{
_AX=2;
geninterrupt(MOUSE);
}


void ReadMouse(int *v,int *h,int *but)
{
int temp;
//int cas,i,j;


_AX=3;
geninterrupt(MOUSE);
temp=_BX;
*but=temp;
*v=_CX;
*h=_DX;


}


void init(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
/* gestion de la souris */


/* initialize graphics mode */
initgraph(&gdriver, &gmode, "c:\\tc3\\bgi");


/* read result of initialization */
errorcode = graphresult();


if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}
}
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Pour le projet, même pas la peine de tester la position Y en fait, sauf si il y a plusieurs champs sur la même verticales
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

pour moi il y a plusieurs champs sur la meme verticales
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

jpour la souris mnt ca marche mais je vx l utiliser dans mon projet c a d je vx dire par exemple si le curseur dans la zone entre x1 et x2 et y1 et y 2 faire un traitement comment je px le faire c tres urgent car je dois le rendre au max le lundi merci 10000 fois

Champs 1 (ici c dans cette zone ou se trouve le curseur),
Chanps2,
Champ3,
Champ4,
Champ5,
----

Sous menu1,
,
----

Sous menu 2,
----

….,
----

….,
----

……
Messages postés
13
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 avril 2006

aidez moi svp
Messages postés
3
Date d'inscription
vendredi 30 mars 2007
Statut
Membre
Dernière intervention
4 juin 2010

je ss aussi je veux savoir cette methodes trop parceque j'ai un projet a faire dont je veux l utiliser
EMSI DE RABAT
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Bonjour,
difficile de t'aider monssif007, surtout avec si peu d'info...
Si le problème est la gestion de la souris, je vois qu'a l'époque j'ai donné quelques liens / bout de code.
Sinon euh... :s lance toi dans quelque chose, et analyse les difficultés...
++