Avoir les positions de la souris en mode graphique sous DOS...

Avoir les positions de la souris en mode graphique sous DOS... - Programmation

Marsh Posté le 06-11-2001 à 16:59:43    

Salut ! Je suis en train de me faire un petit gestionnaire de fichiers en C sous DOS, mode graphique avec Turbo C++ 3.
 
Voici mon initialisation.
 
void init_mode_graphique(void)
{
  /* request autodetection */
  int gdriver = DETECT, gmode, errorcode;
 
  /* initialize graphics and local variables */
  initgraph(&gdriver, &gmode, "" );
 
  /* read result of initialization */
  errorcode = graphresult();
 
  if (errorcode != grOk)
  {
   printf("Erreur graphique : %s\n", grapherrormsg(errorcode));
   printf("Veuillez presser une touche pour quitter..." );
   getch();
  }
}
 
Cela me donne du 640 X 480. J'active la souris. J'aimerais savoir comment je pourrais avoir les coordonnées de la souris. Également, comment faire pour afficher des variables ? PRINTF ne fonctionne pas, et outtextxy ne semble pas permettre l'affichage de variables. Merci d'avance j'en ai vraiment besoin !

Reply

Marsh Posté le 06-11-2001 à 16:59:43   

Reply

Marsh Posté le 06-11-2001 à 17:24:38    

pour formatter le texte sprintf...
 
pour la souris il faut aller dans les interruptions du Dos je ne sais pas faire autrement...

Reply

Marsh Posté le 06-11-2001 à 17:37:01    

Pour récupérer les positions de la souris sour DOS :  
Il faut utiliser l'interruption 33h (ah que de bons souvenir d'arrachage de cheveux...) avec toutes les fonctions.
 
Il faudrait que je vérifie dans la bible mais il me semble que la position de la souris  est lue avec la fonction 03h.
L'initialisation : 00h
Masquer/Afficher le pointeur : 02h et 01h
 
Les valeurs contenues dans les registres sont en "coordonnées virtuelles de souris" ;) et non en pixel, ça serait trop simple...
 
Maintenant petite question : pourquoi persister à faire des appli DOS alors que d'ici un ou 2, DOS aura définitivement disparu ?


---------------
Pipiru piru piru pipiru pi
Reply

Marsh Posté le 06-11-2001 à 17:59:11    

Oui je sais tout ça. Mais c'est comment faire pour convertir les données de la plage virtuelle de déplacement de la souris en véritables coordonnées ( pixels ) ??

Reply

Marsh Posté le 06-11-2001 à 18:07:46    

Tu peux fixer les maxis de la zone virtuelle, mais il ne faut pas qu'elle soit trop grande...

Reply

Marsh Posté le 06-11-2001 à 18:11:55    

Si tu connais, y a rien à ajouter.  
La conversion se fait à la main.


---------------
Pipiru piru piru pipiru pi
Reply

Marsh Posté le 06-11-2001 à 19:45:05    

Ya personne qui peut m'expliquer davantage ?? Je veux avoir 2 variables qui contiennent la position de ma souris, mode graphique sous DOS, 640 X 480. Aidez-moi !

Reply

Marsh Posté le 06-11-2001 à 20:58:52    

Allllllo ?

Reply

Marsh Posté le 07-11-2001 à 00:07:54    

ça va te plaire je pense, c'est un prog qu'on avait fait en 1ère graduat.
En gros la position X du curseur se trouve dans le registre regs.x.cx et y dans regs.x.dx;
 
/**************************************************************
 *            SOURIS2.C : Gestion de la souris                *
 **************************************************************/
#include "header.c"
 
 
union REGS regs;
int x,y;
extern int fin;
 
void test_mouse() /* Teste si une souris est connect?e */
{
 regs.x.ax= 0;      /* Type d'interruption 0= Test */
 int86(0x33, ®s, ®s); /* Interruption 33h pour init. la souris */
 if (!regs.x.ax)          /* Teste si la souris est trouvée */
   {
    printf("Souris non trouv?e\n" );
    exit(1);
    getch();
   }
}
 
void press_Lbutton()
{
 regs.x.ax= 6;      /* Type d'interruption 3= position du curseur */
 regs.x.bx= 0;        /* met le registre à 0 (bouton de gauche) */
 int86(0x33, ®s, ®s); /* Interruption 33h pour init. la souris */
 x= regs.x.cx;   /* CX= la position X de la souris */
 y= regs.x.dx;                  /* DX= la position Y de la souris */
 return;
}
 
void display_mouse()  /* Afiche le curseur de la souris */
{
 regs.x.ax= 1;      /* Type d'interruption 1= Affiche curseur */
 int86(0x33, ®s,®s);
 return;
}
 
void hide_mouse()     /* Cache le curseur de la souris */
{                           /* Type d'interruption 2= cache curseur */
 regs.x.ax=2;
 int86(0x33, ®s, ®s);
}

 

[edtdd]--Message édité par ethernal--[/edtdd]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed