¸®´ª½º ±âŸ ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   gtk °­Á #2 1998/07/10 (17:27)
À̸§ ±èÈ¿¿ø
¹øÈ£ 85
Á¶È¸ 252
º»¹® ¡º¸®´ª½º Çдç-¹ø¿ª¹° (go LINUX)¡» 200¹ø
Á¦  ¸ñ:[¹ø¿ª] gtk Tutorial, Chap4~6ÀÔ´Ï´Ù.                         
¿Ã¸°ÀÌ:Áß¾ÓÀÚ´ë(ÀÌÈÆ    )    98/03/11 15:22    ÀÐÀ½:174 °ü·ÃÀÚ·á ¾øÀ½
-----------------------------------------------------------------------------

******************
*** 4. ÆÐÅ· Widget
******************

 ¿ì¸®°¡ ¾î¶² ¾îÇÃÀ» °³¹ßÇϸ鼭, ÇϳªÀÇ À©µµ¿¡ Çϳª ÀÌ»óÀÇ ¹öÆ°À» ³õÀ¸·Á ÇÒ
°ÍÀÌ´Ù.  ¿ì¸®ÀÇ Ã¹¹ø° hello world ¿¹Á¦´Â ÇϳªÀÇ widget¸¸ ½è°í µû¶ó¼­ ¿ì¸®´Â
±×°ÍÀ» À©µµ ³»ºÎ¿¡ "pack"Çϱâ À§ÇØ gtk_container_add ÇÔ¼ö¸¦ ½è´Ù.  ±×·¯³ª
¿ì¸®°¡ ÇϳªÀÇ À©µµ¿¡ ´õ¸¹Àº widgetÀ» ³õÀ¸·Á ÇÒ ¶§, ¾î¶»°Ô ±×µéÀÌ ³õÀÏ À§Ä¡¸¦
Á¦¾îÇØ¾ß ÇÒ±î?  ¿©±â¼­ ¹Ù·Î "packing"À̶õ °ÍÀÌ µîÀåÇÑ´Ù.

***
*** 4-1. ¹Ú½º packingÀÇ ¿ø¸®
***
 ´ëºÎºÐÀÇ ÆÐÅ·Àº ¾Õ¼­ÀÇ ¿¹Á¦¿¡¼­Ã³·³ ¹Ú½º¸¦ ¸¸µå´Â °ÍÀ¸·Î ÀÌ·ç¾îÁø´Ù.
À̵éÀº ¿ì¸®ÀÇ widgetÀ» ¼öÆò ȤÀº ¼öÁ÷ ¹æÇâÀ¸·Î ÆÐÅ·ÇØ ³ÖÀ» ¼ö ÀÖ´Â, º¸ÀÌÁö
¾Ê´Â widget ÄÁÅ×À̳ʵéÀÌ´Ù.  ¼öÆò ¹Ú½º·ÎÀÇ ÆÐÅ·widgetÀÎ °æ¿ì, object´Â È£Ãâ
ÇÏ´Â ¹æ½Ä¿¡ µû¶ó ¼öÆòÀ¸·Î ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î ȤÀº ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î »ðÀÔ
µÈ´Ù.  ¼öÁ÷ ¹Ú½º¿¡¼­´Â ¹Ý´ë·Î ¼öÁ÷À¸·Î »ðÀԵȴÙ.  ¿ì¸®´Â ¿øÇÏ´Â È¿°ú¸¦ ³»±â
À§ÇØ ´Ù¸¥ ¹Ú½ºµéÀÇ ¾ÈÆÆ¿¡¼­ ¾î¶»°Ô¶óµµ Á¶ÇÕÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 »õ·Î¿î ¼öÆò¹Ú½º¸¦ ¸¸µé±â À§ÇØ ¿ì¸®´Â gtk_hbox_new()¸¦, ±×¸®°í ¼öÁ÷¹Ú½º¸¦
À§Çؼ­´Â gtk_vbox_new()¸¦ ÀÌ¿ëÇÑ´Ù.  gtk_box_pack_start()¿Í gtk_box_pack_end
()´Â ÀÌ·± ÄÁÅ×À̳ÊÀÇ ³»ºÎ¿¡ objectµéÀ» À§Ä¡½ÃÅ°±â À§ÇØ »ç¿ëÇÑ´Ù.  gtk_box_
pack_start()ÇÔ¼ö´Â ¼öÁ÷¹Ú½º¿¡¼­´Â À§¿¡¼­ ¾Æ·¡ÂÊÀ¸·Î, ±×¸®°í ¼öÆò¹Ú½º¿¡¼­´Â
¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î ÆÐÅ·ÇÒ °ÍÀÌ´Ù.  ±×¸®°í gtk_box_pack_end()´Â ÀÌ¿Í ¹Ý´ë
¹æÇâÀ¸·Î ÆÐÅ·ÇÑ´Ù.  ÀÌ ÇÔ¼öµéÀ» ÀÌ¿ëÇÔÀ¸·Î½á ¿ì¸®´Â ¿À¸¥ÂÊ ¶Ç´Â ¿ÞÂÊÀ¸·Î
widgetÀ» Á¤·ÄÇÒ ¼ö ÀÖ°í, ¿øÇÏ´Â È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù.  ¿ì¸®´Â ´ëºÎºÐÀÇ ¿¹Á¦¿¡¼­
gtk_box_pack_start()¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù.  Object´Â ¶Ç´Ù¸¥ ÄÁÅ×À̳ʰųª widgetÀÌ
µÉ ¼ö ÀÖ´Ù.  ±×¸®°í »ç½Ç, ¸¹Àº widgetµéÀº ½ÇÁ¦·Î ¹öÆ°À» Æ÷ÇÔÇÏ°í ÀÖ´Â widget
ÀÌÁö¸¸, ¿ì¸®´Â º¸Åë ¹öÆ° ¾ÈÀÇ ¶óº§¸¸À» ÀÌ¿ëÇÒ °ÍÀÌ´Ù.

 ÀÌ·± ÇÔ¼öÈ£Ãâ·Î½á, GTK´Â ¿ì¸®°¡ widgetÀ» ³õÀ» À§Ä¡¸¦ ¾Ë°ÔµÇ°í µû¶ó¼­
ÀÚµ¿ÀûÀ¸·Î Å©±â¸¦ Á¶ÀýÇÑ´ÙµçÁö ¶Ç´Ù¸¥ ¸Å·ÂÀûÀÎ ÀϵéÀ» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.  
¶ÇÇÑ ¿ì¸®ÀÇ widgetÀÌ ¾î¶»°Ô ÆÐÅ·µÇ¾î¾ß ÇÏ´À³Ä¿¡ µû¸¥ ¼ö¸¹Àº ¿É¼Çµéµµ ÀÖ´Ù.
¿ì¸®°¡ »ó»óÇϵíÀÌ, ÀÌ·± ¹æ½ÄÀº widgetÀ» ³õ°í ¸¸µå´Â µ¥ À־ »ó´çÇÑ À¯¿¬¼º
À» Á¦°øÇØ ÁØ´Ù.

***
*** 4-2. ¹Ú½º¿¡ ´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¸ÀÚ
***
 ÀÌ·± À¯¿¬¼º ¶§¹®¿¡, GTK¿¡¼­ ¹Ú½º¸¦ ÆÐÅ·ÇÏ´Â °ÍÀº óÀ½¿£ È¥¶õ½º·¯¿ïÁö
¸ð¸¥´Ù.  ¸¹Àº ¿É¼ÇµéÀÌ ÀÖÀ¸¸ç, ±×µéÀÌ ¾î¶»°Ô ¼­·Î ²ç¾î ¸ÂÃçÁö´ÂÁö Áï½Ã °£ÆÄ
ÇÒ ¼ö´Â ¾øÀ» °ÍÀÌ´Ù.  ±×·¯³ª °á±¹, ¿ì¸®´Â ´Ù¼¸ °¡ÁöÀÇ ±âº»ÀûÀÎ ½ºÅ¸ÀÏÀ»
°¡Áö°Ô µÈ´Ù.

 <IMG ALIGN="center" SRC="packbox1.gif" VSPACE="15" HSPACE="10"
 ALT="Box Packing Example Image" WIDTH="528" HEIGHT="235">

 °¢°¢ÀÇ ÁÙÀº ¸î °³ÀÇ ¹öÆ°À» °¡Áö°í ÀÖ´Â ÇϳªÀÇ ¼öÆò¹Ú½º(hbox)¸¦ Æ÷ÇÔÇÑ´Ù.
ÇÔ¼öÈ£Ãâ gtk_box_packÀº ÀÌ ¼öÆò¹Ú½º¿¡ °¢°¢ÀÇ ¹öÆ°À» ÆÐÅ·ÇÏ´Â °ÍÀ» ´ÜÃàÇÑ
°ÍÀÌ´Ù.  °¢°¢ÀÇ ¹öÆ°Àº ÀÌ ¼öÆò¹Ú½º¿¡ °°Àº ¹æ¹ýÀ¸·Î ÆÐÅ·µÈ´Ù(Áï, gtk_box_pack
_startÇÔ¼ö¿¡ °°Àº ÀÎÀÚ¸¦ Áشٴ ¸»).

 ÀÌ°ÍÀº gtk_box_pack_startÇÔ¼öÀÇ ¼±¾ðÀÌ´Ù.

      void gtk_box_pack_start (GtkBox    *box,
                               GtkWidget *child,
                               gint       expand,
                               gint       fill,
                               gint       padding);

 Ã¹¹ø° ÀÎÀÚ´Â object¸¦ ÆÐÅ·ÇÒ ¹Ú½º°í µÎ¹ø°´Â ±× object´Ù.  Object´Â
