· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Glade-KLDP

<!doctype linuxdoc system>

<article>
<title>GLADE¸¦ »ç¿ëÇÑ ¸®´ª½º µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀÌ¼Ç °³¹ß
<author>
¼±Á¤ÇÊ <htmlurl url="mailto:simje@maninet.com"
                  name="simje@maninet.com">
<date>March 29th, 2000, ÃÖÁ¾ °»½Å : May 15th, 2000.
<abstract>
<bf>GLADE</bf>¶õ GNU General Public License(GPL)À» µû¸£´Â <bf>GTK+ User
Interface Builder</bf>ÀÌ´Ù.  ½±°Ô ¾ê±âÇϸé <bf>GTK+</bf>¶ó´Â
¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© GUI »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â RAD(Rapid
Application Development) ÅøÀÌ´Ù.
À̰ÍÀÌ ¹«¾ùÀÎÁö ±×¸®°í À̸¦ ¾î¶»°Ô ±¸ÀÔ/¼³Ä¡ÇÏ´ÂÁö ±×¸®°í Á¶±×¸¸
¾îÇÃÄÉÀÌ¼Ç »ùÇÃÀÎ ÅØ½ºÆ® ¿¡µðÅ͸¦ °³¹ßÇÏ´Â ±¸Ã¼ÀûÀÎ ´Ü°èµéÀÌ ¾î¶»°Ô
µÇ´ÂÁö ¸®´ª½º ȯ°æÇÏ¿¡¼­, ¼Ò°³ ÇϰíÀÚ ÇÏ´Â °ÍÀÌ ÀÌ
¹®¼­ÀÇ ¸ñÀûÀÌ´Ù. ±×¸®°í <bf>GLADE</bf>°¡ ºÎÁ·ÇÑ ºÎºÐµé¿¡ ´ëÇÑ 
³»¿ëÀ» ´ã°í ÀÖ´Ù. 
ÀÌ ¹®¼­¿¡ ´ëÇÑ Á¶¾ð/ºñÆÇ/¹®Àǰ¡ ÀÖÀ¸½Å ºÐÀº À̸ÞÀÏ·Î
¿¬¶ôÀ» Áֽñ⠹ٶõ´Ù.  
´ÙÀ½ ¹öÀüÀº Á» ´õ ±í¼÷ÇÑ ³»¿ëÀ» ´Ù·ç¾îº¸µµ·Ï ÇϰڴÙ.
</abstract>

<toc>
<p> 

<!-- *************************************************************** -->
<sect>GLADE¿Í ±¸ÀÔ ¹× ¼³Ä¡
<!-- *************************************************************** -->
<p>

<sect1>GLADE¶õ ¹«¾ùÀΰ¡?
<p>
<htmlurl url="http://glade.pn.org" name="GLADE"> ´Â ´Ù¸¥ À©µµ¿ìÁî(Windows
NT/9x¸¦ ¾ÕÀ¸·Î ÀÌ·¸°Ô ºÎ¸£°Ú´Ù)Visual Studio¿Í ¸¹Àº ºÎºÐÀÌ
À¯»çÇϸç Widget Template Palette(À©µµ¿ìÁî ¿ë¾î·Î ÇÑ´Ù¸é ControlÂë¿¡
ÇØ´çÇϰڴÙ) ÅÛÇø®Æ® ÆÈ·¹Æ®¿¡ ÀÖ´Â À§Á¬µéÀ» µå·¡±× ¾Ø µå·ÓÀ¸·Î
GUI Æû°ú ±× À§ÀÇ GUI °´Ã¼µéÀ» »ý¼ºÇϰí À̵éÀÇ ÇÁ·ÎÆÛƼµéÀ» Á¶Á¤Çϰí
½Ã±×³Î Çڵ鷯(À©µµ¿ìÁî·Î ÇÑ´Ù¸é ¸Þ½ÃÁö ¸Ê ÇÔ¼ö) µî·Ï/»èÁ¦/º¯°æÇÏ¿© 
C, C++ ¼Ò½º(C++ÀÇ °æ¿ì addonÀÎ <bf>glade--</bf>°¡ ÇÊ¿ä)¸¦ »ý¼ºÇÒ ¼ö 
ÀÖ´Â ÅëÇÕ °³¹ß ȯ°æÀÌ´Ù.

¾ÕÀ¸·Î C ¼Ò½º¸¦ »ý¼ºÇÏ´Â °Í¿¡¸¸ ÃÐÁ¡À» ¸ÂÃç¼­ ¾ê±âÇϰڴÙ.

<sect1>GLADE¸¦ ¾îµð¼­ ±¸ÇÒ °ÍÀΰ¡?
<p>

<sect2>Source¿Í Binary
<p>
<bf>GLADE</bf>Àº ÇöÀç 0.5.7¹öÀü±îÁö releaseµÇ¾úÀ¸¸ç °ø½Ä web site´Â
<htmlurl url="http://glade.pn.org" name="http://glade.pn.org">ÀÌ´Ù.

´ÙÀ½ ±×¸²<ref id="fig_1" name="GLADE °ø½Ä Ȩ »çÀÌÆ®">Àº 
<bf>GLADE</bf>°ø½Ä Ȩ »çÀÌÆ® ¸ð½ÀÀÌ´Ù.

<!-- ±×¸² 1	: glade_home_page	-->
<figure>
<eps file="images/gladehomepage.eps" height="388pt"><!-- original 777 -->
<img src="images/glade_home_page.gif">
<caption><label id="fig_1">GLADE °ø½Ä Ȩ »çÀÌÆ®</caption>
</figure>

À̰÷¿¡¼­ °¡Àå ÃÖ±Ù ¹öÀüÀÇ ¼Ò½º¸¦ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖÀ¸¸ç À̰÷¿¡´Â ¹Ì¸®
¸¸µé¾îÁø binary¸¦ ÆÑŰ¡ÇÑ RedHat RPM, Debian, Slackware, NetBsd
packageµéµµ ¸¶·ÃµÇ¾î ÀÖ´Ù. ±ÞÇϽŠºÐÀº ÀÌ·± binaryÀÇ ÆÑŰ¡À» ¼±ÅÃÇÒ
¼öµµ ÀÖ°Ú´Ù.

<sect2>¹®¼­
<p>
¾ÆÁ÷ °ø½Ä ¹èÆ÷µÇ´Â ¹®¼­´Â ¾ø´Ù. ±×·¯³ª ´ÙÀ½°ú °°Àº ³»¿ëµéÀ» ÂüÁ¶ÇÒ ¼ö
ÀÖ°Ú´Ù:
<itemize>
<item><bf>GLADE</bf> ¼Ò½º ÀÚü
<item><bf>GLADE</bf> ¼Ò½ºÀÇ doc µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϵé
<item><bf>GLADE</bf> ¼Ò½ºÀÇ examples µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ë
<item>Designing a GTK+ interface graphically with Glade and libglade
(<htmlurl
url="http://www-4.ibm.com/software/developer/library/gnome-glade/"
name="http://www-4.ibm.com/software/developer/library/gnome-glade/">)
<item>Glade turbo-start (<htmlurl url="http://glade.pn.org/tutorial.txt" 
name="http://glade.pn.org/tutorial.txt">)
</itemize>

<sect1>GLADE ¼³Ä¡
<p>

<sect2> ¼³Ä¡¸¦ À§Çؼ­ ÇÊ¿äÇÑ °Íµé(requirements)
<p>

<bf>GLADE</bf>¸¦ ¼³Ä¡ÇÏ·Á¸é ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÇÊ¿äÇÏ´Ù. 
<itemize>
<item>binary¿¡µµ ÇÊ¿äÇÑ ¶óÀ̺귯¸®µé
<descrip>
<tag><bf>GTK+ 1.2.0 ÀÌ»ó</bf></tag> -- <url url="http://www.gtk.org">
<tag><bf>gnome-libs 1.0.16 ÀÌ»ó</bf></tag> -- Gnome Áö¿øÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡
ÇÊ¿ä
<tag><bf>Gettext 0.10.35</bf></tag> -- <url
url="ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"> À̰ÍÀº gettext¸¦
Áö¿øÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇϰíÀÚ ÇÒ ¶§ ÇÊ¿ä.

</descrip>
<item>¼Ò½º·Î ¼³Ä¡Çϱâ À§Çؼ­ ÇÊ¿äÇÑ º¸Á¶ µµ±¸µé
<descrip>
<tag><bf>Automake 1.4</bf></tag> -- <url
url="ftp://ftp.gnu.org/pub/gnu/automake">, <url
url="http://www.gnu.org/software/automake">, <url
url="ftp://rawhide.redhat.com/i386/RedHat/RPMS">.
<tag><bf>Autoconf 2.13</bf></tag> -- <url
url="ftp://ftp.gnu.org/pub/gnu/autoconf">, <url
url="http://www.gnu.org/software/autoconf">, <url
url="ftp://rawhide.redhat.com/i386/RedHat/RPMS">
</descrip>
</itemize>

<sect2> binary package ¼³Ä¡
<p>
RPM µî°ú °°Àº binaryÇüÅÂÀÇ ÆÑŰÁö´Â ±× ¼³Ä¡°¡ ¿ëÀÌÇÏ´Ù. ¿¹¸¦ µé¾î¼­
RPMÀº ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù:
<verb>
rpm -Uvh glade-0.5.7-2.i386.rpm
</verb>

