„GTK+ programozás C nyelven” változatai közötti eltérés

Tartalom törölve Tartalom hozzáadva
a Még egy mondat...
típusátalakítás
77. sor:
gtk_main ();
 
Ez szintén egy olyan sor, melyet minden GTK+ -t használó programnak tartalmaznia kell. Erre a sorra érkezve a GTK+ olyan állapotba kerül, amikor már nem jelenít meg több objektumot, hanem a beérkezett események feldolgozásába kezd bele, legyen az billentyűleütés vagy egérmozgatás. Mivel ezt nem kezeltük ebben a kis programban, így nem is foglalkozunk most tovább vele. Az eseményekkel pedig nemsokára úgyis alaposabban foglalkozunkmegismerkedünk.
 
 
== Típusátalakítás (castolás) ==
 
Mint bizonyára észrevehető volt, az ablak mutatóját egy GtkWidget típusú pointerben tároltuk el, pedig mennyivel egyszerübb lett volna, ha az API referencia alapján átírtuk volt a GtkWidget -et GtkWindow -ra. A példa lefordítható így is, de a fordítóprogram két helyen is figyelmeztetést (warning -ot) jelez.<br>
Mi is a GtkWidget valójában? Egy olyan ős-objektumtípus, amely minden GTK+ -beli objektum szülője, tőle van származtatva. Ezért vár ilyen típusú pointert a '''gtk_widget_show ()''' függvény, hiszen neki egyaránt le kell kezelnie azt, ha valaki egy ablakot, egy nyomógombot, esetleg egy cimkét szeretne megjelentetni. A legtöbb alapvető függvény is ilyen típusú mutatót vár, ahol pedig ez nem igaz, ott a mutatót konvertálni kell. Hiszen míg típusátalakítás a program futása során elvégezhető, egy mutató típusát nem lehet változtatni.
A típusátalakítás a GTK+ -ban nagyon egyszerű dolog. Minden widget-típusnak létezik egy párja, melyet az átalakításkor használhatunk, és amely nevét csupa nagybetűvel írjuk. Így lesz a ''GtkWidget'' -ből ''GTK_WIDGET'', és a ''GtkWindow'' -ból ''GTK_WINDOW'', és ehhez hasonlóan a többi widget-típus is. Zárójelben meg kell adni az átalakítandó pointert, és visszatérési értékként megkapjuk az átalakított párját.
És, hogy miért is volt fontos ezt elmondani?
 
== Változtassuk meg az ablak címsorát ==
 
Ott tartunk, hogy elöttünk a nagyon egyszerű program forrása, amelynek a lefordítása és futtatása során az ablak címsorán a nem túl sokatmondó "gtk_01" felirat áll. Változtassuk meg ezt, mondjuk a "Hello!" feliratra. A [file:///usr/share/gtk-doc/html/gtk/GtkWindow.html#gtk-window-set-title GTK+ API]ban történt rövid kutakodás után eredményesen megtaláljuk a '''gtk_window_set_title ()''' függvényt, amely megfelelőnek tűnik számunkra. Paraméterként szükséges a megváltoztatni kívánt ablak pointere, GtkWindow* típusra alakítva, illetve a módosított címsor szövege. Mivel mi nagyon helyesen az ablak pointerét egy GtkWidget* típusú pointerbe tároltuk el, ezért típusátalakítást kell végezni.
A fentebb vázolt egyszerű szabály szerint szúrjuk be az alábbi sort a példaprogram forrásába, az ablak létrehozása után (gtk_window_new), de az ablak megjelenítése elött (gtk_widget_show):
 
gtk_window_set_title (GTK_WINDOW (main_window), "Hello!");
 
Fordítsuk újra le a programot az ott írt módon, índitsuk el, és láthatjuk, hogy sikerült.