¿©±â¼­ ¸ðµÎ ¹öÆ°ÀÌ µÉ °ÍÀÌ°í, µû¶ó¼­ ¿ì¸®´Â ¹Ú½º¾È¿¡ ¹öÆ°µéÀ» ÆÐÅ·ÇÏ°Ô µÈ´Ù.

 gtk_box_pack_start() ¶Ç´Â gtk_box_pack_end()¿¡¼­ÀÇ expand¶ó´Â ÀÎÀÚ°¡ TRUE
ÀÏ ¶§, widgetÀº ¿©¹é°ø°£À» °¡µæ ä¿ì¸ç ¹Ú½º¿¡ µé¾î°¡°Ô µÉ °ÍÀÌ´Ù.  ±×¸®°í
±×°ÍÀÌ FALSE¶ó¸é widgetÀº ÀûÀýÈ÷ ¿©¹éÀ» µÎ°Ô µÈ´Ù.  ÀÌ expand¸¦ FALSE·Î µÎ¸é
¿ì¸®´Â widgetÀÇ Á¿ì Á¤·ÄÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.  ±×·¸Áö ¾ÊÀ¸¸é ±×µéÀº ¹Ú½º¿¡
°¡µæÂ÷¼­ gtk_box_pack_start ¶Ç´Â gtk_box_pack_end ¾î´À ÂÊÀ» ÀÌ¿ëÇϵçÁö °°Àº
È¿°ú¸¦ °¡Áö°Ô µÈ´Ù.

 ÀÎÀÚ fillÀº TRUEÀÏ ¶§ object ÀÚ½ÅÀÇ ¿©¹é°ø°£À» Á¦¾îÇÑ´Ù.  ±×¸®°í FALSE¶ó¸é
object ÀÚ½ÅÀÇ ¿©¹é°ø°£À» µÎÁö ¾Ê´Â´Ù.  ÀÌ°ÍÀº expand ÀÎÀÚ°¡ TRUEÀÏ ¶§¸¸ È¿°ú
°¡ ÀÖ´Ù.

 »õ·Î¿î ¹Ú½º¸¦ ¸¸µé ¶§´Â ÀÌ·± ÇÔ¼ö°¡ ÀÖ´Ù(¼öÆò¹Ú½º).

 GtkWidget * gtk_hbox_new (gint homogeneous,
                           gint spacing);

 ¿©±â¼­ÀÇ ÀÎÀÚ homogeneous´Â ¹Ú½º ¾ÈÀÇ °¢ objectµéÀÌ °°Àº Å©±â¸¦ °¡Áöµµ·Ï
Á¦¾îÇÑ´Ù(Áï ¼öÆò¹Ú½ºÀÏ °æ¿ì¿£ °°Àº ³Êºñ, ¼öÁ÷¹Ú½ºÀÏ °æ¿ì¿£ °°Àº ³ôÀÌ).
ÀÌ°ÍÀÌ ¼¼ÆõǸé, gtk_box_packÇÔ¼öÀÇ expand ÀÎÀÚ´Â ¾ðÁ¦³ª TRUE°¡ µÈ´Ù.

 ¿©±â¼­ spacing(¹Ú½º°¡ ¸¸µé¾îÁö¸ç ¼¼ÆõÊ)¿Í padding(¿ä¼ÒµéÀÌ ÆÐÅ·µÇ¸ç
¼¼ÆõÊ)ÀÇ Â÷ÀÌÁ¡Àº ¹«¾ùÀϱî?  SpacingÀº objectµé »çÀÌ¿¡ »ý°Ü³ª´Â °ÍÀ̸ç
paddingÀº ÇÑ objectÀÇ °¢ ¹æÇâ¿¡¼­ »ý°Ü³ª´Â °ÍÀÌ´Ù.  ÀÌ°ÍÀÌ ±× Á¡À» ¸íÈ®È÷
ÇØÁÙ °ÍÀÌ´Ù.

 <IMG ALIGN="center" SRC="packbox2.gif" VSPACE="15" HSPACE="10"
 ALT="Box Packing Example Image" WIDTH="509" HEIGHT="213">

 ¿©±â ÀÌ À̹ÌÁö¸¦ ¸¸µé¾î ÁÖ´Â Äڵ尡 ÀÖ´Ù.  ³ª´Â ¿©·¯ ¹ø °­Á¶ÇßÀ¸¹Ç·Î
ÀÌ°Í¿¡¼­ º° ¹®Á¦´Â ¾øÀ¸¸®¶ó ¹Ï´Â´Ù.  ½º½º·Î ÄÄÆÄÀÏÇؼ­ °¡Áö°í ³î¾Æ º¸µµ·Ï
ÇÑ´Ù.