<sect2>¼Ò½º·Î ¼³Ä¡
<p>
¼Ò½º·Î ¼³Ä¡Çϱâ À§Çؼ­´Â automake 1.4¿Í autoconf 2.13ÀÌ ÇÊ¿äÇÏ´Ù. À̵éÀº
´ëºÎºÐÀÇ linux¿¡ ¼³Ä¡µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ¾ø´Ù¸é ã¾Æ¼­ ¼³Ä¡ÇØÁÖÀÚ. ±×¸®°í
¼Ò½º·Î ¼³Ä¡ÇÏ´Â °ÍÀº ´ÙÀ½°ú °°ÀÌ, ¸®´ª½º ¼Ò½º ¼³Ä¡ÀÇ ÀüÇüÀûÀÎ ¹æ¹ýÀ» 
µû¸£¸ç, ±×·¸°Ô ¾î·Á¿î °ÍÀÌ ¾Æ´Ï´Ù:
<enum>
<item> ¸Ç¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ´Ù¿î ·Îµå ¹ÞÀº ÆÄÀÏÀÇ ¾ÐÃàÀ» Ǫ´Â °ÍÀÌ´Ù.
<verb>
[simje@rurulala /usr/src/local/gtk]$ tar xvzf glade-0.5.5.tar.gz
</verb>
<item> ´ÙÀ½Àº »õ·Î »ý¼ºµÈ µð·ºÅ丮·Î À̵¿Çؼ­ <em>configure</em>¸¦
½ÇÇà½ÃŲ´Ù.
<verb>
[simje@rurulala /usr/src/local/gtk]$ cd glade-0.5.5
[simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure
</verb>
¿©±â¼­ ƯÁ¤ µð·ºÅ丮¿¡ ¼³Ä¡µÉ °ÍÀ» °Ü³ÉÇÑ´Ù¸é ¾Æ½Ã´Â ¹Ù¿Í °°ÀÌ ´ÙÀ½°ú
°°ÀÌ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê´Â °æ¿ì µðÆúÆ®·Î <tt>/usr/local</tt>¸¦
<em>prefix</em>·Î ¼³Á¤ÇÏ°Ô µÈ´Ù.
<verb>
[simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure
--prefix=/usr
</verb>
<item> ´ÙÀ½Àº <em>make</em>À» ½ÇÇà½ÃÄÑ ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ´Ù.
<verb>
[simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ make
</verb>
<item> ÄÄÆÄÀÏÀÌ ³¡³ª¸é ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù.
<verb>
[simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ su -c "make install"
</verb>
</enum>


<!-- *************************************************************** -->
<sect>GLADE¸¦ ÀÌ¿ëÇÑ ÅØ½ºÆ® ¿¡µðÅÍ °³¹ß - »çÀü ´Ü°è
<!-- *************************************************************** -->
<p>

¼³Ä¡°¡ Á¦´ë·Î µÇ¾ú´Â°¡? ±×·¸´Ù¸é ½ÇÇàÀ» ÇØº¸ÀÚ. ÀÌ»ó¾øÀÌ ½ÇÇàµÇ¾ú´Ù¸é
ÀÌÁ¦ ´Ü¼øÇÑ ¿¹Á¦ °³¹ßÀ» ÅëÇØ¼­ <bf>GLADE</bf>¸¦ ÀÍÇô º¸µµ·Ï ÇÏÀÚ:

<sect1>»çÀü Áö½Ä(preliminaries)
<p>
±×³É µå·¡±× ¾Ø µå¶øÀ¸·Î °³¹ßÇÒ ¼öµµ ÀÖÁö¸¸ ¿ÜÇüÀ» ¸¸µå´Â °Íº¸´Ù Á» ´õ
±í¼÷È÷ µé¾î°¥·Á¸é ´ÙÀ½°ú °°Àº »çÀü Áö½ÄÀÌ ÇÊ¿äÇÏ´Ù:

<sect2>¶óÀ̺귯¸®
<p>
GLADE°¡ GUI¸¦ ¸¸µé±â À§Çؼ­ ¸¹ÀÌ »ç¿ëÇÏ´Â ¶óÀ̺귯µé·Î½á ´ÙÀ½°ú °°Àº
°ÍµéÀÌ ÀÖ´Ù:
<descrip>
<tag>GTK+</tag> À̰ÍÀº °¡Àå ±âÃÊÀûÀÎ ±â¹Ý Áö½ÄÀ¸·Î½á ´ÙÀ½°ú
°°Àº ¹®¼­¸¦ ÅëÇØ¼­ ½±°Ô ÀÚ°¡ ÇнÀ ÇÒ ¼ö ÀÖ´Ù <url
url="http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html">.
±×·¯³ª Á» ´õ ÀÚ¼¼È÷ µé¿©´Ù º¸°Å³ª library APIµéÀ» º¸·Á¸é ´ÙÀ½ »çÀÌÆ®¸¦
ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. <url url="http://www.gtk.org">. À̰÷¿¡´Â ¸¹Àº ¹®¼­µé°ú
·¹ÆÛ·±½ºµéÀÌ ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â
<tt>gtk_</tt><em>xxx</em>, ¸Þ¸ð¸® °´Ã¼´Â <tt>Gtk</tt><em>Xxx</em>,
¸ÅÅ©·Î´Â <tt>GTK_</tt><em>XXX</em>
°ú °°Àº ÇüŸ¦ °¡Áø´Ù.
<tag>GDK</tag> XlibÀÇ ²À´ë±â¿¡ ÀÖ´Â wrapper library·Î °í¾ÈµÈ
¶óÀ̺귯¸®ÀÌ´Ù. À̰ÍÀº GTK+°¡ ÇȽº¸ÊÀ̳ª ÆùÆ® Ä÷¯µîÀ» ´Ù·ê ¶§ »ç¿ëµÇ´Â
°ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ¹®¼­µµ <url url="http://www.gtk.org">¿¡ °¡¸é ãÀ» ¼ö
ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â <tt>gdk_</tt><em>xxx</em>,
¸Þ¸ð¸® °´Ã¼´Â <tt>Gdk</tt><em>Xxx</em>, ¸ÅÅ©·Î´Â
<tt>GDK_</tt><em>XXX</em> °ú °°Àº ÇüŸ¦
°¡Áø´Ù.
<tag>Glib</tag>À̰ÍÀº ¸Þ¸ð¸® ±¸Á¶(¸µÅ©µå ¸®½ºÆ®, ¸®½ºÆ®, ÇØ½¬, ij½¬,
Æ®¸®)³ª ŸÀ̸Ó, ÅØ½ºÆ® Ãâ·Â°ú °°Àº °ÍÀ» ´Ù·ê ¶§ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ÀÌ¿¡
´ëÇÑ ¹®¼­µµ <url url="http://www.gtk.org">¿¡ °¡¸é ãÀ» ¼ö 
ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â <tt>g_</tt><em>xxx</em>, ¸Þ¸ð¸®
°´Ã¼´Â <tt>g</tt><em>xxx</em>, ¸ÅÅ©·Î´Â <tt>G</tt><em>XXX</em>
°ú °°Àº ÇüŸ¦ °¡Áø´Ù.
</descrip>
 
À̸¦ ±¸Á¶È­Çؼ­ ±×¸²À¸·Î ³ªÅ¸³½´Ù¸é ´ÙÀ½°ú °°´Ù(<ref id="fig_2"
name="gnome ¾ÆÅ°ÅØÃÄ">).

<!-- ±×¸² 2 : gnome-arch -->
<figure>
<eps file="images/gnome-arch.eps" height="228pt"> <!-- 456 -->
<img src="images/gnome-arch.gif">
<caption><label id="fig_2">gnome ¾ÆÅ°ÅØÃÄ</caption>
</figure>


<sect2>GTK+ Æ©Å͸®¾ó »ìÆìº¸±â<label id="GTK_tutorial">
<p>

<descrip>
<tag>½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯</tag>
À§ÀÇ <bf>GTK+</bf> Æ©Å͸®¾ó ÆäÀÌÁö(<url
url="http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html">)¸¦
º¸¸é ¸¹Àº ±âÃÊÀûÀÎ ³»¿ëµé¿¡ ´ëÇÑ ¼³¸íÀÌ ÀÖ´Ù. À̵é Áß¿¡¼­ °¡Àå Áß¿äÇÏ´Ù
½ÍÀº °ÍÀº ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯(À©µµ¿ìÁîÀÇ ¸Þ½ÃÁö ¸Ê, ¸Þ½ÃÁö Çڵ鷯 µî°ú
À¯»çÇÑ °³³ä)À̶ó ÇÒ ¼ö ÀÖ°Ú´Ù. ÀÌ´Â ´ë°³ ÇÊ¿äÇÑ Ã¢À»
<em>main</em> ÇÔ¼ö(À©µµ¿ìÁîÀÇ <em>WinMain()</em>ÇÔ¼ö)¾È¿¡¼­ »ý¼ºÇϰí
µð½ºÇ÷¹ÀÌÇÑ ÈÄ, ¸Þ½ÃÁö ÆßÇÁ¿¡ ÇØ´çÇÏ´Â <em>gtk_main()</em> ÇÔ¼ö·Î
ÁøÀÔÇÏ´Â µ¥, ÀÌ ¾È¿¡¼­ »ç¿ëÀÚ ¾×¼Ç¿¡ ´ëÇÑ ½Ã±×³ÎµéÀÌ »ý¼ºµÇ¾î¼­
¾îÇø®ÄÉÀ̼ǿ¡°Ô Àü´ÞµÈ´Ù. 

À̸¦ À§Çؼ­´Â »çÀü¿¡ ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¸ÊÇνÃÄÑÁÖ´Â Áغñ Á¶ÀÛÀ»
ÇØÁÖ¾î¾ß ÇÏ´Â µ¥ ±× ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ <em>gtk_signal_connect()</em>¶ó´Â
ÇÔ¼ö¸¦ ÅëÇØ¼­ÀÌ´Ù. <bf>GLADE</bf>°¡ ¸¸µå´Â ¼Ò½º ÄÚµå´Â »ç¿ëÀÚ°¡
<bf>GLADE</bf>¸¦ ÅëÇØ¼­ µî·ÏÇÏ´Â ½Ã±×³Îµé°ú ½Ã±×³Î Çڵ鷯°£ÀÇ ¸ÊÇÎÀ»
¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀΠâÀ» »ý¼ºÇÏ´Â ÇÔ¼ö<em>create_window1</em>(ÀÌ À̸§Àº
Àý´ëÀûÀÌÁö ¾ÊÀ» ¼ö ÀÖ´Ù) ¾È¿¡¼­ Çϰí ÀÖÀ½À» ¾ÕÀ¸·Î È®ÀÎÇÒ ¼ö ÀÖÀ»
°ÍÀÌ´Ù. ¶ÇÇÑ ÀÌ ÇÔ¼ö ³»¿¡¼­´Â ¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀΠâÀ§¿¡ ºÙ¿© ³õÀº ¸¹Àº
À§Á¬µéÀ» »ý¼ºÇÏ°í ¼Ó¼º ¼³Á¤ÇÏ´Â µîÀÇ ÀÏÀ» °âÇÑ´Ù.

<tag>ÆÑÅ· ¹× ¼öÆò/¼öÁ÷/Å×ÀÌºí ¹Ú½º</tag>
´ÙÀ½À¸·Î ÆÑÅ·À̶ó´Â °³³äÀÎ µ¥ À̰ÍÀº À©µµ¿ìÁî¿¡´Â ¾ø´Â °³³äÀÌ´Ù(Ȥ½Ã
MFC³»ºÎÀûÀ¸·Î ±¸ÇöµÇ¾î 󸮵ǴÂÁö´Â ¸ð¸£Áö¸¸ ¸»ÀÌ´Ù). ±×·¸°Ô ¾î·Á¿î
°³³äÀº ¾Æ´Ï°í ¿©·¯°¡Áö À§Á¬À» »öÁ¾ÀÌ Àß¶ó ºÙÀ̱âó·³ ºÙ¿© ³ª°¥ ¶§ ¹Ø¿¡
ÀÖ´Â °Í°ú ±× À§¿¡ ÀÖ´Â °ÍÀÇ ¹ÙÅÁÀ¸·Î »ý°¢ÇÏ´Â °³³äÀ̸ç ÁÖ·Î ·¹À̾ƿô¿¡
´ëÇÑ ±â´É Áö¿øÀ» ÇÑ´Ù. À̰ÍÀº À©µµ¿ìÁî º¸´Ù´Â ÀÚ¹Ù¿¡ ÀÖ´Â ÄÁÅ×ÀÌ³Ê ¹×
·¹À̾ƿô °³³ä°ú À¯»çÇÏ´Ù°í ÇÒ ¼ö ÀÖ°Ú´Ù.

GTK+¸¦ °ðÀÌ °ð´ë·Î ÇÁ·Î±×·¡¹ÖÇÑ´Ù¸é Á¶±Ý ²¨²ô·¯¿ï ¼ö ÀÖ°ÚÁö¸¸,
<bf>GLADE</bf>¿¡¼­´Â À̰ÍÀ» ½Ã°¢ÀûÀ¸·Î ó¸®ÇØ ÁØ´Ù. ¼öÆò ¹Ú½º(ÀÚ¹Ù
¿ë¾î·Î ÇÑ´Ù¸é ÄÁÅ×À̳Ê) ¹× ¼öÁ÷ ¹Ú½º ±×¸®°í Å×ÀÌºí ¹Ú½º¸¦ Á¦°øÇϸç 
¿©±â¿¡´Ù ¿©·¯°¡Áö °´Ã¼µé, Áï À§Á¬µéÀ» ¼Õ½±°Ô ºÙ¿´´Ù ¶¼¾ú´Ù ÇÒ ¼ö ÀÖ´Ù.

</descrip>

À§¿Í °°Àº °³³äÀ» °¡Áö°í ¸¸µé¾îÁø ¾îÇø®ÄÉÀ̼ÇÀº ´ÙÀ½ ±×¸²<ref
id="fig_3" name="GTK·Î ¸¸µç ¾îÇø®ÄÉÀÌ¼Ç ³»ºÎ °èÃþ ±¸Á¶">°ú °°Àº ³»ºÎ
°èÃþ ±¸Á¶¸¦ °®´Â´Ù.

<!-- ±×¸² 3 : gtkhierarchy -->
<figure>
<eps file="images/gtkhierarchy.eps" height="210pt">
<img src="images/gtkhierarchy.gif">
<caption><label id="fig_3">GTK·Î ¸¸µç ¾îÇø®ÄÉÀÌ¼Ç ³»ºÎ °èÃþ ±¸Á¶</caption>
</figure>

<sect1>GLADE »ìÇDZâ
<p>

<sect2>¼¼ °³ÀÇ µðÆúÆ® À©µµ¿ì
<p>

<bf>GLADE</bf>¸¦ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº ¼¼°³ÀÇ Ã¢ÀÌ µðÆúÆ®·Î ¶á´Ù:

<descrip>
<tag>ÁÖ À©µµ¿ì(main glade window)</tag>

<!-- ±×¸² 4 : main_init -->
<figure>
<eps file="images/maininit.eps" height="246pt">
<img src="images/main_init.gif">
<caption><label id="fig_4">GLADE ¸ÞÀÎ À©µµ¿ì</caption>
</figure>

À̰ÍÀº ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇÏ´Â ¸ðµç âµé°ú ´ëÈ­»óÀÚµéÀ» ´ã°í ÀÖ´Ù. À̵é ÁßÀÇ
Çϳª¸¦ ´õºí Ŭ¸¯Çϸé ÀÌ¿¡ ´ëÀÀÇϴ âÀ̳ª ´ëÈ­»óÀÚ ÅÛÇø®Æ®°¡ ¶á´Ù.
±×¸®°í ÀÌ¿¡ ´ëÀÀÇϴ âÀ̳ª ´ëÈ­»óÀÚÀÇ ÇÁ·ÎÆÛƼ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï
ÇÁ·ÎÆÛƼ ¿¡µðÅÍ °´Ã¼°¡ À̰ÍÀ¸·Î º¯°æµÈ´Ù.

<tag>À§Á¬ ÆÈ·¹Æ® À©µµ¿ì(widget palette window)</tag>

<!-- ±×¸² 5 : widget_palette_init -->
<figure>
<eps file="images/widgetpaletteinit.eps" height="411pt" angle="90">
<img src="images/widget_palette_init.gif">
<caption><label id="fig_5">GLADE À§Á¬ ÆÈ·¹Æ® À©µµ¿ì</caption>
</figure>

À̰ÍÀº °¡´ÉÇÑ ¸ðµç À§Á¬µéÀÇ µé¾î ÀÖ´Â ÆÈ·¹Æ®ÀÌ´Ù. »õ·Î¿î âÀ̳ª ´ëÈ­
»óÀÚ¸¦ ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÏ·Á¸é ÆÈ·¹Æ®¿¡ Àִ âÀ̳ª ´ëÈ­»óÀÚ¸¦ Ŭ¸¯Çϱ⸸
ÇϸéµÈ´Ù. ÀÌ·¸°Ô »ý¼ºµÈ âÀ̳ª ´ëÈ­»óÀÚ¿¡ À§Á¬À» ºÙÀÌ·Á¸é À§Á¬À»
Ŭ¸¯Çؼ­ ¼±ÅÃÇÑ ´ÙÀ½ ´õÇϰíÀÚ ÇÏ´Â À§Ä¡¿¡ Ŭ¸¯ÇÏ¸é µÈ´Ù.

<tag>¼Ó¼º ÆíÁý±â À©µµ¿ì(property editor window)</tag>

<!-- ±×¸² 6 : main_window_properties -->
<figure>
<eps file="images/mainwindowproperties.eps" height="398pt">
<img src="images/main_window_properties.gif">
<caption><label id="fig+6">GLADE ¼Ó¼º ÆíÁý±â À©µµ¿ì</caption>
</figure>

À̰ÍÀº âÀ̳ª ´ëÈ­»óÀÚ, ±×¸®°í À̵é À§¿¡ ÀÖ´Â À§Á¬µéÀÇ Å©±â ¶Ç´Â ÅØ½ºÆ®
µî°ú °°Àº ¼Ó¼ºµéÀ» º¯°æÇÒ ¶§ »ç¿ëÇÑ´Ù. ÁÖ À©µµ¿ì¿¡ Àִ âÀ̳ª
´ëÈ­»óÀÚ¸¦ Ŭ¸¯ÇÏ¿©, ¶Ç´Â âÀ̳ª ´ëÈ­»óÀÚ À§¿¡ ÀÖ´Â À§Á¬À» Ŭ¸¯Çؼ­,
ÇÁ·ÎÆÛƼ¸¦ ¼³Á¤ÇÒ ´ë»ó °´Ã¼¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. 
</descrip>

<sect2>±âŸ º¸Á¶ âµé
<p>

<bf>GLADE</bf>´Â ´ÙÀ½°ú °°Àº º¸Á¶ âµéÀ» °¡Áö°í ÀÖÀ¸¸ç ÁÖ·Î ¸Þ´º¸¦
ÅëÇØ¼­ Á¢±ÙµÉ ¼ö ÀÖ´Ù:

<label id="win_menu_editor">
<descrip>
<tag>¸Þ´º ÀÛ¼º À©µµ¿ì</tag>

<!-- ±×¸² 7 : menu_editor_dlg -->
<figure>
<eps file="images/menueditordlg.eps" height="474pt">
<img src="images/menu_editor_dlg.gif">
<caption><label id="fig_7"> GLADE ¸Þ´º ÀÛ¼º À©µµ¿ì</caption>
</figure>

À̰ÍÀº ÇÁ·ÎÁ§Æ® â¿¡ ¸Þ´º¸¦ Ãß°¡ÇÑ °æ¿ì ÀÌ ¸Þ´º¸¦ Ŭ¸¯ÇÑÈÄ ¼Ó¼º
ÆíÁý±â À©µµ¿ì¿¡ ³ªÅ¸³ª´Â <em>edit menu</em> ¹öưÀ» ´©¸£¸é ³ªÅ¸³­´Ù.
À̰ÍÀ» ÅëÇØ¼­ ¿©·¯ºÐÀº ÇÁ·ÎÁ§Æ®ÀÇ ¸Þ´º¸¦ ÆíÁýÇÒ ¼ö ÀÖ´Ù. 

À̰÷¿¡¼­ »ý¼ºµÈ ¸Þ´º´Â ¼Ò½º¿¡ ÀÚµ¿À¸·Î µé¾î°¡°Ô µÈ´Ù.

<em>add</em>¸¦ ´©¸¥ ÈÄ¿¡ <em>Stock Item</em> ÄÞº¸¹Ú½º¸¦ ´­·¯¼­ ¹Ì¸®
Á¤ÀǵÈ, ±×¸®°í ³Î¸® ¾²ÀÌ´Â ¸Þ´º¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ <em>Handler</em>°¡ ÀÌ¿¡
¸ÂÃç Á¤ÇüÈ­µÈ ²Ã·Î ³ªÅ¸³ª°Ô µÇ¾î ÀÖ´Â µ¥, ÇѱÛÈ­µÈ ¹öÀüÀÇ °æ¿ì Çѱ۷ΠµÈ
ÇÔ¼ö°¡ <em>Handler</em>°¡ µÇ¾î¼­ ¼Ò½º¿¡ ±úÁö°Å³ª ÇÑ±Û ºÎºÐÀÌ
¾ð´õ¶óÀÎÀ¸·Î ä¿öÁø ÇÔ¼ö°¡ ³ªÅ¸³ª°Ô µÈ´Ù. °í·Î <em>Handler</em> ºÎºÐÀº
µÇµµ·ÏÀÌ¸é ¿µ¹®À¸·Î ¹Ù²ã ÁÖ´Â °ÍÀÌ ÁÁ°Ú´Ù.

<tag>À§Á¬ Æ®¸®(widget tree)</tag>

<!-- ±×¸² 8 : widget_tree -->
<figure>
<eps file="images/widgettree.eps" height="548"> <!-- 784 -->
<img src="images/widget_tree.gif">
<caption><label id="fig_8"> GLADE À§Á¬ Æ®¸®</caption>
</figure>

À̰ÍÀº ÇÁ·ÎÁ§Æ®¿¡ »ç¿ëµÈ ¸ðµç À§Á¬µéÀÇ Æ®¸® ±¸Á¶¸¦ º¸¿©ÁÖ´Â À©µµ¿ìÀÌ´Ù.
À̰ÍÀº ÁÖ À©µµ¿ìÀÇ <em>View/Show WidgetTree</em>À» ¼±ÅÃÇØ¼­ º¼ ¼ö ÀÖ´Ù.
</descrip>

<sect1>ºÐ¼®/¼³°è - ÅØ½ºÆ® ¿¡µðÅÍ ±â´É
<p>
¿ì¸®°¡ ¸¸µé°íÀÚ ÇÏ´Â ÅØ½ºÆ® ¿¡µðÅÍ´Â ´Ü¼øÇÑ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î½á
¿ì¼± À©µµ¿ìÁîÀÇ notepad¸¦ ´à¾Ò´Ù°í »ý°¢ÇÏ½Ã¸é µÈ´Ù. ±×·¸´Ù¸é ÀÌ ¿¡µðÅͰ¡
Áö¿øÇØ¾ß ÇÏ´Â ±×·¡¼­ ±¸ÇöÇØ¾ß ÇÏ´Â ±â´Éµé ¸®½ºÆ®¸¦ »ìÆìº¸ÀÚ:

<itemize>
<item> ÆíÁýâ¿¡ ¹®ÀÚ ÀÔ·Â, ¼±ÅÃ, º¹»ç, »èÁ¦, ºÙÀ̱⠱â´É
<item> ÆíÁýµÈ ³»¿ëÀ» ÀúÀåÇÏ´Â ±â´É
<item> ÆÄÀÏÀ» Àоî¿Í ÆíÁýâ¿¡ µð½ºÇ÷¹ÀÌ ÇÏ´Â ±â´É
<item> Á¾·á ±â´É
<item> about ´ëÈ­ »óÀÚ ±â´É
</itemize>

<!-- *************************************************************** -->
<sect>GLADE¸¦ ÀÌ¿ëÇÑ ÅØ½ºÆ® ¿¡µðÅÍ °³¹ß - ´Ü°èÀû Á¢±Ù
<!-- *************************************************************** -->
<p>

<bf>GLADE</bf>¸¦ ½ÇÇà½Ã۸é À§¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ ¼¼°³ÀÇ Ã¢ÀÌ ¶á´Ù.
¿©±â¿¡¼­´Â ÀÌ·± »óȲ¿¡¼­ ´ÙÀ½°ú °°Àº ´Ü°èº° Á¢±ÙÀ¸·Î À§¿¡¼­ Á¤ÀǵÈ
±â´ÉÀ» °¡Áø ÅØ½ºÆ® ¿¡µðÅ͸¦ °³¹ßÇÏ´Â ¸ð½ÀÀ» »ìÇǵµ·Ï ÇÑ´Ù:

<sect1>°³¹ß ù¹øÂ° ´Ü°è - ¹ÙÅÁ À©µµ¿ì
<p>

<descrip>
<tag>¹ÙÅÁ À©µµ¿ì - »ý¼º</tag>
<p>
¿ì¼± ÅØ½ºÆ® ¿¡µðÅÍÀÇ ¹ÙÅÁÀÌ µÇ´Â âÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ±×·²·Á¸é À§Á¬
ÆÈ·¹Æ® À©µµ¿ì¿¡¼­ ´ÙÀ½ ±×¸²ÀÇ ¿ÞÂÊ »ó´ÜÀÇ À§Á¬À» Ŭ¸¯Çؼ­ ¸¸µé ¼ö ÀÖ´Ù.

<!-- ±×¸² 9 : window_ctl -->
<figure>
<eps file="images/windowctl.eps" height="91pt">
<img src="images/window_ctl.gif">
<caption><label id="fig_9">À©µµ¿ì À§Á¬</caption>
</figure>

±×·¯¸é ´ÙÀ½ ±×¸²°ú °°Àº ¹ÙÅÁ âÀ» ¾ò´Â´Ù.  ÀÌ ±×¸²À» ÀÚ¼¼È÷ º¸¸é »ç¼±
°ÝÀÚµéÀÌ ÃÎÃÎÈ÷ ȸ»öÀ¸·Î ±×·ÁÁ® ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ·± Ç¥½Ã´Â
¾ÕÀ¸·Îµµ ³ª¿À°ÚÁö¸¸ ¹«¾ð°¡¸¦ ºÙÀÏ ¼ö ÀÖ´Â °÷À̶ó´Â ¾ê±âÀÌ´Ù. ¸¶Ä¡ Á¢Âø½Ä
¾Ù¹üÀÇ ºñ´ÒÀ» µé¾î ¿Ã¸®¸é ³ªÅ¸³ª´Â Á¢ÂøÁ¦ »ç¼±°ú °°Àº °ÍÀ̶ó°í »ý°¢ÇÒ ¼ö
ÀÖ°Ú´Ù.

<!-- ±×¸² 10 : bottom_window1 -->
<figure>
<eps file="images/bottomwindow1.eps" height="328pt">
<img src="images/bottom_window1.gif">
<caption><label id="fig_10">¹ÙÅÁ À©µµ¿ì</caption>
</figure>

ÀÌÁ¦´Â ¿©±â¿¡´Ù ÇÊ¿äÇÑ À§Á¬µéÀ» ºÙ¿©¾ß µÇ°Ú´Ù. ¸ÕÀú ÇÊ¿äÇÑ °ÍµéÀ»
»ý°¢Çغ¸¸é ¸Þ´º, Åø¹Ù, ÅØ½ºÆ® ¹Ú½º, ±×¸®°í »óÅ ¹Ù°¡ ÀÖ°Ú´Ù. À̰ÍÀ» ±×³É
Çϳª¾¿ Çϳª¾¿ ºÙÀÏ ¼ö ÀÖÀ»±î. ¹Ù·Î À§ÀÇ ±×¸²À» ÀÚ¼¼È÷ º¸¸é ºÙÀÏ ¼ö ÀÖ´Â
Á¢ÂøÁ¦ ºÎºÐÀº Ä¿´Ù¶þÁö¸¸ ±¸È¹ÀÌ ³ª´©¾îÁ® ÀÖÁö ¾Ê´Ù. Áï ÇϳªÀÇ
°´Ã¼¸¸À» ºÙÀÏ ¼ö ÀÖ´Ù´Â ¾ê±â°¡ µÈ´Ù. ±×·¯¹Ç·Î ¾î¶»°Ô ÇØ¾ß ÇÒ ±î?

<tag>¹ÙÅÁ À©µµ¿ì - ¸Þ´º¹Ù À§Á¬ ºÙÀ̱â</tag>
<p>
´äÀº À§¿¡¼­ ¾ð±ÞÇÑ ¹Ù ÀÖ´Â, ´ÙÀ½ ±×¸²°ú °°Àº  <em>¼öÁ÷ ¹Ú½º</em>¶ó´Â
À§Á¬À» »ç¿ëÇÏ¸é µÈ´Ù.  À̰ÍÀ» ºÙÀÌ¸é ±× ±× À§¿¡ ¿©·¯°³ÀÇ Á¢Âø °¡´ÉÇÑ
±¸È¹ÀÌ »ý±â°Ô µÇ¾î ¿©·¯°¡Áö À§Á¬µéÀ» ºÙÀÏ ¼ö ÀÖ°Ô µÈ´Ù.

<!-- ±×¸² 11 : vbox_ctl -->
<figure>
<eps file="images/vboxctl.eps" height="66pt">
<img src="images/vbox_ctl.gif">
<caption><label id="fig_11">¼öÁ÷ ¹Ú½º À§Á¬</caption>
</figure>

À̰ÍÀ» Ŭ¸¯ÇÏ¸é ¸¶¿ì½º°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î ¹Ù²ï´Ù. ÀÌ ¶§ ÀÌ ¸¶¿ì½º Ä¿¼­¸¦
¹ÙÅÁ À©µµ¿ì¿¡ ´ë°í Ŭ¸¯ÇÏ¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ ¸î °³ÀÇ ¼öÁ÷ ¹Ú½º¸¦ ¸¸µé
°ÍÀΰ¡¸¦ ¹¯´Â ´ëÈ­»óÀÚ°¡ ³ªÅ¸³­´Ù.

<!-- ±×¸² 12 : new_vertical_box_dlg -->
<figure>
<eps file="images/newverticalboxdlg.eps" height="155pt">
<img src="images/new_vertical_box_dlg.gif">
<caption><label id="fig_12">¼öÁ÷ ¹Ú½º À§Á¬ °³¼ö¸¦ ¹¯´Â ´ëÈ­»óÀÚ</caption>
</figure>

¿©±â¼­ ¿ì¸®´Â 4¸¦ ÀÔ·ÂÇÏÀÚ. ¿Ö³Ä¸é ¹ÙÅÁ â¿¡ ºÙÀ̰íÀÚ ÇÏ´Â °´Ã¼°¡
4°³À̱⠶§¹®ÀÌ´Ù. OK¸¦ ´©¸£¸é ´ÙÀ½°ú °°ÀÌ ¹ÙÅÁ âÀÌ Æòµî ºÐÇÒµÇ¾î ³ªÅ¸³¯
°ÍÀÌ´Ù. 

<!-- ±×¸² 13 : after_vbox -->
<figure>
<eps file="images/aftervbox.eps" height="328pt">
<img src="images/after_vbox.gif">
<caption><label id="fig_13">¼öÁ÷ ¹Ú½º¸¦ ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì ¸ð½À</caption>
</figure>

ÀÚ ÀÌÁ¦´Â ÀÌ ³×°³ÀÇ ±¸È¹ °¢°¢¿¡´Ù ¸Þ´º¹Ù, Åø¹Ù, ÅØ½ºÆ® ¹Ú½º, ±×¸®°í »óÅÂ
¹Ù¸¦ ºÙ¿© º¸µµ·Ï ÇÏÀÚ. ¸ÕÀú ¸Þ´º¹Ù¸¦ ºÙÀÌ·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ »ý±ä
¸Þ´º¹Ù widgetÀ» À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡¼­ Ŭ¸¯ÇÏ¿© ¼±ÅÃÇÑ´Ù.

<!-- ±×¸² 14 : menu_ctl -->
<figure>
<eps file="images/menuctl.eps" height="57pt">
<img src="images/menu_ctl.gif">
<caption><label id="fig_14">¸Þ´º À§Á¬</caption>
</figure>

±×¸®°í ¹ÙÅÁ â ³× ±¸È¹ Áß °¡Àå À§¿¡ ÀÖ´Â ±¸È¹À» Ŭ¸¯ÇÑ´Ù.
±×·¯¸é ¹ÙÅÁ È­¸éÀº ´ÙÀ½°ú °°ÀÌ º¯ÇÑ´Ù.

<!-- ±×¸² 15 : after_menu_ctl -->
<figure>
<eps file="images/aftermenuctl.eps" height="328pt">
<img src="images/after_menu_ctl.gif">
<caption><label id="fig_15">¸Þ´º À§Á¬À» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

À̰ÍÀ» ÀÚ¼¼È÷ º¸¸é Á¢ÂøÁ¦°¡ ¹ß¶óÁ® ÀÖ´Â ºÎºÐÀº 3°³·Î ÁÙ¾îµç °ÍÀ» ¾Ë ¼ö
ÀÖ´Ù. Á¶±Ý Àü¿¡ ÃÖ»ó´Ü¿¡ ºÙÀÎ ¸Þ´º ºÎºÐÀº Á¢ÂøÁ¦°¡ ¾Æ´Ñ °ÍÀ» ¶ÇÇÑ ¾Ë ¼ö
ÀÖ´Ù.  ±×·¯³ª À̺κÐÀº º°·Î ¸Þ´º °°¾Æ º¸ÀÌÁö ¾Ê´Ù. ¿Ö³Ä¸é ½ÇÁ¦·Î ¸Þ´º¸¦
ÀÔ·ÂÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ±×·¸´Ù¸é ¸Þ´º¸¦ ÀÌÁ¦ ³Ö¾î º¸ÀÚ.

¹ÙÅÁ À©µµ¿ìÀÇ Á¶±Ý Àü¿¡ ºÙÀÎ ¸Þ´º¸¦ Ŭ¸¯Çϸé ÇÁ·ÎÆÛƼ À©µµ¿ì°¡ ´ÙÀ½
±×¸²Ã³·³ ³ªÅ¸³­´Ù. À̰÷À» ÀÚ¼¼È÷ º¸¸é ´Ù¸¥ À§Á¬À» Ŭ¸¯Çؼ­ ¼±ÅÃÇÒ ¶§¿Í´Â
´Ù¸£°Ô ¸Þ´º ÆíÁý(<em>Edit Menus...</em>)À̶ó´Â ¹öưÀÌ Çϳª ´õ ÀÖ´Ù. 
À̰ÍÀ» Ŭ¸¯ÇÏÀÚ.

<!-- ±×¸² 16 : edit_menu_button -->
<figure>
<eps file="images/editmenubutton.eps" height="398pt">
<img src="images/edit_menu_button.gif">
<caption><label id="fig_16">¸Þ´º ÆíÁý ¹öư</caption>
</figure>

±×·¯¸é À§¿¡¼­ º» <em>±×¸² 5</em>¿Í °°Àº È­¸éÀÌ ¶á´Ù. ¿©±â¿¡ ´ÙÀ½
±×¸²Ã³·³ ÆíÁýÇØ¼­ ³Öµµ·Ï ÇÏÀÚ. ´Ü ¸ðµÎ ±âº»ÀûÀ¸·Î Á¦°øµÇ´Â <em>Stock
Item</em>À» »ç¿ëÇØ¼­ ¸¸µç °ÍÀÌ´Ù. ¸ÕÀú <em>Add</em> ¹öưÀ» ´­·¯¼­ ÇϳªÀÇ
¾ÆÀÌÅÛÀ» ¸¸µç µÚ¿¡ <em>Stock Item</em> ÄÞº¸ ¹Ú½º¸¦ Ŭ¸¯Çؼ­ ¹Ì¸® ¸¶·ÃµÈ
¾ÆÀÌÅÛÀ» ¼±ÅÃÇϸé Á¶±Ý Àü¿¡ ¸¸µé¾îÁø °ÍÀÌ ¿øÇÏ´Â °ÍÀ¸·Î ¹Ù²ï´Ù. ±×¸®°í
<em>Name</em>ÀÌ Çѱ۷Π³ª¿Ã °æ¿ì, À̰ÍÀº ³ªÁß¿¡ ¾Ë°Ô µÇ°ÚÁö¸¸ ¼Ò½º »ý¼º
ÈÄ ¼Ò½º ³»ºÎ¿¡¼­ ¸ðµÎ ±úÁö°Å³ª ¹ØÁٷΠǥ±âµÇ¾î ¹¹°¡ ¹ºÁö ¸ð¸£°Ô µÈ´Ù. ÀÌ
¶§´Â <em>Name</em>À» ÀûÀýÇÑ °ÍÀ¸·Î ¹Ù²ÙÀÚ. Áï <em>»õ·Î¿î</em>À̶ó¸é
<em>New</em>À¸·Î ¹Ù²ÙÀÚ. ±×·¯¸é ÀÚµ¿À¸·Î ±× ¾Æ·¡¿¡ ÀÖ´Â
<em>Handler</em>°¡ ¹Ù²ï´Ù. Á¤¸» ÁÁ´Ù.  ±×¸®°í ¿ÞÂÊ ¸®½ºÆ® â¿¡ ÀÖ´Â
<em>Label</em>¿¡ ÇØ´çÇÏ´Â °ÍµéÀº ±× ¾Æ·¡¿¡ ÀÖ´Â ¹æÇ⼺ ÀÖ´Â È­»ìÇ¥
µîÀ¸·Î Á¦¾îµÇ´Â °ÍÀ¸·Î½á ¸Þ´ºÀÇ ±íÀÌ ¹× °èÃþ ±¸Á¶¸¦ ²Ù¹Ð ¶§ »ç¿ëµÈ´Ù.

<!-- ±×¸² 17 : menu_editor_sample -->
<figure>
<eps file="images/menueditorsample.eps" height="474pt">
<img src="images/menu_editor_sample.gif">
<caption><label id="fig_17">¸Þ´º ÆíÁý ¿¹Á¦</caption>
</figure>

<tag>¹ÙÅÁ À©µµ¿ì - Åø¹Ù À§Á¬ ºÙÀ̱â</tag>
ÀÚ ÀÌÁ¦´Â ¹ÙÅÁ À©µµ¿ì¿¡ ´ÙÀ½ ±×¸²°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ®¿¡ ÀÖ´Â  Åø¹Ù À§Á¬À»
ºÙ¿© º¸µµ·Ï ÇÏÀÚ. 

<!-- ±×¸² 18 : toolbar_widget -->
<figure>
<eps file="images/toolbarwidget.eps" height="65pt">
<img src="images/toolbar_widget.gif">
<caption><label id="fig_18">Åø¹Ù À§Á¬</caption>
</figure>

À̰ÍÀ» Ŭ¸¯ÇÏ¸é ¸¶¿ì½º Ä¿¼­°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î º¯ÇÑ´Ù. À̰ÍÀ» ¿ì¸®°¡
¿øÇÏ´Â À§Ä¡ÀÎ À§¿¡¼­ µÎ¹øÂ° Ä­¿¡ ³õ°í Ŭ¸¯ÇÑ´Ù. ±×·¯¸é ´ÙÀ½°ú °°ÀÌ
¸î°³ÀÇ Åø¹Ù¸¦ ¿øÇϴ°¡ÇÏ´Â ´ëÈ­ »óÀÚ°¡ ¶á´Ù.

<!-- ±×¸² 19 : new_tool_bar_dlg -->
<figure>
<eps file="images/newtoolbardlg.eps" height="155pt">
<img src="images/new_tool_bar_dlg.gif">
<caption><label id="fig_19">Åø¹ÙÀÇ ¹öư ¼ö¸¦ ¹¯´Â ´ëÈ­»óÀÚ</caption>
</figure>

¿©±â¿¡ ¿øÇÏ´Â °³¼ö(ÀÌ °æ¿ì´Â 4°³)¸¦ ÀÔ·ÂÇϰí OK¸¦ Ŭ¸¯ÇÏ¸é ´ÙÀ½ ±×¸²
ó·³ µÎ¹øÂ° ÇàÀÌ 4°³ÀÇ »õ·Î¿î Á¢ÂøÆÇÀ» °¡Áø °ÍÀ¸·Î º¯°æµÇ´Â °ÍÀ» º¼ ¼ö
ÀÖ´Ù.

<!-- ±×¸² 20 : after_toolbar -->
<figure>
<eps file="images/aftertoolbar.eps" height="328pt">
<img src="images/after_toolbar.gif">
<caption><label id="fig_20">Åø¹Ù¸¦ ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

ÀÚ ÀÌÁ¦´Â ÀÌ »õ·Î »ý±ä Á¶±×¸¸ 4°³ÀÇ Á¢ÂøÆÇ¿¡´Ù Åø¹Ù¹öưµéÀ» Áý¾î ³Ö¾î¾ß
ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ®¿¡¼­ ¹öư À§Á¬À» ¼±ÅÃÇØ¾ß
ÇÑ´Ù.

<!-- ±×¸² 21 : button_widget -->
<figure>
<eps file="images/buttonwidget.eps" height="60">
<img src="images/button_widget.gif">
<caption><label id="fig_21">¹öư À§Á¬</caption>
</figure>

À̰ÍÀ» ¼±ÅÃÇÑ ÈÄ ¸¶¿ì½º¸¦ ¹ÙÅÁ À©µµ¿ì µÎ¹øÂ° Çà ù¹øÂ° Á¢ÂøÆÇÀ¸·Î
°¡Á® °¡¸é Ä¿¼­°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î º¯ÇÑ´Ù. À̰ÍÀ» Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ
¹ÙÅÁ È­¸éÀÌ º¯ÇÑ´Ù.

<!-- ±×¸² 22 : after_attach_one_button -->
<figure>
<eps file="images/afterattachonebutton.eps" height="328pt">
<img src="images/after_attach_one_button.gif">
<caption><label id="fig_22">ÇѰ³ÀÇ ¹öưÀ» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

ÀÌ ¶§ º¯°æµÈ ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ ÀÚ¼¼È÷ º¸¸é <em>Icon</em>
¿·¿¡ ¾Æ·¡¸¦ °¡¸£Å°´Â ÄÞº¸¹Ú½º ¹öưÀÌ ÀÖ´Ù. À̰ÍÀ» ´©¸£¸é ´ÙÀ½°ú °°Àº
¹Ì¸® Á¤ÀÇµÈ <em>Stock Icon</em>µéÀÌ ³ª¿Â´Ù.

<!-- ±×¸² 23 : button_stock -->
<figure>
<eps file="images/buttonstock.eps" height="692pt" angle="90">
<img src="images/button_stock.gif">
<caption><label id="fig_23">¹Ì¸® ÁغñµÈ ¹öưµé</caption>
</figure>

¿©±â¿¡ º¸ÀÌ´Â °Í ¸»°íµµ ¾Æ·¡·Î ½ºÅ©·Ñ Çϸé Á¤¸» ¸¹°í ¿¹»Û ¾ÆÀÌÄܵéÀÌ
ÁغñµÇ¾î ÀÖÀ½¿¡ ³î¶ö °ÍÀÌ´Ù. ÀÌ Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÏÀÚ. ±×¸®°í
ÇÁ·ÎÆÛƼ¿¡¼­ <em>Label</em> ºÎºÐÀ» ¾ÆÀÌÄÜ¿¡ ¸ÂÃß¾î ¹Ù²Ùµµ·Ï ÇÏÀÚ..
±×¸®°í¼­ ³ª¸ÓÁö ¼¼°³ÀÇ Á¢ÂøÆÇµé¿¡ ¿øÇÏ´Â °ÍÀ» ³ÖÀ¸¸é µÇ°Ú´Ù.  ±×·¯¸é
´ÙÀ½ ±×¸²°ú °°Àº °ÍÀ» ¾ò´Â´Ù.

<!-- ±×¸² 24 : after_attach_all_buttons -->
<figure>
<eps file="images/afterattachallbuttons.eps" height="328pt">
<img src="images/after_attach_all_buttons.gif">
<caption><label id="fig_24">Åø¹Ù¿¡ ¸ðµç ¹öưµéÀ» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

<tag>¹ÙÅÁ À©µµ¿ì - ÅØ½ºÆ® ¹Ú½º À§Á¬ ºÙÀ̱â</tag>
´ÙÀ½Àº ¼¼¹øÂ° Çà¿¡´Ù ´ÙÀ½°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡ ÀÖ´Â ÅØ½ºÆ® ¹Ú½º
À§Á¬À» ¼±ÅÃÇÏ¿© ºÙ¿© º¸µµ·Ï ÇÏÀÚ.

<!-- ±×¸² 25 : text_box_widget -->
<figure>
<eps file="images/textboxwidget.eps" height="54pt">
<img src="images/text_box_widget.gif">
<caption><label id="fig_25">ÅØ½ºÆ® ¹Ú½º À§Á¬</caption>
</figure>

À̰ÍÀ» Ŭ¸¯ÇÑ ÈÄ ¸¶¿ì½º¸¦ ¿¹ÀÇ ¹ÙÅÁ À©µµ¿ì ¼¼¹øÂ° ÇàÀ¸·Î ¿Å±â¸é Ä¿¼­°¡
½ÊÀÚ°¡·Î ¹Ù²ï´Ù. Ŭ¸¯ÇÏÀÚ ±×·¯¸é ´ÙÀ½ ±×¸²Ã³·³ ¹ÙÅÁ À©µµ¿ì°¡ º¯ÇÑ´Ù.

<!-- ±×¸² 26 : after_attach_text_box -->
<figure>
<eps file="images/afterattachtextbox.eps" height="328pt">
<img src="images/after_attach_text_box.gif">
<caption><label id="fig_26">ÅØ½ºÆ® ¹Ú½º À§Á¬À» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

±×·±µ¥ ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ º¸¸é <em>Editable</em>ÀÌ µðÆúÆ®·Î
<em>No</em>À¸·Î µÇ¾î ÀÖ´Ù. À̰ÍÀº <em>Yes</em>·Î º¯°æÇؾ߸¸ ³ªÁß¿¡
ÅØ½ºÆ®¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ ÀüüÀûÀÎ Å©±â°¡ ¸¶À½¿¡ µéÁö ¾ÊÀ» ¼ö
ÀÖ´Ù. ±×·±µ¥ ³»ºÎÀÇ À§Á¬ Å©±â¸¦ º¯°æÇÏ´Â °Íº¸´Ù ¹Ù±ù ¹ÙÅÁ À©µµ¿ìÀÇ
Å©±â¸¦ Á¶Á¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ ±×¸² ó·³ ¹ÙÅÁ À©µµ¿ìÀÇ Å©±â ¼Ó¼ºÀ»
º¯°æÇϵµ·Ï ÇÏÀÚ. ±×·¯¸é ³ªÁß¿¡ ½ÇÇà °á°ú°¡ ÀÌ¿¡ ¸ÂÃçÁú °ÍÀÌ¸ç ³ª¸ÓÁö ÀÌ
¹ÙÅÁ À©µµ¿ì°¡ ǰ°í ÀÖ´Â °´Ã¼µéÀÇ Å©±â´Â ÀûÀýÇÏ°Ô ¹èºÐµÉ °ÍÀÌ´Ù.

<!-- ±×¸² 27 : trim_main_window -->
<figure>
<eps file="images/trimmainwindow.eps" height="398pt">
<img src="images/trim_main_window.gif">
<caption><label id="fig_27">¹ÙÅÁ À©µµ¿ìÀÇ Å©±â Á¶Á¤</caption>
</figure>

<tag>¹ÙÅÁ À©µµ¿ì - »óŹ٠À§Á¬ ºÙÀ̱â</tag>
ÀÚ ÀÌÁ¦´Â ¸¶Áö¸·À¸·Î ¹ÙÅÁ À©µµ¿ì¿¡ ´ÙÀ½ ±×¸²°ú °°Àº À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡
ÀÖ´Â »óŹ٠À§Á¬À» ¼±ÅÃÇØ¼­ »óŹ٠À§Á¬À» ºÙ¿© º¸µµ·Ï ÇÏÀÚ.

<!-- ±×¸² 28 : status_bar_widget -->
<figure>
<eps file="images/statusbarwidget.eps" height="66pt">
<img src="images/status_bar_widget.gif">
<caption><label id="fig_28">»óŹ٠À§Á¬</caption>
</figure>

À̰ÍÀ» ¼±ÅÃÇÑ ÈÄ ¸¶Áö¸· ³²Àº Á¢ÂøÆÇ À§¿¡ ¸¶¿ì½º¸¦ °¡Á®°¡¸é ¸¶Âù°¡Áö·Î
½ÊÀÚ°¡ ¸ð¾çÀ¸·Î Ä¿¼­°¡ º¯°æµÈ´Ù. Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¹ÙÅÁ À©µµ¿ì°¡
º¯ÇÑ´Ù.

<!-- ±×¸² 29 : after_all_attach_widget -->
<figure>
<eps file="images/afterallattachwidget.eps" height="328pt">
<img src="images/after_all_attach_widget.gif">
<caption><label id="fig_29">¸ðµç À§Á¬µéÀ» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption>
</figure>

<tag>¹ÙÅÁ À©µµ¿ì - ¸¸µç °ÍÀ» ÀúÀåÇÏ°í ¼Ò½º »ý¼º ±×¸®°í ½ÇÇà</tag>
ÀÌ·Î½á ¿ì¸®´Â ¹ÙÅÁ À©µµ¿ì¸¦ ¸¸µé°í ÀÌ À§¿¡ ¸î°¡Áö GUI °´Ã¼µéÀ» ºÙÀ̰í
¾à°£ÀÇ Á¶Á¤À» ÇØº¸¾Ò´Ù. ¾î¶²°¡? ±×·²µíÇÏÁö ¾Ê´Â°¡. ÀÌÁ¦´Â ´ÙÀ½ ±×¸² ó·³
<bf>GLADE</bf>ÀÇ <em>File</em>¸Þ´º¿¡ ÀÖ´Â <em>Save</em>¸¦ ¼±ÅÃÇØº¸ÀÚ.

<!-- ±×¸² 30 : glade_file_menu -->
<figure>
<eps file="images/gladefilemenu.eps" height="150pt">
<img src="images/glade_file_menu.gif">
<caption><label id="fig_30">GLADEÀÇ ÆÄÀÏ ¸Þ´º</caption>
</figure>

±×·¯¸é ´ÙÀ½ ±×¸²°ú °°Àº <em>Project Options</em>¶ó´Â ´ëÈ­»óÀÚ°¡ ¶á´Ù.
¿©±â¿¡ ÀûÀýÇÑ °ªÀ» ÀÔ·ÂÇϰí OK¸¦ ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ÀúÀåµÈ´Ù. ´Ü, »ý¼ºµÉ
¾ð¾î·Î´Â C¸¦ ¼±ÅÃÇϵµ·Ï ÇÏÀÚ.

<!-- ±×¸² 31 : project_options_dlg -->
<figure>
<eps file="images/projectoptionsdlg.eps" height="383pt">
<img src="images/project_options_dlg.gif">
<caption><label id="fig_31">GLADEÀÇ ÇÁ·ÎÁ§Æ® ¿É¼Ç ´ëÈ­»óÀÚ</caption>
</figure>

±×¸®°í À§¿¡¼­ º» <em>File</em> ¸Þ´ºÀÇ <em>Build Source Code</em>À»
¼±ÅÃÇÏ¸é ´«¿¡ º¸ÀÌÁö ¾ÊÁö¸¸ ¼Ò½º°¡ »ý¼ºµÈ´Ù. À§ÀÇ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÏ´Â
°÷¿¡¼­ ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ °¡º¸¸é <tt>src</tt>¶ó´Â µð·ºÅ丮°¡ ÀÖ´Â µ¥
¿©±â¿¡ ¸ðµç ¼Ò½º°¡ »ý¼ºµÈ´Ù. ¾Æ½±°Ôµµ ¹Ù·Î ¹º°¡¸¦ Ŭ¸®Çؼ­ »ý¼ºµÈ ¼Ò½º¸¦
°¡Áö°í ½ÇÇà ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº ¾ÆÁ÷ ¾ø´Ù. ±×·¡¼­ ¾î¿¼ö ¾øÀÌ ½©À»
ÅëÇØ¼­ ½ÇÇà ÆÄÀÏÀ» ¸¸µé¼ö¹Û¿¡ ¾ø´Ù.  ÇÁ·ÎÁ§Æ®ÀÇ ·çÆ® µð·ºÅ丮¸¦ <em>ls</em>·Î
Ãâ·ÂÇØº¸°í ¿©±â¿¡ ¸¶·ÃµÈ <tt>autogen.sh</tt>¸¦ ½ÇÇàÇϸé ȯ°æ ¼³Á¤ÀÌ
ÀÌ·ç¾îÁø´Ù. 

<!-- ±×¸² 32 : ls_and_begin -->
<figure>
<eps file="images/lsandbegin.eps" height="384pt">
<img src="images/ls_and_begin.gif">
<caption><label id="fig_32"><tt>ls</tt>¸í·É°ú <tt>autogen.sh</tt>½ÇÇà È­¸é</caption>
</figure>

±×¸®°í ³ª¼­ <tt>make</tt>À» ½ÇÇàÇÏ¸é ¿øÇÏ´Â ½ÇÇà ÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù.
<tt>make</tt>ÀÇ °á°ú´Â <tt>src</tt>¿¡ ÇÁ·ÎÁ§Æ® À̸§À» °¡Áø ½ÇÇà ÆÄÀÏÀÌ
»ý±â´Â °ÍÀÌ´Ù. À̰ÍÀ» ½ÇÇàÇÑ °á°ú´Â ´ÙÀ½°ú °°´Ù.

<!-- ±×¸² 33 : first_exec -->
<figure>
<eps file="images/firstexec.eps" height="180pt">
<img src="images/first_exec.gif">
<caption><label id="fig_33">ù¹øÂ° ½ÇÇà °á°ú</caption>
</figure>

<tag>¹ÙÅÁ À©µµ¿ì - ½ÇÇà ÈÄ Á×À̱â</tag>
ÀÌÁ¦ Á¾·áÇØº¸ÀÚ. º¸Åë ÇϵíÀÌ ¿À¸¥ÂÊ À§¿¡ ÀÖ´Â ´Ý±â ¹öưÀ» ´­·¯µµ ¿ì¸®°¡
¸¸µç ¾îÇø®ÄÉÀ̼ÇÀº Á×Áö ¾Ê´Â´Ù. ¾Æ»Ô»ç. ¿ì¸®´Â ºÒ»ç½ÅÀ» ¸¸µé¾î³½
°ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ ºÒ»ç½ÅÀ» Á׿©º¸µµ·Ï ÇÏÀÚ. ±×·²·¯¸é ÀÌÀü¿¡ ¾ê±âÇÑ <ref
id="GTK_tutorial" name="GTK Æ©Å͸®¾ó"> ¼½¼Ç¿¡ ÀÖ´Â ½Ã±×³ÎÀ» ¾Ë¾Æ¾ß ÇÏ°í °¡Àå ±âº»ÀûÀÎ
<bf>delete_event</bf>¶ó´Â ½Ã±×³ÎÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. À̰ÍÀº ´Ù¸¥ °ÍÀÌ ¾Æ´Ï°í
½ÇÇà ÆÄÀÏÀÇ <em>close</em> ¸Þ´º<footnote>À̰ÍÀº â°ü¸®ÀÚ°¡ ºÙÀÎ ¸Þ´º¸¦
¸»ÇÑ´Ù. À̰ÍÀº ¿ì¸®°¡ ¸¸µç ¾îÇø®ÄÉÀ̼ÇÀÇ ¸Þ´º¿Í ´Ù¸£´Ù</footnote>¸¦ 
¼±ÅÃÇϰųª <em>title bar</em>¿¡¼­
´Ý±â¸¦ ¼±ÅÃÇϸé X À©µµ¿ì °ü¸®ÀÚ°¡ ½ÇÇà ÆÄÀÏ¿¡°Ô ÀüÇÏ´Â À̺¥Æ®ÀÌ´Ù.
À̰ÍÀ» ¹Þ¾Æ¼­ ó¸®ÇÏ·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ ¹ÙÅÁ À©µµ¿ìÀÇ ÇÁ·ÎÆÛƼ
À©µµ¿ìÀÇ ¿©·¯ Åǵé Áß¿¡¼­ ½Ã±×³Î ÅÇ¿¡¼­ ½Ã±×³Î Çڵ鷯 À̸§°ú ÇÔ²²
µî·ÏÇØÁÖ¾î¾ß ÇÑ´Ù.

<!-- ±×¸² 34 : main_delete_event -->
<figure>
<eps file="images/maindeleteevent.eps" height="411pt">
<img src="images/main_delete_event.gif">
<caption><label id="fig_34">¹ÙÅÁ À©µµ¿ì <tt>window1</tt>ÀÇ <tt>delete_event</tt></caption>
</figure>

±×·¯¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ µî·ÏµÉ °ÍÀÌ´Ù.

<!-- ±×¸² 35 : after_main_delete_event -->
<figure>
<eps file="images/aftermaindeleteevent.eps" height="398pt">
<img src="images/after_main_delete_event.gif">
<caption><label id="fig_35">µî·Ï ÈÄÀÇ ¸ð½À</caption>
</figure>

¿©±â¼­ ¿ì¸®´Â ÀÚµ¿À¸·Î ½Ã±×³Î Çڵ鷯 À̸§ÀÌ
<tt>on_window1_delete_event</tt>°¡ µÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. À̰ÍÀ» ±×´ë·Î
¾²ÀÚ. À̰ͱîÁö ±×¸®°í »ý¼ºµÉ ³»ºÎ ¼Ò½º¿¡ ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦
¿¬°á½ÃÄÑÁÖ´Â °Í±îÁö´Â <bf>GLADE</bf>°¡ ÇØÁÖ´Â °ÍÀÌ´Ù. ÀÚ ÀÌÁ¦ À§ÀÇ
½ºÅÜó·³ ¼Ò½º¸¦ »ý¼ºÇغ¸ÀÚ. ±×¸®°í ÀÌ ½Ã±×³Î
Çڵ鷯 ¾È¿¡¼­ ¿ì¸®´Â ÇØ¾ß ÇÒ ÀÏÀ» ÇØº¸µµ·Ï ÇÏÀÚ. ´Ù¸¥ °ÍÀº ¾Æ´Ï°í ´ÙÀ½°ú
°°ÀÌ <tt>src/callbacks.c</tt>¾È¿¡ ÀÖ´Â À§ÀÇ
<tt>on_window1_delete_event</tt> ÇÔ¼ö ³»ºÎ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¸é µÈ´Ù.
<verb>
gboolean
on_window1_delete_event (GtkWidget *widget, GdkEvent *event, 
		gpointer user_data)
{
	gtk_exit( 0 );
	return FALSE;
}
</verb>
±×¸®°í¼­ <tt>make</tt>Çϰí(´Ù½Ã <tt>autoget.sh</tt>¸¦ ½ÇÇàÇÒ ÇÊ¿ä´Â
¾ø´Ù. ±×·¯³ª Çѹø ¼Ò½º¸¦ Àç»ý¼ºÇÒ ¶§¸¶´Ù <tt>make</tt>½Ã ¸ðµç Äڵ尡
ÀçÄÄÆÄÀ쵃 °ÍÀÌ´Ù) ½ÇÇàÇØº¸µµ·Ï ÇÏÀÚ. ÀÌÁ¦ Á¾·áÇϸé Á¦´ë·Î Á¾·áµÉ °ÍÀÌ´Ù.
</descrip>

¾ÕÀ¸·Î ¿ì¸®´Â GLADE ÀÇ ÀÛ¾÷ ´ë»óÀÌ µÇ´Â °´Ã¼¸¦ Æû, ¶Ç´Â ÅÛÇø´À̶ó°í 
ºÎ¸£ÀÚ. ±×¸®°í
½ÇÁ¦ ½ÇÇàµÈ ÈÄÀÇ °á°ú´Â ±× °á°úÀÇ ¼Ó¼º´ë·Î ºÎ¸£±â·Î ÇÏÀÚ. ¿¹¸¦ µé¾î¼­
<em>¹ÙÅÁ À©µµ¿ì Æû</em> ¿¡¼­ ¹«¾ù ¹«¾ùÀ» ÀÛ¾÷Çϸé <em>¹ÙÅÁ À©µµ¿ì</em>¿¡
¾î¶² ¾î¶² È¿°ú°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù¶ó´Â ½ÄÀ¸·Î Ç¥ÇöÇϱâ·Î ÇÏÀÚ.

<sect1>°³¹ß µÎ¹øÂ° ´Ü°è - about ´ëÈ­»óÀÚ
<p>
¸¹Àº <bf>gnome</bf> ÇÁ·Î±×·¥µéÀº Ç¥ÁØÈ­µÈ ·è¾ØÇÊÀ» °®´Â´Ù. ÀÌ Áß¿¡¼­µµ
¸Þ´º, Åø¹Ù, »óŹÙ, ±×¸®°í about ´ëÈ­ »óÀÚ°¡ µÎµå·¯Áø´Ù. ¹°·Ð ´Ù¸¥ °Íµµ
ÀÖ´Ù. ¿¹¸¦ µé¸é »ö»óÇ¥ ´ëÈ­ »óÀÚ, ÆÄÀÏ ¼±Åñâ(À©µµ¿ìÁîÀÇ File Open,
Save, Save As¿Í À¯»ç) µîÀÌ ±×°ÍÀÌ´Ù. ¿ì¸®´Â ¿©±â¼­ about ´ëÈ­ »óÀÚ¸¦
¸¸µé°í À̰ÍÀ» ³Ö¾î º¸µµ·Ï ÇÏÀÚ.

<descrip>
<tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¸¸µé±â</tag>
´ëÈ­ »óÀÚ¸¦ ¸¸µé ¶§ <bf>GTK+</bf>°¡ Á¦°øÇÏ´Â ´ëÈ­»óÀÚ À§Á¬À» ±×´ë·Î
»ç¿ëÇØ¼­ ±× À§¿¡ ´Ù¸¥ ¿©·¯ À§Á¬µéÀ» ºÙ¿©¼­ ¸¸µé¾îµµ µÇ°í,
<bf>gnome</bf>ÀÌ Á¦°øÇÏ´Â ´ÙÀ½°ú °°Àº À§Á¬À» »ç¿ëÇÏ¿© ´õ ½±°Ô ¸¸µé ¼öµµ
ÀÖ´Ù. ¿ì¸®´Â À̰ÍÀ» ÅÃÇØº¸µµ·Ï ÇÏÀÚ.

<!-- ±×¸²36 : gnome_about_dlg_widget -->
<figure>
<eps file="images/gnomeaboutdlgwidget.eps" height="92pt">
<img src="images/gnome_about_dlg_widget.gif">
<caption><label id="fig_36">GNOMEÀÇ About ´ëÈ­»óÀÚ À§Á¬</caption>
</figure>

À̰ÍÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°í °°Àº ´ëÈ­»óÀÚ°¡ ³ªÅ¸³­´Ù. 

<!-- ±×¸² 37 : 1st_step_about_dlg -->
<figure>
<eps file="images/1ststepaboutdlg.eps" height="201pt">
<img src="images/1st_step_about_dlg.gif">
<caption><label id="fig_37">GNOMEÀÇ About ´ëÈ­»óÀÚ Ãʱ⠸ð½À</caption>
</figure>

¿ì¸®´Â ÀÌ ¶§, °°ÀÌ º¯ÇÑ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ <em>Copyright</em>,
<em>Author</em>, <em>Comments</em>, ±×¸®°í <em>Logo</em>¸¦ ¹Ù²Ù¾î¼­ ÀÌ
about ´ëÈ­»óÀÚ¸¦ ´ÜÀå½ÃÄÑ º¸µµ·Ï ÇÏÀÚ.  ¸ÕÀú <em>Copyright</em>¿Í
<em>Author</em>, <em>Comments</em>´Â ´ÙÀ½ ±×¸²Ã³·³ º¯°æÇÑ´Ù.

<!-- ±×¸² 38 : copy_author_comment -->
<figure>
<eps file="images/copyauthorcomment.eps" height="409pt">
<img src="images/copy_author_comment.gif">
<caption><label id="fig_38">GNOMEÀÇ About ´ëÈ­»óÀÚ ¼ÕÁúÈÄÀÇ ¸ð½À</caption>
</figure>

½ÇÁ¦ ¶È°°ÀÌ ÇØº¸½Ã¸é ¾Ë°ÚÁö¸¸ ÀÌµé ³»¿ëÀÌ ¸¹¾ÆÁö¸é ´ëÈ­»óÀÚÀÇ Àüü Å©±â
µîÀÌ ÀÚµ¿À¸·Î ´Ã¾îµé¾ú´Ù ÁÙ¾îµé¾ú´Ù ÇÑ´Ù.

±×¸®°í ¸¶Áö¸·À¸·Î <em>Logo</em>¸¦ ÁöÁ¤Çغ¸µµ·Ï ÇÏÀÚ. ÀÌ·¸°Ô ÇÏ·Á¸é
<em>Logo</em> ¿·ÀÇ ÆíÁý¹Ú½º¿¡ Á÷Á¢ ÆÐ½º¸¦ ÀÔ·ÂÇØµµ µÇ°í ±× ¿·¿¡ ÀÖ´Â
»ý·«ÇüÀ» Ŭ¸¯Çؼ­ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¸¦ ºÒ·¯ À̰ÍÀ» ÅëÇØ¼­ ¼±ÅÃÇØµµ µÈ´Ù.

<!-- ±×¸²39 : after_logo -->
<figure>
<eps file="images/afterlogo.eps" height="583pt">
<img src="images/after_logo.gif">
<caption><label id="fig_39">GNOMEÀÇ About ´ëÈ­»óÀÚ¿¡ ·Î°í¸¦ ³ÖÀº ¸ð½À</caption>
</figure>

ÀÚ ÀÌÁ¦ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÑ´Ù.

<tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¶ç¿ì±â</tag>
ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÑ µÚ ¼Ò½º¸¦ ¸¸µé¾î ´Ù½Ã <tt>make</tt>¸¦ ÇØµµ ¿ì¸®´Â
ÀÌ»óÇÑ °á°ú¸¦ ¸¸³­´Ù. Áï ¹ÙÅÁ À©µµ¿ì¿Í Á¶±Ý
Àü¿¡ ¸¸µç about ´ëÈ­»óÀÚ°¡ µ¿½Ã¿¡ Æ¢¾î ³ª¿Â´Ù´Â °ÍÀÌ´Ù. 
¾î¶»°Ô ÇÏ¸é µÇ°Ú´Â°¡? ¾îµð¿£°¡¿¡¼­ ¿ì¸®°¡ ¿øÄ¡ ¾Ê´Â ÀÌ·± ¾×¼ÇÀ» ¼öÇàÇÏ´Â
Äڵ尡 ÀÖÀ» °ÍÀÌ´Ù. ´Ù¸§ ¾Æ´Ñ <tt>main.c</tt>ÀÇ <tt>main()</tt> ÇÔ¼ö
³»ÀÌ´Ù. ±×·¸´Ù¸é À̰÷À» º¸°í ´ÙÀ½ ¼¼ ¶óÀÎÀ» ¾ø¾Ö º¸ÀÚ(Áö¿öµµ µÇ°í C
commentó·³ ¸·¾Æµµ µÈ´Ù.)
<verb>
GtkWidget *about1;
.......
about1 = create_about1 ();
gtk_widget_show (about1);
</verb>

¿øÇÏ´Â ´ë·Î about ´ëÈ­»óÀÚ°¡ ½ÇÇà ÆÄÀÏÀ» ½ÇÇàÇÏÀÚ ¸¶ÀÚ ¶ß´Â ÀÏÀº
¾ø¾îÁ³´Ù. ±×·¡µµ ¹®Á¦´Â ³²´Â´Ù. ¾î¶»°Ô ¿øÇÒ °æ¿ì Áï, »ç¿ëÀÚ°¡ ¸Þ´º³ª
Åø¹Ù¸¦ ÅëÇØ¼­ about¸¦ ¼±ÅÃÇÒ °æ¿ì ¿ì¸®ÀÇ about ´ëÈ­»óÀÚ¸¦ ¶ç¿ì´Â ¹æ¹ýÀº
¹«¾ùÀΰ¡? ´ÙÀ½°ú °°Àº Äڵ带 ºñ¾î ÀÖ´Â ¸Þ´º <em>About</em>¿¡ ´ëÇÑ Çڵ鷯
<tt>on_About_activate</tt>(<tt>callbacks.c</tt>¿¡ Á¸Àç) ¾È¿¡ ³Ö¾î ÁÖ¸é
µÈ´Ù.
<verb>
GtkWidget *about1;

about1 = create_about1_dialog ();
gtk_widget_show (about1);
</verb>
À§¿¡¼­ Áö¿ü´ø ÄÚµåÀÌ´Ù. À̰ÍÀ» ¿øÇÏ´Â °÷¿¡ ¿Å±ä°Å³ª ´Ù¸§¾ø´Ù.  ÀÚ
ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇϰí <tt>make</tt>ÇÑ ÈÄ ½ÇÇà ÆÄÀÏÀ» ¸¸µé¾î È®ÀÎÇØº¸ÀÚ.
About ¹öưÀ» ´­·¶À» °æ¿ì¿¡µµ ÀÌ¿Í µ¿ÀÏÇÑ È¿°ú¸¦ ¾òÀ¸·Á¸é ¹ÙÅÁ À©µµ¿ìÀÇ
Åø¹Ù¿¡¼­ About ¹öưÀ» ¼±ÅÃÇÑ µÚ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ ½Ã±×³Î ÅÇ¿¡¼­ À§¿Í
°°ÀÌ ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶). ±×¸®°í ³ª¼­ ÀÌ Çڵ鷯
¾È¿¡ ¸Þ´º¿Í µ¿ÀÏÇÑ Äڵ带 ³Ö¾î ÁÖ¸é µÈ´Ù(¾Æ´Ï¸é °øÅë ÇÔ¼ö¸¦ ¸¸µé¾î À̸¦
È£ÃâÇØµµ µÇ°í).

<!-- ±×¸² 40 : about_button_signal -->
<figure>
<eps file="images/aboutbuttonsignal.eps" height="398pt">
<img src="images/about_button_signal.gif">
<caption><label id="fig_40">About ¹öưÀÇ ½Ã±×³Î</caption>
</figure>

±×·±µ¥ ÀÌ °ÍÀÌ Á¦´ë·Î ½ÇÇàµÈ´Ù ÇÏ´õ¶óµµ ÀÌ»óÇÑ Á¡ÀÌ ÀÖ´Ù. Áï ¿ì¸®°¡
³Ö¾ú´ø ·Î°í°¡ Á¦´ë·Î Ãâ·ÂµÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ¿Ö ±×·²±î?
<bf>GLADE</bf>´Â ¸¸µé¾îÁö´Â ¾îÇø®ÄÉÀ̼ÇÀÇ pixmap µð·ºÅ丮ÀÇ µðÆúÆ®¸¦
"/usr/share/pixmaps" ¾Æ·¡ ¾îÇø®ÄÉÀÌ¼Ç À̸§À¸·Î ¼³Á¤ÇÑ´Ù. Á¤È®ÇϰÔ
¸»Çϸé <tt>gnome-config --datadir</tt>ÀÇ °á°ú°ªÀ»
¾ò¾î¼­<footnote>À̰ÍÀº ´ë°³ "/usr/share" ÀÌ´Ù</footnote> ¿©±â¿¡
"pixmaps" ¿Í ¾îÇø®ÄÉÀÌ¼Ç À̸§À» µ¡ºÙÀÎ °ÍÀÌ ·Î°í µî ±×¸² ÆÄÀÏÀÌ
ÀúÀåµÇ´Â À§Ä¡°¡ µÈ´Ù. 

±×·¯¹Ç·Î »ç¿ëÀÚ°¡ º¹»ç¸¦ ÇϵçÁö ¾Æ´Ï¸é ·çÆ® ±ÇÇÑÀ¸·Î¼­ <tt>make
install</tt> ÇÏ¸é ·Î°í µî ±×¸² ÆÄÀϵéÀÌ À§ÀÇ µð·¹Å丮·Î
º¹»çÇÑ´Ù. ±×·¯¸é ¿©±â¿¡ ÀÖ´Â ÆÄÀÏÀÌ »ç¿ëµÇ¾î About ´ëÈ­»óÀÚÀÇ ±×¸²ÀÌ
º¸ÀÌ°Ô µÉ °ÍÀÌ´Ù.

<tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¾ø¾Ö±â</tag>
ÀÌ·¸°Ô ÇØ¼­ ¸¸µé¾îÁø about ´ëÈ­»óÀÚ´Â »ç¿ëÀÚ°¡ ¸Þ´º³ª Åø¹Ù¸¦ ÅëÇØ¼­ ¶ç¿ï
¼ö ÀÖ´Ù. ±×¸®°í ÀÌ ´ëÈ­»óÀÚÀÇ È®ÀÎ ¹öưÀ» ´©¸£¸é ¾ðÁ¦µçÁö ´ÝÀ» ¼ö ÀÖ´Ù.
</descrip>


<sect1>°³¹ß ¼¼¹øÂ° ´Ü°è - file open ´ëÈ­»óÀÚ
<p>

¸ÕÀú ´ÙÀ½ <ref id="fig_41" name="ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ À§Á¬">À» 
"À§Á¬ À©µµ¿ì"-"GTK+ Basic ÆÐ³Î" ¿¡¼­ Ŭ¸¯Çϸé ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡µÈ´Ù.

<!-- ±×¸² 41 : fileselectiondlgwidget -->
<figure>
<eps file="images/fileselectiondlgwidget.eps" height="47pt">
<img src="images/fileselectiondlgwidget.gif">
<caption><label id="fig_41">ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ ÄÁƲ·Ñ</caption>
</figure>

ÀÌ·¸°Ô Çϸé ÀÚµ¿À¸·Î
"src/interface.c"¿¡ <tt>create_fileselection1</tt> ¶ó´Â
ÇÔ¼ö°¡ »ý±â°í ¿©±â¿¡ <tt>ok_button1</tt>¿Í <tt>cancel_button1</tt>
¹öưµéÀÌ ¸¸µé¾îÁ® ºÙ¿©Áø´Ù. 

ÀÌ ´ëÈ­»óÀÚ°¡ ÀûÀýÇÑ »ç¿ëÀÚ ¿ä±¸¿¡ ´ëÇØ¼­ È­¸é¿¡ µð½ºÇ÷¹À̵ǵµ·Ï
¼³Á¤ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏÀÚ. 

<descrip>
<tag>¸Þ´º¿Í ¿¬°áÇϱâ</tag>
¹ÙÅÁ À©µµ¿ì Æû¿¡¼­ ¸Þ´º¸¦ ¼±ÅÃÇÏÀÚ. ±×·¯¸é ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ
<em>Widget</em> ÅÇ¿¡ <em>Edit Menus...</em> ¶ó´Â ¹öưÀÌ º¸ÀÏ °ÍÀÌ´Ù.
À̰ÍÀ» Ŭ¸¯ÇÏ¿© <em>Menu Editor</em> À©µµ¿ì¸¦ ºÎ¸¥ µÚ File ¸Þ´ºÀÇ Open
¼­ºê ¸Þ´º¿¡ ´ëÇÑ Çڵ鷯 À̸§À» È®ÀÎÇÑ´Ù. ´ë°³ <em>on_Open_activate</em>
ÀÏ °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ Çڵ鷯<footnote>callbacks.c ¿¡ ÀÖ´Ù</footnote>
¾È¿¡ file open ´ëÈ­ »óÀÚ¸¦ ºÎ¸£´Â Äڵ带
³Ö¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏÀÚ.
<code>
void
on_Open_activate  ( GtkMenuItem   *menuitem,
                    gpointer      user_data)
{
    /* Ãß°¡ ½ÃÀÛ */
    GtkWidget *open_file;
    open_file = create_fileselection1();
    gtk_widget_show (open_file);
    /* Ãß°¡ ³¡   */
}
</code>

<tag>Åø¹Ù ¹öư°ú ¿¬°áÇϱâ</tag>
¸ÞÀÎ À©µµ¿ìÀÇ Open ¹öưÀ» Ŭ¸¯ÇÏ¿© ¼±ÅÃÇÑ ÈÄ ¼Ó¼º À©µµ¿ìÀÇ Signals
ÅÇ¿¡¼­ clicked Çڵ鷯¸¦ µî·ÏÇÑ´Ù. ±×¸®°í Build ¹öưÀ» ´©¸¥´Ù.
±×·¯¸é callbacks.c ¿¡ ÇØ´ç Çڵ鷯
ÇÔ¼öÀÇ ¹Ùµð¸¸ Ãß°¡µÉ °ÍÀÌ´Ù. ´ë°³ Open ¹öưÀº Åø¹Ù¿¡¼­ µÎ¹øÂ°À̹ǷÎ
on_button2_clicked()<footnote>À̰͵µ callbacks.c ¿¡ ÀÖ´Ù</footnote>
ÀÌ µÉ °ÍÀÌ´Ù. ¿©±â¿¡µµ À§ÀÇ Ç׸ñ°ú °°Àº ¼¼ ¶óÀÎÀ» Ãß°¡ÇÏÀÚ.
</descrip>

±×·¯¸é Open ¹öưÀ» Ŭ¸¯ÇÒ ¶§¸¶´Ù ´ÙÀ½°ú °°Àº ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ°¡ ³ª¿Ã
°ÍÀÌ´Ù. 

<!-- ±×¸² 42 : fileselectiondialog -->
<figure>
<eps file="images/fileselectiondialog.eps" height="434pt">
<img src="images/fileselectiondialog.gif">
<caption><label id="fig_42">½ÇÇàÈÄ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ</caption>
</figure>

ÀÚ ÀÌÁ¦´Â ÀÌ ´ëÈ­ »óÀÚ¿Í ÀÎÅÍÆäÀ̽º¸¦ ÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡
È®ÀÎ ¹öưÀ» ´©¸£¸é ÀÔ·ÂµÈ ÆÄÀÏÀ» °¡Á®¿À°í ´ëÈ­»óÀÚ¸¦ Á¾·áÇϸç, 
Ãë¼Ò ¹öưÀ» ´©¸£¸é ±×³É ´ëÈ­»óÀÚ¸¦ Á¾·áÇÏÀÚ.

ÀÚ ÀÌÁ¦ °¢ ¹öư ½Ã±×³Î Çڵ鷯µéÀ» µî·ÏÇØº¸ÀÚ.

<descrip>

<tag>¹®Á¦ ¹× »çÀü Áö½Ä</tag>

<enum>
<item>
¹ÙÅÁ À©µµ¿ì¿¡¼­ »õ·Î¿î ´ëÈ­»óÀÚ¸¦ À§ÀÇ ÄÚµåó·³ »ý¼ºÇÏ¿´´Â µ¥, ±× °á°ú
À§Á¬¿¡ ´ëÇÑ Á¤º¸, Áï À§Á¬ Æ÷ÀÎÅ͸¦ µû·Î ÀúÀåÇÏÁö ¾Ê¾Ò´Ù. ÀÌ °ÍÀ» ¾Ë¾Æ¾ß
¹ÙÅÁ À©µµ¿ì³ª Çڵ鷯¿¡¼­ ´ëÈ­»óÀÚ¸¦ ´Ý°Å³ª ¼±ÅÃµÈ ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦
¾ò¾î ¿Ã ¼ö ÀÖ´Ù. °á°úÀûÀ¸·Î ´ëÈ­»óÀÚ¿¡ ´ëÇÑ Á¶ÀÛÀ» ó¸®ÇÒ ¶§, 
Àü¿ªº¯¼ö ´Ù¸¥ ¹æ¹ýÀ» ÅëÇØ¼­ ´ëÈ­»óÀÚ Æ÷ÀÎÅ͸¦ ¾Ë¾Æ³»¾ß ÇÑ´Ù.
<item>¼±ÅÃµÈ ÆÄÀÏÀº <tt>gtk_file_selection_get_filename
(GTK_FILE_SELECTION(</tt><em>widget_pointer</em><tt>)))</tt> ÀÇ ¸®ÅϰªÀÎ
¹®ÀÚ¿­ÀÌ´Ù.
<item>gtk_signal_connect() ÇÔ¼ö·Î ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¿¬°áÇÒ ¶§
¸¶Áö¸· ÆÄ¶ó¹ÌÅÍ·Î <tt>void *</tt>¸¦ ¸»ÇÏ´Â gpointer Çü °ªÀ» ÁÙ ¼ö ÀÖ°í
¹Þ´Â ÂÊ, Áï ½Ã±×³Î Çڵ鷯 ÂÊ¿¡¼­µµ gpointer ÇüÀÇ °ªÀ» ¹Þ´Â´Ù. 
<item>½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¿¬°áÇÒ ¶§
<tt>gtk_signal_connect_object</tt> ¸¦ ¾µ ¼öµµ ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ´Ù¸¥
°´Ã¼ÀÇ Äݹé ÇÔ¼ö¸¦ ½Ã±×³Î Çڵ鷯·Î ¿¬°áÇÒ ¶§ »ç¿ëµÈ´Ù. ±×¸®°í ÀÌ ÇÔ¼ö´Â
Ç¥ÁØ ÇÔ¼ö(¿¹: gtk_widget_show µî)¸¦ ½Ã±×³Î Çڵ鷯·Î ¿¬°áÇÒ ¶§ À¯¿ëÇÏ´Ù.
ÀÌ ÇÔ¼öÀÇ ³×¹øÂ° ÆÄ¶ó¹ÌÅÍ´Â ¿¬°áµÇ´Â ½Ã±×³Î Çڵ鷯ÀÇ Ã¹¹øÂ° ÆÄ¶ó¹ÌÅÍ·Î
Àü´ÞµÈ´Ù.
<item>GLADE ´Â ´ëÈ­»óÀÚÀÇ ¹öư¿¡ ´ëÇÑ Çڵ鷯¸¦ °³¹ßÀÚ°¡ Ãß°¡ÇÒ ¶§ Data
¶Ç´Â Object ¸¦ ¾²Áö ¾ÊÀ¸¸é 
gtk_signal_connect() ¶ó´Â ÇÔ¼ö¸¸À» ½á¼­, ¸¶Áö¸· ÆÄ¶ó¹ÌÅͷδ ¹«Á¶°Ç NULL
À» ÁÖ°í¼­ µî·ÏÇÑ´Ù. ±×·¯³ª Data ¸¦ »ç¿ëÇÏ¸é ¸¶Áö¸· ÆÄ¶ó¹ÌÅͷνá ÁöÁ¤µÈ
°ªÀ» »ç¿ëÇÏ¿© »ý¼ºÇϸç Object ¸¦ »ç¿ëÇϸé gtk_signal_connect_object()
ÇÔ¼ö¸¦ ¾²¸ç ¸¶Áö¸· ÆÄ¶ó¹ÌÅÍ·Î Object ¿¡¼­ ÁöÁ¤ÇÑ °ÍÀ» ¾´´Ù. ±×¸®°í After
¹öưÀ» Ŭ¸¯Çϸé gtk_signal_connect_after() ¸¦ »ç¿ëÇÏ¿© ½Ã±×³ÎÀ»
µî·ÏÇÑ´Ù.
<item>GLADE ´Â Ãë¼Ò ¹öưÀ» µðÆúÆ®·Î ¸¸µç´Ù.
</enum>

<tag>È®ÀÎ ¹öư ½Ã±×³Î Çڵ鷯</tag>
¸ÕÀú ´ëÈ­»óÀÚ(¿©±â¼­´Â fileselection1) ÅÛÇø´ÀÌ È­¸é¿¡ ¶°ÀÖÁö
¾ÊÀ¸¸é GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ ÇØ´ç ´ëÈ­»óÀÚ¸¦ ´õºíŬ¸¯ÇÏ¿© È­¸é¿¡ ¶ç¿î´Ù.
±×¸®°í ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ ¶ç¿îµÚ, ´ëÈ­»óÀÚÀÇ È®ÀÎ ¹öưÀ» ´©¸£¸é ÀÌ ¹öư¿¡
´ëÇÑ ÇÁ·ÎÆÛƼ¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù. ÀÌ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ ½Ã±×³Î ÅÇ¿¡¼­ ´ÙÀ½
±×¸²Ã³·³ Çڵ鷯¸¦ Ãß°¡ÇÏÀÚ. ±×¸®°í Data ºÎºÐ¿¡ fileselection1 À» ³Öµµ·Ï
ÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶). ±×·¯¸é gtk_signal_connect() ÇÔ¼ö ³×¹øÂ° ÆÄ¶ó¹ÌÅÍ¿¡
ÀÌ °ªÀ» GLADE °¡ ³ÖÀ» °Í<footnote>¹°·Ð GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ Build ¸¦
Ŭ¸¯ÇØ¾ß ÇÑ´Ù</footnote>ÀÌ´Ù.

<!-- ±×¸² 43 : oksignal -->
<figure>
<eps file="images/oksignal.eps" height="398pt">
<img src="images/oksignal.gif">
<caption><label id="fig_43">È®ÀÎ ¹öư ½Ã±×³Î Çڵ鷯 µî·Ï</caption>
</figure>

ÀÌÈÄ interface.c ¿¡ ´ÙÀ½°ú °°Àº ¶óÀÎÀÌ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
<code>
gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked",
                    GTK_SIGNAL_FUNC(on_ok_button1_clicked),
                    fileselection1);
</code>

<tag>Ãë¼Ò ¹öư ½Ã±×³Î Çڵ鷯</tag>
Ãë¼Ò ¹öư ½Ã±×³Î Çڵ鷯´Â È®ÀÎ ¹öư ½Ã±×³Î Çڵ鷯¿Í ºñ½ÁÇÏ°Ô µî·ÏÇϵÇ
ÇÁ·ÎÆÛƼ À©µµ¿ì/½Ã±×³Î ÅÇÀÇ ½Ã±×³Î Çڵ鷯 µî·Ï ÄÞº¸(´ÙÀ½ ±×¸² ÂüÁ¶)¸¦ 
Ŭ¸¯ÇÏ¿©
gtk_widget_destroy() ¶ó´Â ½ºÅå(Ç¥ÁØ, ³»Àå) Çڵ鷯¸¦ ¼±ÅÃÇÏ¿© µî·ÏÇÏÀÚ.
±×¸®°í Object ºÎºÐ¿¡´Â fileselection1 À» ³Öµµ·Ï ÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶).
ÀÌ·¸°Ô Çϸé gtk_signal_connect() ÇÔ¼ö ´ë½Å¿¡ gtk_signal_connect_object()
¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇϸç ÀÌ ÇÔ¼öÀÇ ³×¹øÂ° ÆÄ¶ó¹ÌÅÍ¿¡ NULL ¾Æ´Ñ Á¶±Ý
Àü¿¡ ³Ö¾îÁØ °ªÀ» GLADE °¡<footnote>¹°·Ð GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ Build ¸¦ 
Ŭ¸¯ÇØ¾ß ÇÑ´Ù</footnote> ³Ö´Â´Ù. 

