La souris en langage c

kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006 - 18 mars 2006 à 22:04
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 - 30 oct. 2007 à 21:51
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

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 mars 2006 à 01:39
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)
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
19 mars 2006 à 12:58
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
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
19 mars 2006 à 13:13
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 mars 2006 à 15:16
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++
0

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

Posez votre question
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
19 mars 2006 à 16:37
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

++
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
19 mars 2006 à 21:57
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
0
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
19 mars 2006 à 22:15
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...
++
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
20 mars 2006 à 14:33
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
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
20 mars 2006 à 20:21
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
0
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
21 mars 2006 à 12:35
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 */
}
}
0
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
21 mars 2006 à 12:37
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
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
21 mars 2006 à 20:24
pour moi il y a plusieurs champs sur la meme verticales
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
24 mars 2006 à 20:34
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,
----

….,
----

….,
----

……
0
kikaanouar Messages postés 13 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 avril 2006
25 mars 2006 à 21:16
aidez moi svp
0
monssif007 Messages postés 3 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 4 juin 2010
30 oct. 2007 à 20:44
je ss aussi je veux savoir cette methodes trop parceque j'ai un projet a faire dont je veux l utiliser
EMSI DE RABAT
0
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
30 oct. 2007 à 21:51
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...
++
0
Rejoignez-nous