***
*** 4-3. ÆÐÅ·¿¡ ´ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥
***
 #include "gtk/gtk.h"

 void
 delete_event (GtkWidget *widget, GdkEvent *event, gpointer *data)
 {
     gtk_main_quit ();
 }

 /* Button_labelµé·Î ÀÌ·ç¾îÁø hbox¸¦ ¸¸µç´Ù.  ¿ì¸®°¡ °ü½ÉÀ» °¡Áø º¯¼öµéÀ»
  * À§ÇÑ ÀÎÀÚµéÀÌ ÀÌ ÇÔ¼ö·Î ³Ñ°ÜÁø´Ù.
  * ¿ì¸®´Â ¹Ú½º¸¦ º¸ÀÌÁö ¾Ê°í, ±× ¾È¿¡ ÀÖ´Â ¸ðµç °ÍÀ» º¸ÀÏ °ÍÀÌ´Ù. */
 GtkWidget *make_box (gint homogeneous, gint spacing,
                      gint expand, gint fill, gint padding)
 {
     GtkWidget *box;
     GtkWidget *button;
     char padstr[80];
     /* Àû´çÇÑ homogenous¿Í spacingÀ» °¡Áø hbox¸¦ ¸¸µç´Ù. */
     box = gtk_hbox_new (homogeneous, spacing);
     /* ÀûÀýÈ÷ ¼¼ÆÃµÈ ¹öÆ°µéÀ» ¸¸µç´Ù. */
     button = gtk_button_new_with_label ("gtk_box_pack");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);

     button = gtk_button_new_with_label ("(box,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);

     button = gtk_button_new_with_label ("button,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
     /* expandÀÇ °ª¿¡ µû¸£´Â ¶óº§À» °¡Áø ÇÑ ¹öÆ°À» ¸¸µç´Ù. */
     if (expand == TRUE)
             button = gtk_button_new_with_label ("TRUE,");
     else
             button = gtk_button_new_with_label ("FALSE,");

     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);
     /* À§ÀÇ °æ¿ì¿Í °°Àº ¹öÆ°À» ¸¸µéÁö¸¸, ´õ ´ÜÃàµÈ Ç¥ÇöÀÌ´Ù. */
     button = gtk_button_new_with_label (fill ? "TRUE," : "FALSE,");
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);

     sprintf (padstr, "%d);", padding);

     button = gtk_button_new_with_label (padstr);
     gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
     gtk_widget_show (button);

     return box;
 }

 int
 main (int argc, char *argv[])
 {
     GtkWidget *window;
     GtkWidget *button;
     GtkWidget *box1;
     GtkWidget *box2;
     GtkWidget *separator;
     GtkWidget *label;
     GtkWidget *quitbox;
     int which;

     /* ¾ðÁ¦³ª ÀÌ·¸°Ô ½ÃÀÛÇÏ´Â °ÍÀ» ÀØÁö ¸» °Í! */
     gtk_init (&argc, &argv);

     if (argc != 2) {
         fprintf (stderr, "usage: packbox num, where num is 1, 2, 3.\n");
         /* GTK¸¦ ³¡³»´Â ºÎºÐÀ̸ç, exit status´Â 1ÀÌ´Ù. */
         gtk_exit (1);
     }

     which = atoi (argv[1]);

     /* ¿ì¸®ÀÇ À©µµ¸¦ ¸¸µç´Ù. */
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

     /* Main À©µµ¿¡ destroy ½Ã±×³ÎÀ» ¿¬°á½ÃÄÑ Áà¾ß ÇÑ´Ù.  ÀÌ°ÍÀº Á¦´ë·Î µÈ
      * µ¿ÀÛÀ» À§ÇØ ¸Å¿ì Áß¿äÇÑ °ÍÀÌ´Ù. */
     gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                         GTK_SIGNAL_FUNC (delete_event), NULL);
     gtk_container_border_width (GTK_CONTAINER (window), 10);

     /* ¿ì¸®´Â ¼öÆò¹Ú½ºµéÀ» ÆÐÅ·ÇØ ³ÖÀ» ¼öÁ÷¹Ú½º(vbox)¸¦ ¸¸µç´Ù.
      * ¹öÆ°ÀÌ µé¾îÀÖ´Â ¼öÆò¹Ú½º´Â ÀÌ ¼öÁ÷¹Ú½º ¾ÈÀ¸·Î ¼ø¼­´ë·Î ½×ÀδÙ.
      * (½ºÅà ±¸Á¶¸¦ »ý°¢ÇÏ¸é µÉ °ÍÀÌ´Ù.) */
     box1 = gtk_vbox_new (FALSE, 0);

     switch (which) {
     case 1:
         /* »õ·Î¿î ¶óº§À» ¸¸µç´Ù. */
         label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");

         /* ¶óº§µéÀ» ¿ÞÂÊÀ¸·Î Á¤·Ä½ÃŲ´Ù.  ÀÌ°Í¿¡ ´ëÇؼ­ widgetÀÇ ¼Ó¼º
          * ¼¼ÆÃÇϱ⿡¼­ ´Ù½Ã ´Ù·ê °ÍÀÌ´Ù. */
         gtk_misc_set_alignment (GTK_MISC (label), 0, 0);

         /* ¶óº§À» ¼öÁ÷¹Ú½º(vbox box1)¿¡ ÆÐÅ·ÇÑ´Ù.  ÇÑ vbox¿¡ ÆÐÅ·µÇ´Â
          * widgetµéÀº ¼ø¼­´ë·Î ´Ù¸¥ °ÍµéÀÇ À§ÂÊÀ¸·Î ÆÐÅ·µÈ´Ù. */
         gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);

         /* ¶óº§À» º¸¿©ÁØ´Ù. */
         gtk_widget_show (label);

         /* make_box ÇÔ¼ö¸¦ ÀûÀýÇÑ ÀÎÀڷνá È£ÃâÇÑ´Ù. */
         box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         box2 = make_box (FALSE, 0, TRUE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         box2 = make_box (FALSE, 0, TRUE, TRUE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);
         /* ÇϳªÀÇ separator¸¦ ¸¸µç´Ù.  À̵鿡 ´ëÇؼ­ µÚ¿¡¼­ ÀÚ¼¼È÷
          * ´Ù·ê °ÍÀ̸ç, ²Ï³ª °£´ÜÇÑ °ÍÀÌ´Ù. */
         separator = gtk_hseparator_new ();

         /* separator¸¦ vbox ¾ÈÀ¸·Î ÆÐÅ·ÇÑ´Ù.  ÀÌµé °¢°¢ÀÇ widgetÀº
          * vbox ¾ÈÀ¸·Î ÆÐÅ·µÇ¹Ç·Î, ¼öÁ÷ ¹æÇâÀ¸·Î ½×ÀÏ °ÍÀÌ´Ù. */
         gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
         gtk_widget_show (separator);

         /* ¶Ç´Ù¸¥ ¶óº§À» ¸¸µé¾î ±×°ÍÀ» º¸¿©ÁØ´Ù. */
         label = gtk_label_new ("gtk_hbox_new (TRUE, 0);");
         gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
         gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
         gtk_widget_show (label);

         /* °¢ ÀÎÀÚ´Â homogeneous, spacing, expand, fill, paddingÀÌ´Ù. */
         box2 = make_box (TRUE, 0, TRUE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         box2 = make_box (TRUE, 0, TRUE, TRUE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         /* ¶Ç´Ù¸¥ separator */
         separator = gtk_hseparator_new ();
         /* gtk_box_pack_start ÀÇ ¸¶Áö¸· 3°¡Áö ÀÎÀÚµéÀº
          * expand, fill, padding ÀÌ´Ù. */
         gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
         gtk_widget_show (separator);

         break;

     case 2:

         /* ¶óº§À» »õ·Î ¸¸µç´Ù. box1Àº main()ÀÇ ½ÃÀۺκп¡¼­ ¸¸µé¾îÁø
          * ´ë·Î vboxÀÌ´Ù. */
         label = gtk_label_new ("gtk_hbox_new (FALSE, 10);");
         gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
         gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
         gtk_widget_show (label);

         box2 = make_box (FALSE, 10, TRUE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         box2 = make_box (FALSE, 10, TRUE, TRUE, 0);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         separator = gtk_hseparator_new ();
         gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
         gtk_widget_show (separator);

         label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");
         gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
         gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
         gtk_widget_show (label);

         box2 = make_box (FALSE, 0, TRUE, FALSE, 10);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         box2 = make_box (FALSE, 0, TRUE, TRUE, 10);
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         separator = gtk_hseparator_new ();
         gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
         gtk_widget_show (separator);
         break;

     case 3:
         /* ÀÌ°ÍÀº gtk_box_pack_end()¸¦ ÀÌ¿ëÇÏ¿© widgetÀ» ¿À¸¥ÂÊ Á¤·ÄÇÏ´Â
          * °É º¸¿©ÁØ´Ù.  ¸ÕÀú, ¾Õ¿¡¼­Ã³·³ »õ·Î¿î ¹Ú½º¸¦ Çϳª ¸¸µç´Ù. */
         box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
         /* ¶óº§À» Çϳª ¸¸µç´Ù. */
         label = gtk_label_new ("end");
         /* ±×°ÍÀ» gtk_box_pack_end()·Î½á ÆÐÅ·ÇϹǷÎ, make_box()·Î ¸¸µé¾îÁø
          * hboxÀÇ ¿À¸¥ÂÊÀ¸·Î ³õ¿©Áö°Ô µÈ´Ù.
         gtk_box_pack_end (GTK_BOX (box2), label, FALSE, FALSE, 0);
         /* ¶óº§À» º¸ÀδÙ. */
         gtk_widget_show (label);

         /* box2¸¦ box1 ¾ÈÀ¸·Î ÆÐÅ·ÇÑ´Ù. */
         gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
         gtk_widget_show (box2);

         /* bottom ÂÊÀ» À§ÇÑ separator. */
         separator = gtk_hseparator_new ();
         /* ÀÌ°ÍÀº 400Çȼ¿ÀÇ ³Êºñ¿¡ 5Çȼ¿ÀÇ ³ôÀÌ(µÎ²²)·Î separator¸¦
          * ¼¼ÆÃÇÑ´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ ¸¸µç hbox°¡ ¶ÇÇÑ 400Çȼ¿ÀÇ ³ÊºñÀ̱â
          * ¶§¹®ÀÌ°í, "end" ¶óº§Àº hboxÀÇ ´Ù¸¥ ¶óº§µé°ú ±¸ºÐµÉ(separated)
          * °ÍÀÌ´Ù.  ±×·¸Áö ¾ÊÀ¸¸é, hbox ³»ºÎÀÇ ¸ðµç widgetµéÀº °¡´ÉÇѸ¸Å­
          * ¼­·Î »ª»ªÈ÷ ºÙ¾î¼­ ÆÐÅ·µÉ °ÍÀÌ´Ù. */
         gtk_widget_set_usize (separator, 400, 5);
         /* main()ÇÔ¼öÀÇ ½ÃÀۺκп¡¼­ ¸¸µé¾îÁø vbox(box1)À¸·Î separator¸¦
          * ÆÐÅ·ÇÑ´Ù. */
         gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
         gtk_widget_show (separator);
     }

     /* ¶Ç´Ù¸¥ hbox¸¦ ¸¸µç´Ù.. ¿ì¸®°¡ ¿øÇÏ´Â ¸¸Å­ ¾ó¸¶µçÁö ¸¸µé¼ö ÀÖ´Ù! */
     quitbox = gtk_hbox_new (FALSE, 0);

     /* ¿ì¸®ÀÇ quit ¹öÆ°ÀÌ´Ù. */
     button = gtk_button_new_with_label ("Quit");

     /* À©µµ¸¦ Æı«Çϱ⠽ñ׳ÎÀ» ¼¼ÆÃÇÑ´Ù.  ÀÌ°ÍÀº À§¿¡¼­ Á¤ÀÇµÈ ¿ì¸®ÀÇ
      * ½Ã±×³Î Çڵ鷯¿¡ ÀÇÇØ Æ÷ÂøµÉ, "destroy"½Ã±×³ÎÀ» À©µµ·Î º¸³»ÁØ´Ù. */
     gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
                                GTK_SIGNAL_FUNC (gtk_widget_destroy),
                                GTK_OBJECT (window));
     /* quitbox·Î ¹öÆ°À» ÆÐÅ·ÇÑ´Ù.  gtk_box_pack_startÀÇ ¸¶Áö¸· ¼¼ ÀÎÀÚ´Â
      * expand, fill, paddingÀÌ´Ù. */
     gtk_box_pack_start (GTK_BOX (quitbox), button, TRUE, FALSE, 0);
     /* vbox(box1) ¾ÈÀ¸·Î quitbox¸¦ ÆÐÅ·ÇÑ´Ù. */
     gtk_box_pack_start (GTK_BOX (box1), quitbox, FALSE, FALSE, 0);

     /* ¿ì¸®ÀÇ ¸ðµç widgetÀ» Æ÷ÇÔÇÏ°Ô µÈ ÀÌ vbox¸¦, mainÀ©µµ·Î ÆÐÅ·. */
     gtk_container_add (GTK_CONTAINER (window), box1);

     /* ±×¸®°í ³²¾ÆÀÖ´Â ¸ðµç °ÍÀ» º¸¿©ÁØ´Ù. */
     gtk_widget_show (button);
     gtk_widget_show (quitbox);

     gtk_widget_show (box1);
     /* ¸¶Áö¸·¿¡ À©µµ¸¦ º¸¿©Á༭ ¸ðµç °ÍÀÌ Çѹø¿¡ Æ¢¾î³ª¿À¸ç º¸ÀδÙ. */
     gtk_widget_show (window);

     /* ´ç¿¬È÷ ¿ì¸®ÀÇ gtk_mainÀÌ´Ù. */
     gtk_main ();

     /* gtk_main_quit()À» È£ÃâÇß´Ù¸é Á¦¾î´Â ÀÌ°÷À¸·Î ¿Â´Ù.  gtk_exit()¸¦
      * È£ÃâÇÏ¸é ±×·¸Áö ¾Ê´Ù. */

     return 0;
 }

***
*** 4-4. Å×À̺íÀ» ÀÌ¿ëÇÑ ÆÐÅ·
***
 ¶Ç´Ù¸¥ ÆÐÅ· - Å×À̺íÀ» ÀÌ¿ëÇÑ °ÍÀ» º¸ÀÚ.  ÀÌ°ÍÀº ¾î¶² »óȲ¿¡¼­ ¾ÆÁÖ À¯¿ëÇÒ
°ÍÀÌ´Ù.

 Å×À̺íÀ» ÀÌ¿ëÇؼ­, ¿ì¸®´Â widgetÀ» ³Ö¾îµÑ °ÝÀÚÆÇÀ» ¸¸µé°Ô µÈ´Ù.  ±× widget
µéÀº ¿ì¸®°¡ ¼³Á¤Çϴ´ë·Î ¾ó¸¶µçÁö °ø°£À» °¡Áö°Ô µÉ °ÍÀÌ´Ù.

 ¹°·Ð ¸ÕÀú ºÁ¾ß ÇÒ °ÍÀº gtk_table_new ÇÔ¼ö´Ù.

      GtkWidget* gtk_table_new (gint rows,
                                gint columns,
                                gint homogeneous);

 Ã¹¹ø° ÀÎÀÚ´Â Å×ÀÌºí¿¡ ¸¸µé ÇàÀÇ °¹¼ö°í, µÎ¹ø°´Â ´ç¿¬È÷ ¿­ÀÇ °¹¼ö´Ù.

 ÀÎÀÚ homogeneous´Â Å×À̺íÀÇ ¹Ú½ºµéÀÇ Å©±â°¡ ¾î¶»°Ô µÇ¾î¾ß ÇÏ´ÂÁö¸¦ °áÁ¤
ÇÑ´Ù.  ÀÌ°ÍÀÌ TRUE¶ó¸é Å×À̺íÀÇ ¹Ú½ºµéÀº ±× Å×ÀÌºí¿¡¼­ °¡Àå Å« widgetÀÇ
Å©±â¿¡ µû¸£°Ô µÈ´Ù.  ¶Ç FALSE¶ó¸é °¢ ¹Ú½ºµéÀº °°Àº Çà¿¡¼­ °¡Àå ³ôÀº widgetÀÇ
³ôÀ̸¦, ±×¸®°í °°Àº ¿­¿¡¼­´Â °¡Àå ³ÐÀº widgetÀÇ ³Êºñ¸¦ µû¸£°Ô µÈ´Ù.

 °¢ Çà°ú ¿­Àº 0¿¡¼­ n±îÁö Â÷ÁöÇÏ°Ô µÈ´Ù.  ¿©±â¼­ nÀº gtk_table_new¸¦ È£ÃâÇÒ
¶§ °áÁ¤µÈ ¼ýÀÚ´Ù.  ±×·¡¼­, ¸¸¾à ¿ì¸®°¡ Çà=2 ±×¸®°í ¿­=2, ÀÌ·¸°Ô ¼³Á¤ÇÏ°Ô
µÇ¸é ±¸Á¶´Â ÀÌ·¸°Ô µÈ´Ù.

       0          1          2
      0+----------+----------+
       |          |          |
      1+----------+----------+
       |          |          |
      2+----------+----------+

 ÁÂÇ¥°è´Â ¿ÞÂÊ À§¿¡¼­ Ãâ¹ßÇÏ´Â °ÍÀ» ÁÖÀÇÇÏÀÚ.  ¹Ú½º¾È¿¡ widgetÀ» ³õÀ¸·Á¸é
´ÙÀ½ ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.

      void gtk_table_attach (GtkTable      *table,
                             GtkWidget     *child,
                             gint           left_attach,
                             gint           right_attach,
                             gint           top_attach,
                             gint           bottom_attach,
                             gint           xoptions,
                             gint           yoptions,
                             gint           xpadding,
                             gint           ypadding);

 Ã¹¹ø° ÀÎÀÚ tableÀº ¿ì¸®°¡ ¸¸µç Å×À̺íÀÌ°í µÎ¹ø° child´Â ÀÌ Å×ÀÌºí¿¡
³õÀ¸·Á°í ÇÏ´Â widgetÀÌ´Ù.

 ¿ÞÂÊ°ú ¿À¸¥ÂÊÀÇ attach¶ó´Â ÀÎÀÚµéÀº widgetÀ» ³õÀ» À§Ä¡¿Í ÀÌ¿ëÇÒ ¹Ú½ºÀÇ
°¹¼ö¸¦ °áÁ¤ÇÑ´Ù.  ¸¸¾à ¿ì¸®ÀÇ 2x2 Å×À̺íÀÇ ¿À¸¥ÂÊ ¾Æ·¡ Ä­¿¡ À§Ä¡ÇÑ ¹öÆ°À»
¿øÇÑ´Ù¸é, ±×¸®°í ±× ¿ä¼Ò¸¸ °¡µæä¿ì±â¸¦ ¿øÇÑ´Ù¸é, left_attach=1, right_
attach=2, top_attach=1, bottom_attach=2, ÀÌ·¸°Ô µÇ¾î¾ß ÇÑ´Ù.

 ÀÌÁ¦, ¿ì¸®ÀÇ 2x2 Å×À̺íÀÇ Ã¹¹ø° Çà Àüü¸¦ ¼±ÅÃÇß´Ù¸é, left_attach=0,
right_attach=2, top_attach=0, bottom_attach=1 À̶ó°í ÇÏ¸é µÈ´Ù.

 ÀÎÀÚ xoption°ú yoptionÀº ÆÐÅ· ¿É¼ÇÀ» Á¤Çϱâ À§ÇÑ °ÍÀ¸·Î, ¿©·¯°¡ÁöÀÇ ¿É¼ÇÀ»
ÁÖ±â À§Çؼ­ OR ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ´Ù.

 ÀÌ ¿É¼ÇµéÀº ´ÙÀ½°ú °°´Ù.

    GTK_FILL - GTK_FILLÀÌ ¼³Á¤µÇ¸é Å×ÀÌºí ¹Ú½º°¡ widgetº¸´Ù Ŭ ¶§ widgetÀº
    »ç¿ë°¡´ÉÇÑ ¸ðµç °ø°£À¸·Î È®´ëµÈ´Ù.

    GTK_SHRINK - Å×À̺í widgetÀÌ ´õ ÀûÀº °ø°£À» Â÷ÁöÇϵµ·Ï µÇ¾úÀ» ¶§ widget
    Àº Á¤»óÀûÀ¸·Î À©µµÀÇ ¾Æ·¡ÂÊÀ¸·Î ¹Ð·Á³ª¼­ ÀϺΰ¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù.  ¸¸¾à
    GTK_SHRINK°¡ ¼³Á¤µÇ¸é widgetÀº ÀÚµ¿À¸·Î ÁÙ¾îµé¾î ³»ºÎ¿¡ ²À ¸Â°Ô µÈ´Ù.

    GTK_EXPAND - ÀÌ°ÍÀÌ ¼³Á¤µÇ¸é Å×À̺íÀº À©µµÀÇ ³²´Â °ø°£À¸·Î ²Ë Â÷°Ô
    È®´ëµÈ´Ù.

 ÆеùÀº ¹Ú½º ¾È¿¡¼­Ã³·³, Çȼ¿ ´ÜÀ§·Î ¶Ñ·ÇÇÑ ¿µ¿ªÀ» widget ÁÖÀ§¿¡ ¸¸µé¾î
ÁØ´Ù.

 gtk_table_attach()´Â ¼ö¸¹Àº ¿É¼ÇÀ» °¡Áö°í ÀÖ´Ù.  ±×·¡¼­ ÀÌ·± shortcutÀÌ
ÀÖ´Ù.

      void gtk_table_attach_defaults (GtkTable   *table,
                                      GtkWidget  *widget,
                                      gint        left_attach,
                                      gint        right_attach,
                                      gint        top_attach,
                                      gint        bottom_attach);

 X¿Í Y ¿É¼ÇÀº µðÆúÆ®·Î GTK_FILL|GTK_EXPAND, ±×¸®°í X¿Í YÀÇ ÆеùÀº 0ÀÌ´Ù.
³ª¸ÓÁö ÀÎÀÚµéÀº ÀÌÀüÀÇ ÇÔ¼ö¿Í °°´Ù.

 ¶ÇÇÑ gtk_table_set_row_spacing()°ú gtk_table_set_col_spacing()À̶õ ÇÔ¼öµµ
ÀÖ´Ù.  ÀÌ°ÍÀº ÁÖ¾îÁø Çà ¶Ç´Â ¿­¿¡ ´ëÇØ spacingÀ» ¼³Á¤ÇÑ´Ù.

      void gtk_table_set_row_spacing (GtkTable      *table,
                                      gint           row,
                                      gint           spacing);

 ±×¸®°í

      void       gtk_table_set_col_spacing  (GtkTable      *table,
                                             gint           column,
                                             gint           spacing);

 ¾î¶² ¿­¿¡ ´ëÇؼ­ space´Â ¿­ÀÇ ¿À¸¥ÂÊÀ¸·Î, ±×·¡°í Çà¿¡ ´ëÇؼ­´Â ÇàÀÇ ¾Æ·¡ÂÊ
À¸·Î ÁÖ¾îÁø´Ù´Â °ÍÀ» ¿°µÎ¿¡ µÎÀÚ.

 ¸ðµç Çà°ú ¿­¿¡ ´ëÇÑ ÀÏ°üµÈ spacingÀº ´ÙÀ½ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

      void gtk_table_set_row_spacings (GtkTable *table,
                                       gint      spacing);

      void gtk_table_set_col_spacings (GtkTable  *table,
                                       gint       spacing);

 ÀÌ µÎ ÇÔ¼ö´Â ¸¶Áö¸· Çà°ú ¸¶Áö¸· ¿­¿¡ ´ëÇؼ­´Â spacingÀ» ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ»
±â¾ïÇ϶ó.

***
*** 4-5. Å×À̺í ÆÐÅ· ¿¹Á¦
***
 ÀÌ ºÎºÐÀº, gtk ¹èÆ÷ÆÇ¿¡ ÇÔ²² ÀÖ´Â testgtk.c¿¡¼­ table ¿¹Á¦¸¦ ÂüÁ¶Çϱâ
¹Ù¶õ´Ù.




HomePage Backward Forward Post Reply List
1998 by swindler