<!-- ±×¸² 44 : cancelsignal -->
<figure>
<eps file="images/cancelsignal.eps" height="398pt">
<img src="images/cancelsignal.gif">
<caption><label id="fig_44">Ãë¼Ò ¹öư¿¡ ´ëÇÑ Çڵ鷯 µî·Ï</caption>
</figure>

À§ÀÇ ±×¸²Àº ³»¿ëÀÌ ´Ù º¸À̶ó°í µðÆúÆ®·Î ³ª¿À´Â °ÍÀ» Á¶±Ý ´Ã¸° °ÍÀÌ´Ù.

±×·¯¸é interface.c ¿¡ ´ÙÀ½°ú °°Àº ¶óÀÎÀÌ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

<code>
gtk_signal_connect_object (GTK_OBJECT (cancel_button1), "clicked",
                           GTK_SIGNAL_FUNC (gtk_widget_destroy),
                           fileselection1);
</code>

</descrip>

Ãë¼Ò ¹öưÀÇ °æ¿ì´Â ±×´ë·Î ³öµÎ¾îµµ ¹«¹æÇÏÁö¸¸ È®ÀÎ ¹öưÀÇ °æ¿ì ½Ã±×³Î
Çڵ鷯¿¡ Á¶±Ý Äڵ带 Ãß°¡ÇÏ¿©¾ß »ç¿ëÀÚ°¡ ¹«¾ùÀ» ¼±ÅÃÇß´ÂÁö¸¦ ÆÄ¾ÇÇÒ ¼ö
ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÏ¸é µÈ´Ù:

