3.4.3 ΓΕΓΟΝΟΤΑ ΠΟΝΤΙΚΙΟΥ


Στην περίπτωση που ένα γεγονός προσδιοριστεί ως πάτημα (άφεση) κουμπιού ή μετακίνηση του ποντικιού χρειάζεται επιπλέον επεξεργασία για τον πλήρη προσδιορισμό του. Τις αναγκαίες πληροφορίες δίνουν οι δομές xbutton (τύπου XButtonEvent) και xmotion (τύπου XMotionEvent) αντίστοιχα, πεδία της XEvent.

Έτσι το πεδίο xbutton.button της XEvent προσδιορίζει το κουμπί που πατήθηκε. Μπορεί να πάρει τις τιμές Button1, Button2, Button3, Button4 και Button5 (defines στο Χ.h). Τα Χ Windows υποστηρίζουν ποντίκια με εώς πέντε κουμπιά. Τα πεδία xbutton.x και xbutton.y προσδιορίζουν τη θέση του ποντικιού στο παράθυρο όταν πατήθηκε το κουμπί.

Τα πεδία xmotion.x και xmotion.y προσδιορίζουν τη θέση του ποντικιού σε περίπτωση γεγονότους MotionNotify. Το πεδίο xmotion.state (όπως και το αντίστοιχο xbutton.state) προδιορίζει αν κατά την κίνηση του ποντικιού ήταν πατημένο κάποιο κουμπί του ή κάποιο ειδικό πλήκτρο του πληκτρολογίου. Για το σκοπό αυτό ορίζονται στο Χ.h οι σταθερές:

Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask για τα κουμπιά του ποντικιού και ShiftMask, LockMask, ControlMask, Mod1Mask για το πλήκτρο Shift, το Caps Lock, το Control και το πλήκτρο Meta.

Έτσι η συνάρτηση buttonpressed που αναφέρθηκε παραπάνω μπορεί να υλοποιηθεί ως εξής:

    int buttonpressed( XEvent *event )
    {
        int quit = 0;
    
        switch( event->xbutton.button )
        {
            case Button1:
                printf("Left mouse button pressed at %d,%d\n",
                    event->xbutton.x, event->xbutton.y );
                break;
            case Button2:
                printf("Middle mouse button pressed at %d,%d\n"
                    ,event->xbutton.x, event->xbutton.y );
                break;
            case Button3:
                printf("Right button pressed, quiting\n" );
                quit++;
                break;
        }
        return quit;
    }

[prev] [up] [next] [contents] [index]