XtArgVal
(long
όπως ορίζεται προηγουμένως). Η συμβολοσειρά name καθορίζει
την παράμετρο της οποίας θέτουμε την τιμή ενώ το δεύτερο πεδίο (value)
καθορίζει την τιμή της παραμέτρου. Η συμβολοσειρά name λαμβάνει
προκαθορισμένες τιμές, οι οποίες ορίζονται στα include files του Xtoolkit
και του Motif. Οι τιμές αυτές αρχίζουν πάντα από XtN
και XmN
αντίστοιχα. Το
δεύτερο πεδίο της Arg
μπορεί να λάβει αριθμητικές τιμές, συμβολοσειρές ή
προκαθορισμένες τιμές, οι οποίες ορίζονται και αυτές στα include files.
Οι παράμετροι που ορίζονται με την δομή Arg
μπορούν να είναι η θέση, το
μέγεθος ή άλλα ιδιαίτερα χαρακτηριστικά του widget. Υπάρχουν δύο τρόποι για
την ανάθεση των τιμών στην δομή Arg
, ο στατικός και ο δυναμικός. Ο στατικός
είναι να οριστούν οι τιμές της δομής εξαρχής με μια δήλωση της μορφής:
Arg wargs[] = { { XtNx, 10 }, { XtNy, 20 }, { XtNwidth, 80 }, { XtNheight, 40 } };Ο παραπάνω τρόπος είναι βολικός όταν οι τιμές των παραμέτρων σταθερές (αριθμοί ή defines αριθμών). Υπάρχουν όμως περιπτώσεις που είναι δείκτες (pointers). Τότε απαιτείται η απόδωση των τιμών στη δομή Arg να γίνει δυναμικά κατά την λειτουργία του προγράμματος. Για το σκοπό αυτό υπάρχει η μακροεντολή
XtSetArg
, η οποία παίρνει τρεις παραμέτρους, τη δομή Arg
και τις
τιμές των δύο μελών της:
XtSetArg( Arg arg, String name, XtArgVal value );Ένα παράδειγμα χρήσης της
XtSetArg
φαίνεται στο επόμενο παράδειγμα:
Arg wargs[3]; . . . XtSetArg(wargs[0], XtNx , 80); XtSetArg(wargs[1], XtNy , 40); XtSetArg(wargs[2], XmNentryClass , xmToggleButtonWidgetClass);Έχοντας ορίσει τις τιμές της δομής Arg μπορούμε να καλέσουμε την
XtCreateWidget
για την δημιουργία του widget. Η συμπλήρωση της δομής Arg
δεν
είναι απαραίτητη, αν δεν περαστεί στην XtCreateWidget
τότε το widget
δημιουργείται χρησιμοποιώντας τις τυπικές τιμές. Στο παρακάτω παράδειγμα
χρησιμοποιούμε την XtCreateWidget
για τη δημιουργία ενός push button.
Θεωρούμε ότι έχουμε ήδη ορίσει την wargs
(όπως παραπάνω):
Widget widget; widget = XtCreateWidget( toplevel, xmPushButtonWidgetClass, wargs, XtNumber(wargs));Στην παραπάνω κλήση της
XtCreateWidget
χρησιμοποιούμε και την μακροεντολή
XtNumber
η οποία επιστρέφει το πλήθος των δομών Arg που περνάμε στην
XtCreateWidget
. Η XtNumber
είναι ιδιαίτερα χρήσιμη γιατί μας απαλλάσσει από
την ανάγκη να θυμόμαστε το μέγεθος του πίνακα δομών Arg
που εισάγουμε στην
XtCreateWidget
.
Το Xtoolkit προσφέρει δύο ακόμα συναρτήσεις που σχετίζονται με τη δομή Arg
,
τις XtSetValues
και XtGetValues
που ορίζονται ως εξής:
XtSetValues( Widget widget, Arg *wargs, int nargs); XtGetValues( Widget widget, Arg *wargs, int nargs);Και οι δύο συναρτήσεις λαμβάνουν ως ορίσματα ένα
widget
, ένα δείκτη σε μια
δομή Arg
(ή πίνακα δομών Arg
) και το πλήθος των δομών Arg
. Χρησιμοποιούνται
να αλλάξουν (η XtSetValues
) ή να πάρουν (η XtGetValues
) τα χαρακτηριστικά
ενός widget που έχει ήδη δημιουργηθεί. Για να πάρουμε τα χαρακτηριστικά που
θέλουμε από ένα widget, με τη χρήση της XtGetValues
, βάζουμε στο πεδίο name
της δομής Arg
το όνομα του χαρακτηριστικού που θέλουμε να ελέγξουμε, ενώ στο
πεδίο value
το δεικτή σε μια μεταβλητή στην οποία θέλουμε να γραφεί το
αποτέλεσμα. Στο επόμενο παράδειγμα χρησιμοποιούμε την XtGetValues
για να
μάθουμε τη θέση ενός widget:
Arg wargs[2]; int xpos, ypos; . . . XtSetArg(wargs[0], XtNx , &xpos); XtSetArg(wargs[1], XtNy , &ypos); XtGetValues(widget, wargs, XtNumber(wargs)); printf("Widget is located at position x=%d, y=%d\n", x,y);