<code>
void
on_ok_button1_clicked (GtkButton *button,
                       gpointer user_data )
{
    /* Ãß°¡ ½ÃÀÛ */
    GtkWidget *open_file = (GtkWidget *)user_data;
    g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION
             (open_file)));
    gtk_widget_destroy( (GtkWidget *)open_file );
    /* Ãß°¡ ³¡   */
}
</code>

¿ì¼±Àº ¼±ÅÃµÈ ÆÄÀÏÀ» ÅØ½ºÆ®·Î Å͹̳ο¡ Ãâ·ÂÇÏ´Â °ÍÀ¸·Î ÀÌ ¼½¼ÇÀÇ ¾ê±â¸¦
³¡³»µµ·Ï ÇÏÀÚ. ³ªÁß¿¡ ÀÌ °ªÀ» Ȱ¿ëÇϱâ·Î Çϰí.

<sect1>°³¹ß ³×¹øÂ° ´Ü°è - font selection ´ëÈ­»óÀÚ
<p>

¸ÕÀú ´ÙÀ½ <ref id="fig_45" name="ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ À§Á¬">À» 
"À§Á¬ À©µµ¿ì"-"GTK+ Basic ÆÐ³Î" ¿¡¼­ Ŭ¸¯Çϸé ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡µÈ´Ù.

