3.2.3 ΠΑΡΑΘΥΡΑ ΚΑΙ WINDOW MANAGERS


Αφού δημιουργήσουμε το βασικό παράθυρο της εφαρμογής μας (όπως παραπάνω) μπορούμε να ορίσουμε και ορισμένα στοιχεία που έχουν σχέση με τον τρόπο αντιμετώπισης της εφαρμογής μας απο το διαχειριστή παραθύρων (window manager).

Για τον σκοπό αυτό υπάρχουν οι συναρτήσεις XSetWMHints και XSetNormalHints. Η XSetWMHints ορίζει τα σχετικά με το εικονίδιο (icon). Παίρνει τρία ορίσματα, το display, το παράθυρο, και μια δομή τύπου XWMHints. Η δομή XWMHints περιέχει στοιχεία για το σχέδιο του εικονιδίου, τη θέση του στην οθόνη, την αρχική κατάσταση του παραθύρου (κανονική ή iconified), καθώς και ένα πεδίο μάσκα που προσδιορίζει με τον τρόπο που περιγράφηκε παραπάνω τα πεδία της δομής που έχουν οριστεί. Η συνάρτηση XSetNormalHints παίρνει και αυτή τρία ορίσματα display, παράθυρο και μια δομή XSizeHints με την βοήθεια της οποίας, και με αντίστοιχο τρόπο, προσδιορίζει το αρχικό, το μέγιστο και το ελάχιστο μέγεθος του παραθύρου, το βήμα μεταβολής του μεγέθους του και άλλα. Οι ορισμοί των συναρτήσεων και των defines που χρησιμοποιούν βρίσκονται στο include file Xutil.h , το οποίο πρέπει να συμπεριλαμβάνεται στο πρόγραμμα αν θέλουμε να χρησιμοποιήσουμε τις συναρτήσεις.

Παράδειγμα χρήσης των XSetWMHints και XSetNormalHints:


    #include    <Χ11/Xutil.h>
    #include    "theicon"    /* περιέχει το bitmap του icon */
    .
    .
    .
    XSizeHints  sizehints;
    XWMHints    wmhints;
    Pixmap      iconpixmap;
    .
    .
    .
    /* δημιουργούμε την εικόνα του icon από το αντίστοιχο bitmap */
    iconpixmap = XCreateBitmapFromData( display, window,
                        theicon_bits,
                        theicon_width,
                        theicon_height );

    wmhints.icon_pixmap    = iconpixmap;
    /* το παράθυρο ξεκινά σε κανονική μορφή */
    wmhints.initial_state  = NormalState;
    wmhints.flags          = IconPixmapHint | StateHint;

    XSetWMHints( display, newwindow, &wmhints );

    /* προσδιορίζουμε τη θέση, το μέγεθος και το ελάχιστο
             μέγεθος του παραθύρου */
    sizehints.x           = 300;
    sizehints.y           = 200;
    sizehints.width       = 250;
    sizehints.height      = 400;
    sizehints.min_width   = 200;
    sizehints.min_height  = 200;    
    sizehints.flags       = PPosition | PSize | PMinSize;

    XSetNormalHints( display, window, &sizehints );
    .
    .
    .

Στο παραπάνω απόσπασμα κώδικα ορίζουμε το εικονίδιο του παραθύρου, την αρχική του κατάσταση, καθώς επίσης το μέγεθος (αρχικό και ελάχιστο) και τη θέση του έτσι ώστε να μην επέμβει ο window manager.


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