¾Õ¼ÀÇ ¿¹Á¦¿¡¼ ÁÖ¸ñÇß°ÚÁö¸¸ ¼³¸íÀÌ ÇÊ¿äÇÑ °ÍÀÌ Á» ÀÖ´Ù. gint, gchar µîÀº °¢°¢ int¿Í char¿¡ ´ëÇÑ typedefµéÀÌ´Ù. ÀÌ°ÍÀº °è»êÀ» ÇÒ ¶§ °£´ÜÇÑ ÀÚ·áÇüµéÀÇ Å©±â¿¡ ´ëÇÑ ÁöÀúºÐÇÑ ÀÇÁ¸¼ºÀ» ÇÇÇϱâ À§ÇÑ °ÍÀÌ´Ù. 64ºñÆ®ÀÇ ¾ËÆĵç 32ºñÆ®ÀÇ ÀÎÅÚÀ̵ç "gint32"´Â Ç÷§Æû¿¡ °ü°è¾øÀÌ 32ºñÆ® Á¤¼ö·Î typedefµÇ¾î ÀÖ´Â °ÍÀÌ ÁÁÀº ¿¹°¡ µÉ °ÍÀÌ´Ù. ÀÌ typedefÀº »ó´çÈ÷ Á÷°üÀûÀÌ´Ù. ±×µéÀº ¸ðµÎ glib/ glib.h¿¡¼ Á¤ÀǵǾî ÀÖ´Ù(ÀÌ°ÍÀº gtk.h¿¡¼ Æ÷ÇÔ½ÃÅ°°Ô µÈ´Ù.). ´ç½ÅÀº ¶ÇÇÑ ÇÔ¼ö°¡ GtkObject¸¦ ºÎ¸¦ ¶§ GtkWidgetÀ» ÀÌ¿ëÇÏ´Â °Í¿¡µµ ÁÖ¸ñÇÒ °ÍÀÌ´Ù. GTK´Â °´Ã¼ÁöÇâÀûÀ¸·Î ¼³°èµÈ °ÍÀÌ°í, widgetÀº ÇϳªÀÇ objectÀÌ´Ù.
gtk_signal_connectÀÇ ¼±¾ðÀ» ¶Ç ´Ù¸£°Ô »ìÆ캸ÀÚ.
gint gtk_signal_connect (GtkObject *object, gchar *name,
GtkSignalFunc func, gpointer func_data);
gintÇüÀÇ ¸®ÅÏ°ª? ÀÌ°ÍÀº callbackÇÔ¼ö¸¦ È®ÀÎÇϱâ À§ÇÑ ²¿¸®Ç¥´Ù. ¾Õ¼ ¾ê±âÇßµíÀÌ ¿ì¸®´Â ½Ã±×³Î°ú object¿¡ ´ëÇØ ÇÊ¿äÇÑ ¸¸ÅÀÇ ¸¹Àº callbackÀ» °¡Áú ¼ö ÀÖ°í, ±×°ÍµéÀº ºÙ¿©Á® ÀÖ´Â ¼ø¼´ë·Î °¢°¢ ½ÇÇàµÉ °ÍÀÌ´Ù. ÀÌ ²¿¸®Ç¥´Â ¿ì¸®°¡ ¸®½ºÆ®¿¡¼ ÀÌ·± callbackÀ» Á¦°ÅÇϵµ·Ï ÇØÁØ´Ù.
void gtk_signal_disconnect (GtkObject *object,
gint id);
±×·¡¼, Çڵ鷯·ÎºÎÅÍ Á¦°ÅÇÏ°íÀÚ ÇÏ´Â widget°ú signal_connectÇÔ¼ö·ÎºÎÅÍ ¸®ÅÏµÈ±× widgetÀÇ ²¿¸®Ç¥ ȤÀº id¸¦ ³Ñ°ÜÁÜÀ¸·Î½á ½Ã±×³Î Çڵ鷯¸¦ ²÷¾îÁÙ ¼ö ÀÖ´Ù.
Object¿¡¼ ¸ðµç ½Ã±×³Î Çڵ鷯¸¦ Á¦°ÅÇÏ´Â ¶Ç´Ù¸¥ ÇÔ¼ö´Â ÀÌ°ÍÀÌ´Ù.
gtk_signal_handlers_destroy (GtkObject *object);
ÀÌ È£ÃâÀº º¸ÀÌ´Â ±×´ë·Î´Ù. ÀÌ°ÍÀº ù¹ø° ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº object¿¡¼, ´ÜÁö
ÇöÀç ¼³Á¤µÈ ¸ðµç ½Ã±×³Î Çڵ鷯¸¦ Á¦°ÅÇØ ÁØ´Ù.
CallbackÇÔ¼ö¿¡ ´ëÇÑ ´õ ³ªÀº ¿¹Á¦°¡ µÉ ¾à°£ °³¼±µÈ hello world¸¦ º¸ÀÚ. ÀÌ°ÍÀº ¶ÇÇÑ ¿ì¸®ÀÇ ´ÙÀ½ Àý¿¡¼ÀÇ ÁÖÁ¦ÀÎ ÆÐÅ· widgetÀ» ¼Ò°³ÇÒ °ÍÀÌ´Ù.
/* helloworld2.c */
#include <gtk/gtk.h>
/* ¿ì¸®ÀÇ ¾à°£ °³¼±µÈ callback. ÀÌ ÇÔ¼ö·Î ÀüÇØÁø µ¥ÀÌÅʹ ǥÁØÃâ·ÂÀ¸·Î
* º¸¿©Áø´Ù. */
void callback (GtkWidget *widget, gpointer data)
{
g_print ("Hello again - %s was pressed\n", (char *) data);
}
/* ´Ù¸¥ callback */
void delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
/* GtkWidgetÀº widgetµéÀ» À§ÇÑ ÀúÀåÀå¼Ò ŸÀÔÀÌ´Ù. */
GtkWidget *window;
GtkWidget *button;
GtkWidget *box1;
/* ÀÌ°ÍÀº ¸ðµç GTK ¾îÇÿ¡¼ ¾´´Ù. ¸í·ÉÇà¿¡¼ ÁÖ¾îÁø ÀÎÀÚµéÀº ÀÌ°ÍÀ»
* Åë°úÇؼ ¾îÇÿ¡ Àü´ÞµÈ´Ù. */
gtk_init (&argc, &argv);
/* »õ·Î¿î À©µµ¸¦ ¸¸µç´Ù. */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* »õ·Î Á¢ÇÏ´Â ÇÔ¼ö·Î, À©µµ¿¡ "Hello Buttons!"¶ó´Â ŸÀÌƲÀ» ÁØ´Ù. */
gtk_window_set_title (GTK_WINDOW (window), "Hello Buttons!");
/* ¿©±â¼ ¿ì¸®´Â GTK¸¦ Áï½Ã ³¡³ª°Ô ÇÏ´Â delete_event¸¦ À§ÇÑ Çڵ鷯¸¦
* ¼¼ÆÃÇÑ´Ù. */
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);
/* À©µµÀÇ border width¸¦ ¼¼ÆÃÇÑ´Ù. */
gtk_container_border_width (GTK_CONTAINER (window), 10);
/* widgetµéÀÌ ÆÐÅ·µÉ ¹Ú½º¸¦ ¸¸µç´Ù. ÀÌ°ÍÀº ÆÐÅ·¿¡ ´ëÇÑ ºÎºÐ¿¡¼
* ÀÚ¼¼È÷ ¼³¸íµÉ °ÍÀÌ´Ù. ¹Ú½º´Â ½ÇÁ¦·Î º¸ÀÌ´Â °Ç ¾Æ´Ï¸ç ´ÜÁö
* widgetµéÀ» Á¤·ÄÇØ ³õÀ» µµ±¸·Î¼ ¾²ÀδÙ. */
box1 = gtk_hbox_new(FALSE, 0);
/* ¹Ú½º¸¦ À©µµ ¾È¿¡ ³õ´Â´Ù. */
gtk_container_add (GTK_CONTAINER (window), box1);
/* "Button 1"À̶õ ¶óº§À» °¡Áø »õ·Î¿î ¹öÆ°À» ¸¸µç´Ù. */
button = gtk_button_new_with_label ("Button 1");
/* ÀÌÁ¦ ¹öÆ°ÀÌ Å¬¸¯µÇ¸é ¿ì¸®´Â ÀÌ ¹öÆ°¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î °¡Áö´Â
* "callback" ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. */
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");
/* gtk_container_add ´ë½Å¿¡, ¿ì¸®´Â ÀÌ¹Ì À©µµ¿¡ ÆÐÅ·µÇ¾î ÀÖ´Â º¸ÀÌÁö
* ¾Ê´Â ¹Ú½º¿¡ ¹öÆ°À» ÆÐÅ·ÇÑ´Ù. */
gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
/* ÀÌ ¼ø¼¸¦ ²À ±â¾ïÇ϶ó. ¿©±â¼ ¹öÆ°¿¡ ´ëÇÑ ¼¼ÆÃÀÌ ¿ÏÀüÈ÷ ³¡³µÀ½À»
* GTK¿¡°Ô ¾Ë¸®°í, µû¶ó¼ ±×°ÍÀº ÀÌÁ¦ º¸¿©Áú ¼ö ÀÖ´Ù. */
gtk_widget_show(button);
/* µÎ¹ø° ¹öÆ°À» ¸¸µé±â À§ÇØ °°Àº ÀýÂ÷¸¦ °ÅÄ£´Ù. */
button = gtk_button_new_with_label ("Button 2");
/* °°Àº callbackÀ» È£ÃâÇÑ´Ù. ¹°·Ð ÀÎÀÚ´Â "button 2"¿¡ ´ëÇÑ
* Æ÷ÀÎÅÍ´Ù. */
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");
gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
/* ¿ì¸®°¡ ¹öÆ°À» ¸ÕÀú º¸¿©Áà¾ß ÇÏ´Â ±× ¼ø¼´Â ½ÇÁ¦·Î Áß¿äÇÑ °ÍÀº
* ¾Æ´Ï´Ù. ÇÏÁö¸¸ ³ª´Â ¸ðµç °ÍµéÀÌ ÇѲ¨¹ø¿¡ Æ¢¾î ³ª¿À¸ç º¸¿©Áú ¼ö
* ÀÖµµ·Ï À©µµ¸¦ °¡Àå ³ªÁß¿¡ º¸¿©ÁÙ °ÍÀ» ±ÇÀåÇÑ´Ù. */
gtk_widget_show(button);
gtk_widget_show(box1);
gtk_widget_show (window);
/* ¿©±â¼ ¾ÕÀ¸·ÎÀÇ Àç¹ÌÀÖ´Â °ÍµéÀ» ±â´Ù¸®°Ô µÈ´Ù! */
gtk_main ();
return 0;
}
ÀÌ ÇÁ·Î±×·¥À» ¿ì¸®ÀÇ Ã¹¹ø° ¿¹Á¦¿Í °°Àº ¸µÅ© ÀÎÀÚ¸¦ ÁÖ°í ÄÄÆÄÀÏÇÏÀÚ. ¿ª½Ã ¿ì¸®´Â ÀÌ ÇÁ·Î±×·¥À» Á¾·áÇϱâ À§Çؼ À©µµ¸Å´ÏÀú¸¦ ÀÌ¿ëÇϰųª ¸í·ÉÇà¿¡¼ Á×ÀÌ´Â °Í ¸»°í´Â ´Ù¸¥ ¹æ¹ýÀÌ ¾ø´Ù´Â °É ¾Ë °ÍÀÌ´Ù. ¿¬½À»ï¾Æ ¼¼¹ø°·Î "Quit" ¹öÆ°À» ¸¸µé¾î Ãß°¡ÇØ º¸´Â °Íµµ ÁÁÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ´ÙÀ½ ÀýÀ» Àо¸ç gtk_box_pack_start()¿¡ ¿É¼ÇÀ» Á־ ¼öµµ ÀÖ´Ù. À©µµÀÇ Å©±â¸¦ ¹Ù²Ù·Á°í ½Ãµµµµ Çغ¸°í, µ¿ÀÛÀ» °üÂûÇØ º¸¶ó.
Âü°í·Î, gtk_window_new()¸¦ À§ÇÑ ¶Ç´Ù¸¥ À¯¿ëÇÑ defineÀ¸·Î GTK_WINDOW_DIALOG µµ ÀÖ´Ù. ÀÌ°ÍÀº À©µµ¸Å´ÏÀú¿Í ¾à°£ ´Ù¸¥ ¹æ½ÄÀ¸·Î »óÈ£ÀÛ¿ëÇϸç, ÀϽÃÀûÀÎ À©µµ µé¿¡ ´ëÇØ ¾²¿©Á®¾ß ÇÑ´Ù.