<!-- ±×¸² 45 : fontselectiondlgwidget -->
<figure>
<eps file="images/fontselectiondlgwidget.eps" height="51pt">
<img src="images/fontselectiondlgwidget.gif">
<caption><label id="fig_45">ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ ÄÁƲ·Ñ</caption>
</figure>

À§¿¡¼­ º» ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¿Í °ÅÀÇ ¸ðµç ¸é¿¡¼­ µ¿ÀÏÇϱ⠶§¹®¿¡ ¸¹Àº
ºÎºÐÀ» »ý·«ÇÑ´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ È®ÀÎÀ̳ª Àû¿ëÀ» ´­·¶À» °æ¿ì »ç¿ëÀÚ°¡
¼±ÅÃÇÑ ³»¿ëÀ» ¾ò¾î¿À´Â ºÎºÐÀº ¿©±â¼­ ´Ù·ç±â·Î ÇÑ´Ù. ÀÌ·± ¿ªÇÒÀ» ÇÏ´Â
ÇÔ¼ö´Â ÆÄÀϼ±Åðú´Â ´Þ¸® 1°³°¡ ¾Æ´Ï¶ó 3°³Á¤µµ ÀÖ´Ù.

<enum>
<item>gtk_font_selection_dialog_get_font()
<item>gtk_font_selection_dialog_get_font_name()
<item>gtk_font_selection_dialog_get_preview_text()
</enum>

