Newsgroup: it.comp.lang.c
Titolo: MOUSE!!!!

Non sono molto pratico di c, ma vorrei sapere come utilizzare il mouse nei
programmini che scrivo.
Vi prego di essere il piů pratici ed esaurienti possibile.
GRAZIE MILLE.
Saluti, Ale.

Vi prego di essere il pių pratici ed esaurienti possibile.
Io ho scritto, tempo fa, un sorgente dimostrativo per DJGPP/Borland
C++, che segue :
/********************************************************************
 * mouse.c - gestione del mouse tramite C                           *
 *                                                                  *
 * NOTE : e' espressamente studiato per sistemi DOS/Windows9x ed e' *
 * compilato con DJGPP.                                             *
 *                                                                  *
 * La funzione mouse_change_color() e' stata aggiunta in un secondo *
 * momento, dato che, per alcune persone, il cursore di default del *
 * mouse e' nero e quindi indistinguibile, in certi contesti, dallo *
 * sfondo del video.                                                *
 ********************************************************************/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
/* elenco delle dichiarazioni delle funzioni usate */
int int86 (int ivec, union REGS *in, union REGS *out);
unsigned mouse_reset                ( void ) ;
    void mouse_cursor_enable        ( void ) ;
    void mouse_cursor_disable       ( void ) ;
unsigned mouse_get_x                ( void ) ;
unsigned mouse_get_y                ( void ) ;
unsigned mouse_left_button_pressed  ( void ) ;
unsigned mouse_right_button_pressed ( void ) ;
    void mouse_change_color         ( unsigned ) ;
/***************************************************/
/* costanti cursor mask */
const unsigned black   = 0x0000 ;
const unsigned blue    = 0x1000 ;
const unsigned green   = 0x2000 ;
const unsigned cyan    = 0x3000 ;
const unsigned red     = 0x4000 ;
const unsigned magenta = 0x5000 ;
const unsigned yellow  = 0x6000 ;
const unsigned white   = 0x7000 ;
unsigned mouse_reset ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 0 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( 
r_out.x.ax
 == 0xffff ) ;
}
void mouse_change_color ( unsigned cursor_mask )
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 0x000a ;
  r_in.x.bx = 0 ;
 
r_in.x.cx
 = 0x8fff ;
  r_in.x.dx = cursor_mask ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
void mouse_cursor_enable ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 1 ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
void mouse_cursor_disable ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 2 ;
  int86 ( 0x33, &r_in, &r_out ) ;
}
unsigned mouse_get_x ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( ( 
r_out.x.cx
 & 0x0FFF) >> 3);
}
unsigned mouse_get_y ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( ( r_out.x.dx & 0x00FF ) >> 3 );
}
unsigned mouse_left_button_pressed ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( r_out.x.bx & 1 );
}
unsigned mouse_right_button_pressed ()
{
  union REGS r_in, r_out ;
 
r_in.x.ax
 = 3 ;
  int86 ( 0x33, &r_in, &r_out ) ;
  return ( (r_out.x.bx & 2 ) >> 1 );
}
int main ()
{
    char c = 0 ;
    unsigned old_x = 0, old_y = 0,
             old_left_pressed = 0, old_right_pressed = 0;
    unsigned x, y, left_pressed, right_pressed ;
    clrscr() ;
    if ( ! mouse_reset() )
    {
       fprintf(stderr, "driver del mouse non installato.");
       exit ( 1 ) ;
    }
    else
    {
       mouse_cursor_enable() ;
       mouse_change_color( blue ) ;
       while ( c != '\x1B' ) /* premi ESC per uscire */
       {
             if ( kbhit() ) c = getch () ;
             x = mouse_get_x () ;
             y = mouse_get_y () ;
             left_pressed = mouse_left_button_pressed () ;
             right_pressed = mouse_right_button_pressed () ;
             if ( ( x != old_x ) || (y != old_y) )
             {
                mouse_cursor_disable() ;
                printf("posizione : (x = %3u , y = %3u)\n", x, y );
                mouse_cursor_enable() ;
             }
             if ( ( left_pressed != old_left_pressed ) ||
                ( right_pressed != old_right_pressed ) )
             {
                mouse_cursor_disable() ;
                printf("pulsanti  : ( %u, %u )\n", left_pressed,
                                                   right_pressed );
                mouse_cursor_enable() ;
             }
             old_x = x;
             old_y = y;
             old_left_pressed = left_pressed;
             old_right_pressed = right_pressed;
       }
       mouse_cursor_disable() ;
    }
    return 0 ;
}
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

C++, che segue :
A me non lo compila... mi dice:
D:\>make b
gcc     b.c   -o b
c:/djgpp/lib/crt0.o(.data+0xc2):crt0.s: undefined reference to `main'
c:/djgpp/lib/libc.a(crt1.o)(.text+0x446):crt1.c: undefined reference
to `main'
make.exe: *** [b] Error 1
D:\>
perchè ?
Joyce
ICQ 10607234
Per una pera, una pera cazzo...
Per affrontare questa lunga giornata dura !

perchè ?
Credo che tu non abbia installato correttamente il djgpp.


Credo che tu non abbia installato correttamente il djgpp.
uhm... dici ? perchč finora mi ha sempre compilato tutto senza
problemi. Cosa non č installato secondo te ?


problemi. Cosa non è installato secondo te ?
Senti, non e' un problema di codice (funziona perfettamente), e' in
fase di linking che ci sono dei difetti. Prova a compilare senza usare
il make, ma semplicemente come gcc prg.c -o prg.exe.


 Senti, non e' un problema di codice (funziona perfettamente), e' in
[..]
Infatti il Borland c++ lo compila senza problemi.
ciao.
-- 
     _
    / 7		
   /_(   
   |_|
   |_|		
   |_|		Cujo®, sometimes referred to as:
   |_| /\
 /\|=|/ /
 \ |_| /         Francesco C.
  ) _  \           e-mail: 
cu...@energy.it
 / |_|  \            ICQ#: 2199793
/  -=-o /
\  /~\_/
 \/      
http://yourweb.energy.it/cujo

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Cujo :
#Andrea Laforgia wrote:
# 
#> Senti, non e' un problema di codice (funziona perfettamente), e' in
#[..]
#
#Infatti il Borland c++ lo compila senza problemi.
Anche il djgpp...