¼¼¹øÂ°´Â Ư¼öÇÑ °æ¿ì¿¡(¿¹¸¦ µé¸é »ç¿ëÀÚ°¡ ±×¸²¿¡ ³ÖÀ» ÅØ½ºÆ®¸¦
¼±ÅÃÇÏ´Â °æ¿ì µî) ¾²ÀÏ °ÍÀ¸·Î º¸ÀδÙ. ù¹øÂ°¿Í µÎ¹øÂ°´Â ÇÔ¼ö À̸§µéÀÌ
°¡¸£ÄÑÁÖ´Â ¹Ù¿Í °°´Ù. ´Ù¸¸ ù¹øÂ°´Â GdkFont Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÏ°í µÎ¹øÂ°´Â
À̸§¸¸ ¸®ÅÏÇÑ´Ù. 

È®ÀÎ ¹öư¿¡ ´ëÇØ¼­ À§ÀÇ ¼½¼Ç¿¡¼­ ÇÑ °Í°ú ºñ½ÁÇÏ°Ô Ç쵂 ´ÙÀ½°ú °°ÀÌ ¼±ÅÃ
´ë»ó Á¤º¸¸¦ ¾ò´Â ºÎºÐÀ» Ãß°¡ÇÏÀÚ.

<code>
void
on_ok_button2_clicked (GtkButton *button,
		               gpointer  user_data)
{
    /* Ãß°¡ ½ÃÀÛ */
    GtkWidget *font_select = (GtkWidget *)user_data;
    GdkFont *gdk_font = NULL;
    gdk_font = gtk_font_selection_dialog_get_font(
                   GTK_FONT_SELECTION_DIALOG(font_select));
    g_print ("type : %s\n", gdk_font->type ==
             GDK_FONT_FONT ? "font" : ( gdk_font->type ==
             GDK_FONT_FONTSET ?  "fontset" : "unkonwn") );
    g_print ("ascent : %d\n", gdk_font->ascent );
    g_print ("descent : %d\n", gdk_font->descent);
    g_print ( "name = %s\n", 
        gtk_font_selection_dialog_get_font_name( 
            GTK_FONT_SELECTION_DIALOG(font_select)) );
    gtk_widget_destroy( (GtkWidget *)font_select );
    /* Ãß°¡ ³¡  */
}
</code>

ÀÌ ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ¸¦ ¶ç¿ì´Â ¸Þ´º¸¦ Çϳª Ãß°¡ÇÏ¿© ÀÌ ´ëÈ­»óÀÚ¸¦
±¸µ¿½ÃÄѺ¸ÀÚ(<ref id="win_menu_editor" name="¸Þ´º ¿¡µðÅÍ">¸¦ Ȱ¿ëÇÏÀÚ). 

½ÇÇàÈÄ °á°ú´Â ´ÙÀ½°ú °°´Ù(¿À¸¥ÂÊ Å͹̳ο¡ ÂïÈù ³»¿ëÀ» ÁÖ¸ñÇÏÀÚ).

<!-- ±×¸² 46 : afterselectfont -->
<figure>
<eps file="images/afterselectfont.eps" height="670pt">
<img src="images/afterselectfont.gif">
<caption><label id="fig_46">ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ ½ÇÇà È­¸é</caption>
</figure>

<sect1>°³¹ß ´Ù¼¸¹øÂ° ´Ü°è - text area Á¦¾î
<p>

ÀÚ ÀÌÁ¦ ÅØ½ºÆ® ¿µ¿ªÀ» Á¦¾îÇØº¸ÀÚ. ±âº»ÀûÀ¸·Î ÅØ½ºÆ® ¿µ¿ª À§Á¬ ÀÚü°¡
ÅØ½ºÆ® ÀÔ·Â ±â´É, ÀÔ·ÂµÈ ÅØ½ºÆ®ÀÇ ¼±Åà ±â´É, ¹æÇâŰ ¹× ¹é½ºÆäÀ̽º Ű
±â´É µîÀ» Áö¿øÇÑ´Ù. ±×¸®°í Del Ű´Â Ä¿¼­ µÚ ¹®ÀÚ Çϳª¸¦ Áö¿ì¸ç ¸¶¿ì½º 
¼±Åà ÈÄ Del Ű´Â ¼±ÅÃµÈ ¿µ¿ªÀ» ¸ðµÎ Áö¿î´Ù. À̰ÍÀº GtkText ¶ó´Â À§Á¬À¸·Î 
Áö¿øµÈ´Ù. ±×¸®°í ÀÌ À§Á¬Àº GtkEditable À§Á¬À¸·ÎºÎÅÍ ½Â°èµÈ °ÍÀÌ´Ù.

±×·¯¸é ¿©±â¿¡ º¹»ç/ÀÚ¸£±â/ºÙÀ̱⠱â´ÉÀ» ³Ö¾îº¸µµ·Ï ÇÏÀÚ.

<descrip>

<tag>º¹»ç</tag>
¿ì¸®´Â
<tt>void gtk_editable_copy_clipboard(GtkEditable *editable);</tt> ÇÔ¼ö¸¦
»ç¿ëÇÏ¿© ¼±ÅÃµÈ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î º¹»çÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ÆíÁý/º¹»ç
¸Þ´º¸¦ ¼±ÅÃÇßÀ» ¶§ ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_Copy_activate() ¾È¿¡ ´ÙÀ½°ú
°°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ.

<code>
gtk_editable_copy_clipboard( (GtkEditable *)gTextArea );
</code>

±×·¯³ª ¸ÕÀú GtkText Æ÷ÀÎÅÍÇü Àü¿ª º¯¼ö gTextArea °¡ ¼±¾ðµÇ°í ¿ì¸®ÀÇ ¹ÙÅÁ
À©µµ¿ì¿¡ ÀÖ´Â ÅØ½ºÆ® ¿µ¿ªÀ» °¡¸®Å°µµ·Ï Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¹Ç·Î
callbacks.c ¿¡ <tt>GtkText *gTextArea</tt> ¶ó°í Àü¿ª º¯¼ö
¼±¾ðÀ» ÇÑ´Ù. ±×¸®°í callbacks.c ¿¡ focus_in_event ½Ã±×³Î¿¡ ´ëÇÑ Çڵ鷯¸¦
¸¸µé°í ÀÌ ¾È¿¡ ´ÙÀ½°ú °°Àº Äڵ带 Ãß°¡ÇÏÀÚ<footnote>interface.c ¿¡ À§ÀÇ
Àü¿ªº¯¼ö¸¦ ¼±¾ðÇϰųª ÀÌ Àü¿ªº¯¼ö ÃʱâÈ­¸¦ ³Ö´Â´Ù¸é ¹®Á¦°¡ ³¯ ¼ö ÀÖ´Ù.
¿Ö³Ä¸é GLADE ´Â interface.c ´Â ´ë°³ ÇÔ¼ö ¸öü Äڵ尡 µé¾î ÀÖ´Â
<tt>create_</tt><em>xxx</em> °ú °°Àº ÇÔ¼öµéÀ» ³Ö°í ÀÌ´Â °³¹ßÀÚ°¡ GLADE
¸ÞÀÎ À©µµ¿ìÀÇ Build ¸¦ ´©¸¦ ¶§¸¶ »õ·ÎÀÌ °»½ÅµÇ¾î °³¹ßÀÚ Ä¿½ºÅ͸¶ÀÌÁî
Äڵ尡 À¯½ÇµÇ±â ¶§¹®ÀÌ´Ù. ´ë½Å callbacks.c ¿¡ ÀÖ´Â ³»¿ëµéÀº ÁÖ·Î ½Ã±×³Î
Çڵ鷯µéÀ̸ç interface.c ¿¡ ºñÇØ¼­ À¯½ÇµÇ´Â °ÍÀÌ °ÅÀÇ ¾ø´Ù. ±×·¡¼­ ÃßÈÄ
GLADE ÀÇ Build ¿¡ ÀÇÇØ¼­ ¼Ò½º°¡ »õ·Î °»½ÅµÉ ¶§, ¿µÇâÀ» ¹ÞÁö ¾Ê´Â °ÍÀ»
ÇÊ¿ä·Î ÇÑ´Ù¸é callbacks.c ¿¡ ³Ö´Â °ÍÀÌ ÁÁ°Ú´Ù. ±×·¯³ª ½±°Ô ÇÏ´Â ¹æ¹ýÀÎ
Àü¿ª º¯¼ö¸¦ ½á¾ß ÇÑ´Ù¸é Build ÇÏÁö ¾Ê´Â ¹æÇâÀ¸·Î ÇØµµ ÁÁ´Ù.</footnote>:

<code>
gboolean
on_text1_focus_in_event(GtkWidget *widget,
                        GdkEventFocus *event,
                        gpointer user_data)
{
	/* Ãß°¡ ½ÃÀÛ */
    g_print( "on_text1_focus_in_event() start\n" );
    if ( gTextArea == NULL )
        gTextArea = (GtkText *)user_data;
	/* Ãß°¡ ³¡   */
    return FALSE;
}
</code>

GTK ³»ºÎÀûÀ¸·Î ÅØ½ºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª º¹»ç¿¡
´ëÇØ¼­ Ctrl-C ¸¦ ´ÜÃàŰ·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. 

<tag>ÀÚ¸£±â</tag>
¿ì¸®´Â <tt>void gtk_editable_cut_clipboard(GtkEditable *editable);</tt>
ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ ¼±ÅÃµÈ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î Àß¶ó ³ÖÀ» ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ
ÆíÁý/ÀÚ¸£±â ¸Þ´º¸¦ ¼±ÅÃÇßÀ» ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_Cut_activate()
¾È¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ.

<code>
gtk_editable_cut_clipboard( (GtkEditable *)gTextArea );
</code>

GTK ³»ºÎÀûÀ¸·Î ÅØ½ºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª ÀÚ¸£±â¿¡
´ëÇØ¼­ Ctrl-X ¸¦ ´ÜÃàŰ·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. 

<tag>ºÙÀ̱â</tag>

¿ì¸®´Â <tt>void gtk_editable_paste_clipboard(GtkEditable *editable);</tt>
ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ Ŭ¸³º¸µå¿¡ ÀÖ´Â ³»¿ëÀ» ÇöÀç Ä¿¼­ À§Ä¡·Î ³ÖÀ» ¼ö ÀÖ´Ù. 
´ÙÀ½°ú °°ÀÌ ÆíÁý/ºÙÀ̱⠸޴º¸¦ ¼±ÅÃÇßÀ» ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 
on_Paste_activate()
¾È¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ.

<code>
gtk_editable_paste_clipboard( (GtkEditable *)gTextArea );
</code>

GTK ³»ºÎÀûÀ¸·Î ÅØ½ºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª ºÙÀ̱⿡
´ëÇØ¼­ Ctrl-P ¸¦ ´ÜÃàŰ·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. 

</descrip>

ÀÌÁ¦´Â ÆÄÀÏÀ» Àо ÅØ½ºÆ® ¿µ¿ªÀ¸·Î ÀоîµéÀ̰í, ÆÄÀÏ¿¡ ÀúÀåÇØº¸µµ·Ï 
ÇÏÀÚ.

<descrip>

<tag>ÆÄÀÏ Àбâ</tag>
À§ÀÇ ÆÄÀÏ ¼±Åà ´ëÈ­ »óÀÚ ¼½¼Ç¿¡¼­ ¼±ÅÃµÈ ÆÄÀÏÀ» Àо ¿ì¸®ÀÇ
¾îÇø®ÄÉÀÌ¼Ç ÅØ½ºÆ® ¿µ¿ª¿¡´Ù µð½ºÇ÷¹ÀÌÇØº¸ÀÚ.

´ÙÀ½°ú °°ÀÌ ÆÄÀÏ Open ´ëÈ­»óÀÚ¸¦ ±¸µ¿ÇÑ ÈÄ »ç¿ëÀÚ°¡ È®ÀÎ ¹öưÀ» ´­·¶À»
¶§ ÀÛµ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_ok_button1_clicked() ¿¡´Ù ÆÄÀÏÀ» Àо
ÅØ½ºÆ® ¿µ¿ª¿¡ ³Ö´Â Äڵ带 Ãß°¡Çغ¸ÀÚ.

<code>
void
on_ok_button1_clicked (GtkButton *button,
                       gpointer user_data )
{
    /* Ãß°¡ ½ÃÀÛ */
    GtkWidget *open_file = (GtkWidget *)user_data;
    gchar *file_name =  gtk_file_selection_get_filename 
        (GTK_FILE_SELECTION(open_file));
    FILE *infile = NULL;

    g_print ("%s\n", file_name );
    /* ÅØ½ºÆ® ¿µ¿ª ¶ôÅ· */
    gtk_text_freeze (GTK_TEXT (text));
    infile = fopen(file_name, "r");
    if (infile) {
        char buffer[1024];
        int nchars;
         
        while (1) {
            nchars = fread(buffer, 1, 1024, infile);
            gtk_text_insert (GTK_TEXT (gTextArea), NULL, NULL,
                NULL, buffer, nchars);
             
            if (nchars < 1024)
                break;
        }
        fclose (infile);
     }

     /* ÅØ½ºÆ® ¿µ¿ª ¶ôÅ· ÇØÁ¦ */
     gtk_text_thaw (GTK_TEXT (text));

     gtk_widget_destroy( (GtkWidget *)open_file );
     /* Ãß°¡ ³¡   */
}
</code>

ÀÌ ÄÚµå´Â ÇöÀç »ðÀÔ Æ÷ÀÎÆ®(current insert point) µÚ¿¡´Ù ÅØ½ºÆ®¸¦
Ãß°¡ÇÏ´Â °ÍÀ̹ǷΠÆÄÀÏ ³»¿ëÀ» ³Ö±âÀü¿¡ ÅØ½ºÆ® ¿µ¿ª¿¡ ¾î¶² ³»¿ëÀÌ
ÀÖ¾ú´Ù¸é ±× ÀÌÈÄ¿¡ ÆÄÀÏ ³»¿ëÀÌ µé¾î°¥ °ÍÀÌ´Ù.

À§¿¡¼­ »õ·Î »ç¿ëµÈ GTK ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.

<enum>
<item>gtk_text_insert() - ÅØ½ºÆ® ¿µ¿ªÀÇ ÇöÀç Ä¿¼­ ÀÌÈÄ¿¡ ÁÖ¾îÁø ¹öÆÛÀÇ
³»¿ëÀ» ä¿î´Ù.
<item>gtk_text_freeze(), gtk_text_thaw() - ÅØ½ºÆ® ¿µ¿ªÀ» ¶ôÅ·Çϰí
¾ð¶ôÅ·ÇÑ´Ù.
</enum>

<tag>ÆÄÀÏ ÀúÀå</tag>

ÀÌÁ¦´Â ÇöÀç ÅØ½ºÆ® ¿µ¿ªÀÇ ³»¿ëÀ» ÆÄÀÏ·Î ½áº¸ÀÚ. ±×·²·Á¸é ÅØ½ºÆ® ¿µ¿ª
Àüü¸¦ ÃßÃâÇØ¾ß ÇÑ´Ù. ÅØ½ºÆ® ¿µ¿ª ÀϺθ¦ ÃßÃâÇÏ´Â ÇÔ¼ö´Â
<tt>gtk_editable_get_chars( GtkText *editable, gint start_pos, gint
		end_pos);</tt> ÀÌ´Ù. ¿©±â¼­ start_pos, end_pos ´Â 0ºÎÅÍ ½ÃÀÛÇÏ´Â
À§Ä¡ Á¤º¸ÀÌ´Ù. ±×¸®°í º¸Á¶ ÇÔ¼ö·Î½á ÅØ½ºÆ® ¿µ¿ªÀÇ Àüü ±æÀ̸¦ ±¸ÇÏ´Â
ÇÔ¼ö <tt>gtk_text_get_length( GtkText *gtktext );</tt> °¡ ÀÖ´Ù. À̵éÀ»
ÀÌ¿ëÇØ¼­ ÆÄÀÏ¿¡ ÀúÀåÇØº¸±â·Î ÇÏÀÚ.

¸ÕÀú Save ´ëÈ­ »óÀÚ¸¦ À§ÀÇ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¿¡¼­ Çß´ø °Íó·³ Ãß°¡ÇÏÀÚ.
±×¸®°í »ç¿ëÀÚ°¡ È®ÀÎ ¹öưÀ» ´©¸£¸é ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯ÀÎ
on_ok_button3_clicked() ÇÔ¼ö ¾È¿¡ ´ÙÀ½°ú °°Àº Äڵ带 ³Ö¾î º¸ÀÚ:

<code>
    GtkWidget *save_file = (GtkWidget *)user_data;
    gchar *file_name =  gtk_file_selection_get_filename 
        (GTK_FILE_SELECTION(save_file));
    FILE *outfile = NULL; 
    int ntotal = gtk_text_get_length( gTextArea );
    int nchars;
    gchar *buffer = NULL;
    gint nEnd = ntotal > 1024 ? 1024 : ntotal;
    gint nStart = 0;

    g_print ("save file name : %s\n", file_name );
    g_print ("ntotal =  %d\n", ntotal );

    /* ÅØ½ºÆ® ¿µ¿ª ¶ôÅ· */ 
    gtk_text_freeze (GTK_TEXT (gTextArea));
    outfile = fopen(file_name, "w+");
    if (outfile) {
        buffer = gtk_editable_get_chars( (GtkEditable *)gTextArea, 
                0, nEnd );
        nchars = fwrite(buffer, 1, nEnd, outfile);
        g_free( buffer );
        while (nEnd < ntotal) {
            nStart = nEnd;
            nEnd = (nEnd + 1024) < ntotal ? nEnd + 1024 : ntotal;
            buffer = gtk_editable_get_chars( (GtkEditable *)gTextArea, 
                nStart, nEnd );
            g_print( "when iter : nStart=%d:nEnd=%d:buffer=%s\n", 
                    nStart, nEnd, buffer );
            nchars = fwrite(buffer, 1, nEnd-nStart, outfile);
            g_free( buffer );
        }
        fclose (outfile);
     }
     /* ÅØ½ºÆ® ¿µ¿ª ¶ôÅ· ÇØÁ¦ */
     gtk_text_thaw (GTK_TEXT (gTextArea));

     gtk_widget_destroy( (GtkWidget *)save_file );
</code>

¿©±â¼­ ÇѰ¡Áö ÁÖÀÇÇÒ °ÍÀº GTK °è¿­ÀÇ ÇÔ¼öµéÀÌ ÇѱÛÀ» ¸ðµÎ 2-byte ¹®ÀÚ°¡
¾Æ´Ñ 1-byte ¹®ÀڷΠó¸®ÇÑ´Ù´Â °ÍÀÌ´Ù. ¹Ý¸é¿¡ fwrite ´Â 2-byte ¹®ÀÚ¸¦
2-byte ±×´ë·Î ó¸®ÇÑ´Ù. ±×·¡¼­ ÀÌ·± ¿ÀÂ÷·Î ÇѱÛÀ» ÆÄÀÏ·Î ÀúÀåÇϸé À¯½ÇÀÌ
¹ß»ýÇÑ´Ù.

±×¸®°í g_free ÇÔ¼ö´Â gtk_editable_get_chars() ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¾òÀº gchar
Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­ È£ÃâÇÏ¿© ¸®¼Ò½º¸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö·Î½á ¹Ýµå½Ã ÀÌ·¸°Ô
¸®¼Ò½º¸¦ ¹ÝȯÇÏ¿©¾ß ÇÑ´Ù°í ÇÑ´Ù(GTK ¸Å´º¾ó ÂüÁ¶).

</descrip>

¸¶Áö¸·À¸·Î ÆùÆ®¸¦ ¹Ù²Ù¾î µð½ºÇ÷¹ÀÌ ÇØº¸ÀÚ.

<descrip>

<tag>ÆùÆ® º¯°æ ÈÄ µð½ºÇ÷¹ÀÌ</tag>
ÆùÆ®¸¦ º¯°æÇؼ­ µð½ºÇ÷¹ÀÌÇÒ·Á¸é ¸ÕÀú ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ¿¡¼­ È®ÀÎÀ»
´­·¶À» °æ¿ì ÀÌ¿¡ ´ëÇÏ¿© ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯¿¡¼­ ½ÃÀÛÇØ¾ß ÇÑ´Ù.
´ë·«ÀûÀ¸·Î ¼³¸íÇϸé ÀÌ Çڵ鷯¿¡¼­ ÇØ¾ß ÇÒ ÀÏÀº, Àüü ÅØ½ºÆ®¸¦ ¾ò°í
ÅØ½ºÆ® ¿µ¿ªÀ» ¸ðµÎ Áö¿î ´ÙÀ½ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆùÆ®¸¦ ÀÌ¿ëÇØ¼­ 
gtk_text_insert() ÇÔ¼ö¸¦ È£ÃâÇÏ´Â
°ÍÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ ÆùÆ® ÆÄ¶ó¹ÌÅÍ¿¡´Ù NULLÀ» ÁÖ¸é µðÆúÆ® ÆùÆ®¸¦ »ç¿ëÇÑ´Ù.
´ÙÀ½ ¼Ò½º¸¦ ½Ã±×³Î Çڵ鷯(¿¹: on_ok_button2_clicked())ÀÇ ¿¹ÀÇ ¼Ò½º(À§ÀÇ
¼½¼Ç ÂüÁ¶)¸¶Áö¸·¿¡ Ãß°¡Çϵµ·Ï ÇÏÀÚ:

<code>
	ntotal = gtk_text_get_length( (GtkText *)gTextArea );
    /* ÅØ½ºÆ® ȹµæ */
    text_value = gtk_editable_get_chars( 
            (GtkEditable *)gTextArea, 0, ntotal );
    /* ÅØ½ºÆ® ¸ðµÎ Áö¿ì±â */
    gtk_editable_delete_text( (GtkEditable *)gTextArea, 0, ntotal );
    gtk_text_insert( (GtkText *)gTextArea, gdk_font, NULL, NULL,
            text_value, ntotal );
    g_free( text_value );
</code>

ÆùÆ® º¯°æÈÄÀÇ ½ÇÇàÈ­¸éÀº ´ÙÀ½°ú °°´Ù.

<!-- ±×¸² 47 : afterfontchange -->
<figure>
<eps file="images/afterfontchange.eps" height="328pt">
<img src="images/afterfontchange.gif">
<caption><label id="fig_47">ÆùÆ® º¯°æ ÈÄÀÇ ½ÇÇàÈ­¸é</caption>
</figure>

ÀÌÈÄ¿¡ ÀԷµǴ ¸ðµç ÅØ½ºÆ®°¡ ÁöÁ¤µÈ ÆùÆ®·Î µð½ºÇ÷¹À̵ȴÙ. ´Ü ÇѰ¡Áö
¹®Á¦´Â Á¤È®ÇÑ threshold °ªÀº ¸ð¸£°ÚÁö¸¸ Ä¿´Ù¶õ ÆùÆ®(¿¹: 72pt)·Î
µð½ºÇ÷¹À̰¡ ¾ÈµÈ´Ù.

</descrip>

<sect1>°³¹ß ¿©¼¸¹øÂ° ´Ü°è - »óŹ٠Á¦¾î
<p>

»óŹٴ GLADE ·Î ºÙÀ̸é GtkStatusbar ¶ó´Â À§Á¬ÀÌ »ç¿ëµÈ´Ù. ¿©±â¿¡
¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ·Á¸é <tt>guint gtk_statusbar_push(GtkStatusbar
*statusbar, guint context_id, const gchar *text);</tt> ¶ó´Â ÇÔ¼ö¸¦
»ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î¼­ ¸¶¿ì½º°¡ Åø¹Ù ¹öư Áß Open ¹öư À§¿¡ ÀÖÀ» ¶§
»óŹٿ¡ "ÆÄÀÏ Àбâ" ¶ó´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇØº¸ÀÚ. ±×¸®°í ¸¶¿ì½º°¡ ÀÌ ¹öưÀ»
¶°³¯ ¶§ »óŹٿ¡¼­ ¸Þ½ÃÁö¸¦ Áö¿ìµµ·Ï ÇÏÀÚ.

¿ì¼± ÇØ¾ß ÇÒÀÏÀÌ ¸î°¡Áö ÀÖ´Ù. ù¹øÀç À§ÀÇ push ÇÔ¼öÀÇ Ã¹¹øÂ° ÆÄ¶ó¹ÌÅ͸¦
Àü¿ªº¯¼ö·Î °ü¸®ÇØ¾ß ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½°ú °°ÀÌ interface.c ¿¡´Ù
Àü¿ªº¯¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇϰí,

<code>
GtkStatusBar *gStatusBar = NULL;
</code>

create_window1() ÇÔ¼ö³»¿¡¼­ »óŹ٠»ý¼º ÈÄ »ý¼ºµÈ °Í¿¡´Ù ÀÌ Àü¿ªº¯¼ö¸¦
Á¤ÀÇÇÏÀÚ<footnote>¼ÖÁ÷È÷ ¾ê±âÇϸé Àü¿ªº¯¼ö¸¦ ¾È¾²°í »óŹÙÀÇ Æ÷ÀÎÅ͸¦
ȹµåÇÏ´Â ¹æ¹ýÀ» ã¾Æ¾ß ÇßÀ¸³ª °ÔÀ»·¯¼­ ³ªÁßÀ¸·Î ¹Ì·é´Ù. ´Ù¸¥ GNOME ±â¹Ý
¼Ò½ºµéÀ» º¸¸é ´ë°³ GLADE¸¦ ÀÌ¿ëÇÏÁö ¾ÊÀº µí º¸À̰í À̵éÀº Àü¿ªº¯¼ö°¡
¾Æ´Ï¸é gnome »óŹٸ¦ ±×³É ¾²´Â °æ¿ì°¡ ¸¹¾Ò´Ù</footnote>.

<code>
gStatusBar = statusbar1;
</code>

µÎ¹øÂ°·Î ÇØ¾ß ÇÒ ÀÏÀº ¸¶¿ì½º À̵¿À» ÁÖ½ÃÇØ¼­ Open ¹öư À§·Î ¿ÔÀ» ¶§
¹ß»ýµÇ´Â enter ½Ã±×³ÎÀ» Àâ¾Æ ó¸®ÇÏ´Â ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇØ¾ß ÇÑ´Ù.
À̰ÍÀº À§¿¡¼­ ¸¹ÀÌ ÇØ º¸¾ÒÀ¸¹Ç·Î »ý·«ÇÑ´Ù. ±×¸®°í ¸¶¿ì½º°¡ ÀÌ ¹öưÀ»
¶°³¯ ¶§µµ ½Ã±×³ÎÀ» Àâ¾Æ ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇØ¾ß ÇÑ´Ù. À̰͵µ ¿ª½Ã
»ý·«ÇÑ´Ù.

µÎ°¡Áö ÀÏÀÌ ³¡³µ´Ù¸é ¸ÕÀú callbacks.c ¿¡ À§ÀÇ Àü¿ªº¯¼ö¸¦ extern À¸·Î
´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÏÀÚ.

<code>
extern GtkStatusbar gStatusBar;
</code>

±×¸®°í ¸¶¿ì½º enter ½Ã±×³Î Çڵ鷯¿¡´Ù ´ÙÀ½°ú °°Àº Äڵ带 ³ÖÀÚ.

<code>
gtk_statusbar_push( gStatusbar, 1, "ÆÄÀÏ ¿ÀÇÂ" );
</code>

±×¸®°í leave ½Ã±×³Î Çڵ鷯¿¡´Ù ´ÙÀ½°ú °°Àº Äڵ带 ³ÖÀÚ.

<code>
gtk_statusbar_pop( gStatusbar, 1 );
</code>

½ÇÇà ÈÄ »óŹٿ¡ ¸Þ½ÃÁö°¡ ¶ß´Â ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù:

<!-- ±×¸² 48 : statusbar -->
<figure>
<eps file="images/statusbar.eps" height="328pt">
<img src="images/statusbar.gif">
<caption><label id="fig_48">½ÇÇàÈÄ »óŹ٠¸ð½À</caption>
</figure>

<!-- *************************************************************** -->
<sect>¸¶¹«¸®
<!-- *************************************************************** -->
<p>

ºñ·Ï ´Ü¼øÇϳª¸¶ ¿ì¸®´Â <bf>GLADE</bf>¸¦ °¡Áö°í¼­ ÅØ½ºÆ® ¿¡µðÅ͸¦ ¸¸µé¾î
º¸¾Ò´Ù. ¾î¶²°¡? À©µµ¿ìÁîÀÇ ºñÁÖ¾ó ½ºÆ©µð¿À¸¸Å­ ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ±×·¯³ª
´Ù¼Ò ¹ÌÁøÇÑ ºÎºÐµéÀÌ À־ ¿©±â¿¡ ±×°ÍÀ» Á¤¸®ÇϰíÀÚ ÇÑ´Ù. 

<sect1><bf>GLADE</bf>¿¡ ¾î¶² ±â´ÉÀÌ Ãß°¡µÇ¾î¾ß ÇÒ °ÍÀΰ¡?
<p>
<bf>GLADE</bf>´Â À¯±âÀûÀÎ »ý¸íüó·³ ÁøÈ­Çϰí ÀÖ´Â °³Ã¼ÀÌ´Ù.
»ý¸íüÀ̹ǷΠ°è¼ÓµÇ´Â ½ÅÁø´ë»ç°¡ ÀÖ¾î¾ß ÇÏ´Â °Í ¾Æ´Ï°Ú´Â°¡? ³ª´Â ±×·±
Àǹ̿¡¼­ ´ÙÀ½°ú °°ÀÌ <bf>GLADE</bf>°¡ °¡Á³À¸¸é ÇÏ´Â ±â´ÉµéÀ» »Ì¾Æ
º¸¾Ò´Ù. ÀÌ ¹®¼­¸¦ º¸½Ã´Â ºÐµé Áß¿¡ <bf>GLADE</bf>¿¡ ÀÌ·± ±â´Éµé ÁßÀÇ
ÀϺθ¦ Á¦°øÇÒ ¼ö ÀÖ´Â ±âȸ°¡ µÇ½Ã´Â ºÐµéÀÌ ¸¹¾ÒÀ¸¸é ÇÑ´Ù.

<descrip>
<tag>µ¥ÀÌÅÍ º£À̽º ¿¬µ¿ ±â´É</tag>

À̰ÍÀº ¸®´ª½º°¡ »ó¾÷ÀûÀ¸·Î Ȱ¿ëµÇ±â À§Çؼ­ °¡Àå ÇÊ¿äÇÑ ±â´ÉÀÌ´Ù. ´Ù¸¥
<em>RAD</em> Åø¿¡¼­ Á¦°øÇÏ´Â °Íó·³ <em>ODBC</em>, <em>JDBC</em> µî°ú
°°Àº ¿¬µ¿ ä³ÎÀÌ °ø±ÞµÇ¾î¾ß Çϸç, À̸¦ ¹ÙÅÁÀ¸·Î ÇÑ ´Ù¾çÇÑ µ¥ÀÌÅÍ º£À̽º
Çڵ鸵 À§Á¬µéÀÌ °ø±ÞµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù.

<tag>±×·¡ÇÈ ±â´É</tag>
µ¿¿µ»óÀ̳ª Á¤Áö ¿µ»óÀ» ó¸® ¹× º¸¿©ÁÖ´Â À§Á¬ÀÌ Ãß°¡µÇ¾úÀ¸¸é ÇÑ´Ù.

<tag>Åë½Å ¹× ÀÎÅÍ³Ý ±â´É</tag>
½Ã¸®¾ó<footnote>¹°·Ð socket Àº Áö¿øÇÑ´Ù</footnote> ±×¸®°í 
´õ ³ª¾Æ°¡ ÀÎÅͳݱîÁö À̵éÀ» ó¸®Çϰí
º¸¿©ÁÖ´Â À§Á¬À» Ãß°¡µÇ¾úÀ¸¸é ÇÑ´Ù.
</descrip>

³í¿ÜÀÇ ¾ê±âÁö¸¸ GTK ÀÇ ¾ÆÅ³·¹½º°ÇÀº ¾ÆÁ÷ ÇѱÛÈ­¶ó°í º»´Ù. ¸ðµç GTK
¶óÀ̺귯¸® ÇÔ¼öµé¾È¿¡¼­ ÇѱÛÈ­°¡ Á¶¼ÓÈ÷ ÀÌ·ç¾îÁö±â¸¦ ¹Ù¶ó°í ³ªµµ °Å±â¿¡
µ¿ÂüÇÒ ¼ö ÀÖ´Â ±âȸ°¡ ÁÖ¾îÁø´Ù¸é Âü ÁÁ°Ú´Ù.

</article>


ID
Password
Join
If you make a mistake you right it immediately to the best of your ability.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-11-18 18:09:11
Processing time 0.0080 sec