|
|
11Àå ·¹µåÇÞ 6.0±â¹ÝÀÇ ½Ã½ºÅÛ °ü¸® ¹× gtk ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³ |
±è »ó ·Ä
¼º¸í: ±è»ó·Ä
´ëȸí: ´Þºû»ç³É
email: dallkill@chollian.net
°»ç: À§¿Í µ¿ÀÏ
ÁÖÁ¦: gtk ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³
¿ä¾à:
·¹µåÇÞ 6.0ÀÌ Ãâ½ÃµÈ ÀÌÈÄ 6.0ÀÌÀüÀÇ ¹öÁ¯ÀÇ ¹èÆ÷ÆÇ°ú ´Ù¸¥ ȯ°æµé·Î ¹Ù²î°Å³ª Ãß°¡µÇ¾úÀ¸¸ç ¿©·¯°¡Áö ¸¹Àº ÅøµéÀÌ °ø°³µÇ°í ÀÖ½À´Ï´Ù. ÀÌÁß¿¡¼ gnomeÇÁ·ÎÁ§Æ®ÀÇ È°¹ßÇÑ È°µ¿°ú ¿©·¯ gtk°ü·Ã ÇÁ·Î±×·¥ÀÇ ÃâÇöÀ¸·Î gtkÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ °ü½ÉÀÌ ¸¹À¸¸®¶ó º¸°í °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ¼ gtk ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼ ¼Ò°³¸¦ ÇϰíÀÚ ÇÕ´Ï´Ù. Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÕ´Ï´Ù.
°¡¿ìÀÇ gtk 1.2.x´ë·ÎÀÇ ÆÐÄ¡µµ ÇØº¼¸¸ ÇÒ °ÍÀÔ´Ï´Ù. ÇöÀç ÇÊÀÚµµ ¾î´ÀÁ¤µµ ÆÐÄ¡´Â ÇÏ¿´Áö¸¸ ¾ÆÁ÷ ¹ö±×¸¦ ¸øÀâ°í ÀÖ´Â °ü°è·Î °ø°³¸¦ ¸øÇϰí ÀÖ½À´Ï´Ù. ¹ö±×°¡ ÀâÈ÷¸é °ø°³ÇÒ »ý°¢ÀÔ´Ï´Ù.
¾ÕÀ¸·ÎÀÇ °ÀÇ ³»¿ë¿¡¼´Â Á¸ÄªÀº »ý·«Çϵµ·Ï ÇϰڽÀ´Ï´Ù. ´ë½Å ¾ËÂù ³»¿ëÀ» ½Æµµ·Ï ³ë·ÂÇϰڽÀ´Ï´Ù. ^^;
gtk ÇÁ·Î±×·¡¹ÖÀÇ ¼Ò°³
gimp ¸¦ ¸¸µé±â À§ÇØ ³ª¿Â À§Á¬ (widget) ÀÎ gtk ´Â ÇöÀç ¸¹Àº ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ°í ÀÖ´Ù. ·¹µåÇÞ 6.0¿¡ Á¤½ÄÀ¸·Î µé¾î°£ gnome°ú ¿äÁò ³ª¿À´Â ÇÁ·Î±×·¥µéµµ gtk¸¦ ¸¹ÀÌ ¼±È£ÇÑ´Ù. qt±â¹ÝÀÇ kdeµµ ¹°·Ð ÁÁÀº À©µµ¿ì ¸Þ´ÏÁ®À̸ç qt ¶óÀ̺귯¸®µµ ¹°·Î ÁÁÀº ¶óÀ̺귯¸®ÀÌÁö¸¸ ÇÊÀÚ´Â gtk¸¦ ¼±È£ÇÏ´Â ÆíÀÌ´Ù.
À̹ø °ÀÇ¿¡¼´Â gtk ¿¡ ´ëÇÑ ¼Ò°³·Î ¸¶Ä¡Áö¸¸ ´ÙÀ½±âȸ°¡ ÀÖ´Ù¸é Á»´õ ±íÀº ³»¿ëÀ» ´Ù·ç¾î º¼±î ÇÑ´Ù. ¶ÇÇÑ qt ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼µµ ¼Ò°³ÇÒ¼ö ÀÖ¾úÀ¸¸é ÇÑ´Ù.
ÇÊÀÚ°¡ gtkÇÁ·Î±×·¥À» Á¢ÇÑ °ÍÀº ¾ó¸¶µÇÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ´Ü¼øÇÑ À§Á¬Á¤µµÀÇ ÇÁ·Î±×·¡¹ÖÀº ±×¸® ¾î·ÆÁö ¾Ê´Ù°í ´À²¼°í ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö Çϸ鼵µ ±×¸® ¾î·ÆÁö ¾ÊÀ½À» ´À²¼´Ù. ÇÏÁö¸¸ gtk¿¡¼ ¾²ÀÌ´Â À§Á¬µéÀÇ Á¾·ù¿Í Ȱ¿ë¹æ¹ýµîÀº ¾ÆÁ÷ ¸Å´º¾óµîÀº ¹ÌÈíÇÑ ÆíÀ̶ó ¼Ò½º Äڵ带 ¹«ÀÛÁ¤ ºÐ¼®ÇÏ´Â Á¤µµÀÌ´Ù. ÇÊÀÚµµ °ø°³µÈ ÇÁ·Î±×·¥ ¼Ò½º¸¦ ºÐ¼®ÇÏ¿© ¹è¿ì´Â ½ÇÁ¤ÀÌ´Ù. ÇÏÁö¸¸ ÇöÀç ¹®¼È ÇÁ·ÎÁ§Æ®°¡ Ȱ¹ßÈ÷ ÁøÇàµÇ°í ÀÖÀ¸´Ï ÁÁÀº tutorialÀ̳ª ·¹ÆÛ·±½º ¹®¼°¡ ³ª¿Ã°ÍÀ̶ó »ý°¢ÇÑ´Ù. ÇöÀç±îÁö ÇÊÀÚ°¡ º¸°í ´À³¤ °ÍÀ» ±âÃÊ·Î gtk¿¡ ´ëÇÑ ¼Ò°³¸¦ ÇϰíÀÚ ÇÑ´Ù. Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÑ´Ù.
»çÁ·Àº ¿©±â¼ ÁÙÀ̰í ÀÌÁ¦ gtk ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è·Î µé¾î°¡ º¸ÀÚ.
1. gtk¶õ ¹«¾ùÀΰ¡?
ÇÊÀÚ´Â ÁÖ·Î gtk tutorialÀ» ÂüÁ¶ÇÑ´Ù. À̰ÍÀº gtk »çÀÌÆ®¿¡¼ ´Ù¿î°¡´ÉÇϸç , Á¤¸®°¡ ÀߵǾî ÀÖ¾î ÇÁ¸°Æ®¸¦ ÇÑ µÚ ÀÌ»Ú°Ô ¹¾î¼ º¸°í ÀÖ´Ù. ¹®¼È ÇÁ·ÎÁ§Æ®°¡ Ȱ¹ßÇÏ°Ô ÁøÇàµÇ°í ÀÖÀ¸´Ï ȨÆäÀÌÁö¸¦ ÀÚÁÖ µé¾î°¡º¸±æ ¹Ù¶õ´Ù. ±Ã±ÝÁõÀ» ÇØ°áÇØÁÙ ¹®¼µéÀ̳ª ¼Ò½ºµéÀÌ ¸¹À» °ÍÀÌ´Ù.
gtk¶õ ¹«¾ùÀΰ¡ÇÏ´Â ´ë´äÀº ¿ø¹®À» ÇÊÀÚ°¡ ¹ø¿ªÇѰɷΠ´ë½ÅÇÏ´Â°Ô ÁÁÀ¸¸®¶ó º»´Ù. introduction¿¡ º¸¸é ´ÙÀ½°ú °°ÀÌ ³ª¿ÍÀÖ´Ù.
" gtk (gimp toolkit) Àº ±×·¡ÇÈÄÃÇÑ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé±â À§ÇÑ ¶óÀ̺귯¸®ÀÌ´Ù. À̰ÍÀº lgplÀÇ ¶óÀ̼±½º Á¤Ã¥À» µû¸£¸é µû¶ó¼, ¾î¶² ·Î¿Æ¼ÀÇ ÁöºÒ¾øÀÌ ¿©·¯ºÐµéÀº open software, free software, ¶Ç´Â »ó¿ë ¼ÒÇÁÆ®¿þ¾î±îÁö Á¦ÀÛ ¹èÆ÷ÇÒ¼ö ÀÖ´Ù. gtk´Â gimp toolkit À̶ó°í ºÒ¸°´Ù. ¿Ö³ÄÇϸé general image manipulation program (gimp)À» °³¹ßÇϱâ À§ÇØ ¸¸µé¾îÁ³±â ¶§¹®ÀÌ´Ù. ±×·¸Áö¸¸ gtk´Â Áö±ÝÀº gnu network object model environment (gnome)»Ó¸¸ ¾Æ´Ï¶ó, ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡ »ç¿ëµÇ°í ÀÖ´Ù. gtk´Â gdk (gimp drawing kit)¸¦ Æ÷ÇÔÇÏ´Â »óÀ§¸ðµ¨À̸ç, gdk´Â ³»ºÎ ±â¹ÝÀ» ±¸¼ºÇÏ´Â À©µµ¿ì ÇÔ¼ö (xlib in the case of x windows)¸¦ Á¢±ÙÇϱâ À§ÇÑ ÀúÂ÷¿ø Æã¼Çµé·Î ±¸¼ºµÇ¾î ÀÖ´Ù. "
À§ÀÇ ¸»À» ¼³¸íÇØ º¸¸é ¿ø·¡´Â gimp¸¦ ½±°Ô Â¥±â À§Çؼ ³ª¿Â ÇÔ¼öµéÀÇ ÁýÇÕüÀÌÁö¸¸ ÇöÀç´Â ¸¹Àº »õ·Î¿î ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µé±â À§ÇØ ¾²À̰í ÀÖÀ¸¸ç, °ø°³ ¼ÒÇÁÆ®¿þ¾î»Ó¸¸ ¾Æ´Ï¶ó »ó¿ë¼ÒÇÁÆ®¿þ¾îÀÇ Á¦ÀÛ±îÁöµµ Çã¶ôÇϰí ÀÖ´Ù. ±âº»Àº gdk¸¦ ±â¹ÝÀ¸·Î Çϰí ÀÕÀ¸¸ç x windows¶ó¸é xlib¸¦ Á¢±ÙÇÒ¼ö ÀÖÀ¸¸ç, ms»çÀÇ À©µµ¿ì¿¡¼µµ »ç¿ëµÉ¼ö ÀÖ´Ù. ÀÌ´Â http://www.gtk.org Âü°íÇÏ¸é ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù. qtÀÇ ¶óÀ̼±½º Á¤Ã¥ÀÌ ¾î¶²Áö´Â Àß ¸ð¸£°ÚÁö¸¸ ÇÊÀÚ°¡ ¾Ë±â·Î´Â ¾ÆÁ÷Àº »ó¿ëÇÁ·Î±×·¥ÀÇ Á¦ÀÛ¿¡ ´ëÇØ¼´Â ¾à°£ÀÇ ·Î¿Æ¼¸¦ ÁöºÒÇÏ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ´Ù. ÀÌ¿¡ ºñÇÑ´Ù¸é gtk´Â ¿ÏÀüÈ÷ lgpl¿¡ µû¸¥´Ù°í ºÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. »ó¿ëÇÁ·Î±×·¥Á¦ÀÛ¿¡ °ü½ÉÀÌ ÀÖ´Ù¸é gtk·Î Çѹø ½ÃµµÇØ º¼¼öµµ ÀÖÀ»°ÍÀ̸ç - ¶óÀ̺귯¸®¿¡ ´ëÇÑ ·Î¿Æ¼ ÁöºÒÀº ¾øÀ¸¹Ç·Î -, ¿¢½º À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ Á¢±ÙÇϱ⿡µµ ¸¹Àº µµ¿òÀÌ µÇ¸®¶ó »ý°¢ÇÑ´Ù. gtk´Â Áö¼ÓÀûÀÎ ¹öÀü¾÷À» Çϰí ÀÖÀ¸¹Ç·Î Á»´õ »¡¸® ÃÖÀûÈµÇ°í ºÎÁ·ÇÑ ºÎºÐµéÀ» ¸Þ±¸¾îÁØ´Ù. ¶ÇÇÑ °ü·Ã Á¤º¸µéÀº ȨÆäÀÌÁö³ª ¸ÞÀϸ®½ºÆ®¸¦ ÅëÇØ ¾òÀ» ¼ö ÀÖÀ¸¹Ç·Î ¿©·¯ºÐµéÀÌ Á»´õ Ȱ¹ßÈ÷ Âü¿©ÇÑ´Ù¸é ¶óÀ̺귯¸®ÀÇ °³¹ß¿¡µµ Âü¿©ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ºñ°ø°³ »ó¿ë ¶óÀ̺귯¸®¿Í´Â ´Þ¸® ÁÁÀº Á¡ÀÌ¶ó º¼¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÇÊÀÚ°¡ ¸» ¼µÎ¿¡ gtk´Â ¾î·ÆÁö ¾Ê´Ù°í ÇÏ¿´´Ù. ±× ÀÌÀ¯´Â ½ÇÁ¦ ±×·¡ÇÈÄÃÇÑ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °ÍÀº ±× ³»ºÎ Áß¿ä ºÎºÐÀ» ¼³°èÇÏ´Â °Íº¸´Ù´Â ´Ü¼øÇÏ°í ±×¸® ¸¹Àº Áö½ÄÀ» ¿ä±¸ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ½ÇÁ¦ ÇÁ·Î±×·¡¹ÖÇÒ¶§¿¡µµ gtk¿¡¼ Áö¿øÇÏ´Â ÇÔ¼ö¸¦ ±×Á® Ȱ¿ëÇÏ´Â °Í¸¸À¸·Î °£´ÜÈ÷ ±¸Çö°¡´ÉÇϸç, »ç¿ëÀÚ°¡ ¿øÇÏ´Â °Í, ¶Ç´Â °³¹ßÀÚ°¡ ¿øÇÏ´Â °ÍÀ» »ý°¢ÇÑ ±×´ë·Î º¸¿©ÁÖ¸é µÇ¾ú´Ù.
gtk¿¡ ¼Ò°³´Â ÀÌÂë¿¡¼ ÇÏ°í ´ÙÀ½Àå¿¡¼´Â gtkÀÇ ±¸¼º ÇÔ¼ö ¸î °³(?)¸¦ »ç¿ëÇÏ¿© ÃÖÃÊÀÇ gtk ÇÁ·Î±×·¡¹ÖÀ» ÇØº¸ÀÚ. Âü°í·Î ¾ÕÀ¸·Î º¸¿©Áö´Â ÇÁ·Î±×·¥µéÀÇ ¼Ò½ºÄÚµå´Â gtk tutorial ÀÇ ³»¿ëÀ» Âü°í·Î »ç¿ëÇѰÍÀÓÀ» ¾Ë¾ÆÁֱ⠹ٶó¸ç ºÎÁ·ÇÑ °ÍµéÀÌ ÀÖ´Ù¸é tutorial ¹®¼¸¦ Âü°íÇϱ⠹ٶõ´Ù.
2. dummy window ¸¸µé¾îº¸±â
ÀÚ ´ÙÀ½ Äڵ带 º¸±â ¹Ù¶õ´Ù.
/* example-start base base.c */
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
gtkwidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (gtk_window_toplevel);
gtk_widget_show (window);
gtk_main ();
return(0);
}
/* example-end */
À§ ÇÁ·Î±×·¥ ¼Ò½º´Â ¹«¾ùÀϰа°Àº°¡? Á¦¸ñÀ¸·Î´Â dummy window ¶ó°í ÇØ³õ¾ÒÀ¸´Ï ´õ¹Ì À©µµ¿ì¸¦ Çϳª ¸¸µç´Ù´Â °ÍÀÏÅÙµ¥.... ½ÇÁ¦·Î À§ ÄÚµå´Â ´Ü¼øÈ÷ À©µµ¿ì Çϳª¸¦ ´Þ¶û ¶ç¿ì´Â ºÎºÐÀÌ´Ù. ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀº À©µµ¿ì, À̸§À» ºÙÀ̱⠹¹ÇÏ¿© ´õ¹Ì À©µµ¿ì¶ó ÇÏ¿´´Ù. nothing window ¶ó°í ÇÏ´Â °ÍÀÌ ´õ Á¤È®ÇÑ °ÍÀÏÁöµµ ¸ð¸£°Ú´Ù.
ù ¼Ò½ºÀÌ´Ï Â÷±ÙÂ÷±Ù ºÐ¼®Çغ¸ÀÚ.
ùÁÙÀÇ /*, */ ´Â ÁÖ¼®ÀÎ °ÍÀº ¾Ë¾ÆµÎÀÚ. ´ç¿¬È÷ cÄÚµå·Î Â¥¿©Á³±â ¶§¹®¿¡ Àú µÎ °³·Î µÑ·¯»çÀÎ °ÍÀº ½ÇÁ¦ ÄÄÆÄÀÏÀº µÇÁö ¾Ê°í ´Ü¼øÈ÷ ÁÖ¼®À» ´Ù´Â ºÎºÐÀ¸·Î µÈ´Ù. ¹®ÀåÀÇ ¾Õ¿¡ '//'À» »ç¿ëÇÏ´Â °Íµµ ´ç¿¬È÷ ÁÖ¼®ÀÌ´Ù.
µÎ ¹øÂ° ÁÙÀÇ
#include <gtk/gtk.h>
À̰ÍÀº gtk¸¦ »ç¿ëÇϱâ À§ÇØ ²À ÇÊ¿äÇÑ Çì´õÀÌ´Ù. À§Ä¡´Â /usr/include/gtk/ ÀÌ´Ù.
½ÇÁ¦ gtkÀÇ ÇÔ¼öµéÀº ¿©·¯ Çì´õ ÆÄÀÏ¿¡ ÇÔ¼ö¸¦ ¼±¾ðÇϰí ÀÖÁö¸¸ À§ÀÇ Çì´õÆÄÀϸ¸ ¼±¾ðÇØ ÁÖ¸é ³¡ÀÌ´Ù. À§ Çì´õÇÔ¼ö°¡ ´Ù¸¥ ÇÏÀ§ Çì´õÆÄÀÏÀ» Æ÷ÇÔÇϱ⠶§¹®ÀÌ´Ù.
gtkwidget *window;
À̰ÍÀº gtkÇÁ·Î±×·¡¹Ö ÇÒ ¶§ ²À ¼±¾ðµÇ´Â º¯¼öÀÌ´Ù. gtkwidgetÀº ¹®ÀÚ ±×´ë·Î gtk widgetÀÇ ÇÑÁ¾·ù¶ó´Â °ÍÀÌ´Ù ±× À̸§À» window ·Î ¼±¾ðÇÑ °ÍÀÌ´Ù. gtkwidget Àº ¿©·¯ °¡Áö°¡ Àִµ¥ gtk·Î Â¥¿©Áø ÇÁ·Î±×·¥ÀÇ ´ëºÎºÐ ÀÎÅÍÆäÀ̽º´Â Àú ÀÚ·áÇü Çϳª·Î ¼±¾ð°¡´ÉÇÏ´Ù. ¹öư ¸Þ´º, ¾ÆÀÌÄÜ, »óŹÙ, ·¹ÀÌºí µî. ¸ðµç °ÍÀÌ Àú ÀÚ·áÇüÀ¸·Î ¼±¾ðÇÏ¸é µÈ´Ù.
ÀÚ ¼±¾ðÀ» ÇßÀ¸´Ï »ç¿ëÀ» ÇØ¾ß ÇÒ °ÍÀÌ´Ù. ¸ðµç °ÍÀÌ Àú Çϳª·Î ¼±¾ð°¡´ÉÇÏ´Ù¸é ¾î´À ºÎºÐ¿¡ »ç¿ëÇÒ °ÍÀΰ¡¸¦ Á¤ÇØ¾ß ÇÒ °ÍÀÌ´Ù. ´ÙÀ½ ºÎºÐÀÌ ÇÑ¿¹ÀÌ´Ù.
window = gtk_window_new ( gtk_window_toplevel);
À̰ÍÀ» ÂùÂùÈ÷ µé¿©´Ù º¸¸é window ¶ó´Â º¯¼ö - ¾ÆÁ÷ ±îÁö´Â ´Ü¼øÈ÷ º¯¼ö-¿¡ window¶ó´Â ÇüŸ¦ °®°Ô ÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â ºÎºÐÀÌ´Ù. À©µµ¿ì´Â ¸»±×´ë·Î âÀ» ÀǹÌÇÏ¸ç ½ÇÁ¦ gtk widget ÀÇ °¡Àå ¹ÙÅÁÀÌ µÇ´Â ºÎºÐÀÌ¸ç ´ëºÎºÐ - °ÅÀÇ ´ëµÎºÐÀÌ À©µµ¿ì·Î ±¸¼ºµÇ¾îÁö¹Ç·Î - ¼±¾ðµÇ¾îÁö´Â ºÎºÐÀÌ´Ù. °¡Àå ¹ÙÅÁÀÌ µÇ´Â À©µµ¿ì¸¦ »ý¼ºÇÑ °ÍÀÌ µÇ¸ç gtk_window_toplevel Àº ¹ÙÅÁÀÌ µÇ´Â À©µµ¿ìÀÇ Æ¯Â¡À» °¡Áö´Â window widget À¸·Î Á¤ÀÇÇÑ´Ù´Â ÀǹÌÀÌ´Ù.
¾ÕÀ¸·Î ¿©·¯ °¡Áö À§Á¬ÀÌ ³ª¿ÀÁö¸¸ ´ëºÎºÐ gtk_*_new ÇüÅÂÀÇ ÇÔ¼ö·Î À§Á¬À» Á¤ÀÇ ÇÏ°Ô µÉ °ÍÀÌ´Ù. '*'Àº button, menu, label, box, frame µîÀÌ µÈ´Ù.
´Ù½Ã Â÷±ÙÂ÷±Ù µé¿©´Ù º¸ÀÚ.
gtk_init ( &argc, &argv);
À̰ÍÀº ÇÁ·Î±×·¥ ½ÇÇà ÆÄÀÏ¿¡ Àμö·Î ³Ñ°Ü¹Þ´Â °ÍÀ» ó¸® ÇÏ´Â ºÎºÐÀ̸ç, ±âº»À¸·Î¸¸ ½ÇÇàÇϱâ À§Çؼ ³»ºÎ ÇÔ¼ö¸¦ ¾²´Â ºÎºÐÀÌ´Ù.
gtk_widget_show ( window);
±ÛÀÚ ±×´ë·Î ÇØ¼®Çϸé widgetÀ» showÇ϶ó´Â ¶æÀ̸ç, À̷νá ȸ鿡 º¸ÀÌ°Ô µÈ´Ù. gtk_widget_show µÚÀÇ Àμö ºÎºÐ¿¡¼ ȸ鿡 º¸¿©Áú À§Á¬À» °áÁ¤ÇÑ´Ù.
gtk_main();
À̺κеµ ¸¶Âù°¡Áö·Î gtkÇÁ·Î±×·¡¹Ö¿¡¼ ºüÁöÁö ¾Ê´Â ºÎºÐÀÌ´Ù. Àμöµµ ¾øÀ¸¸ç ´Ü¼øÈ÷ Àú·¸°Ô Àû¾îÁÖ¸é µÈ´Ù. ¹°·Ð main ÇÔ¼öÀÇ ³¡ºÎºÐÂë¿¡¼,, . ÀÌ ºÎºÐ¿¡ ´ëÇØ¼´Â ´ÙÀ½¿¡ ´Ù·ç¾îº¸ÀÚ. Áß¿äÇÑ ºÎºÐÀ̹ǷÎ.
ÀÚ ÄÄÆÄÀÏÀ» ÇØº¸ÀÚ. ¹°·Ð c ÄÄÆÄÀÏ·¯¸¦ ¾²¸é µÇ¸ç, ¿©±â¼´Â gcc¸¦ ¾²±â·Î ÇÏÀÚ. ÄÄÆÄÀÏ ÇÒ ¶§ ¿É¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÉ °ÍÀÌ´Ù.
$> gcc base.c -o base `gtk-config --cflags --libs`
ÇÁ·ÒÇÁÆ®¿¡¼ Àú·¸°Ô ³Ö¾îÁÖ¸é ¼Ò½º¿¡ ÀÌ»óÀÌ ¾ø´Ù¸é ÄÄÆÄÀÏÀÌ Àß µÉ °ÍÀÌ´Ù. ¹°·Ð gtk ¶óÀ̺귯¸®°¡ ±ò·ÁÀÖ¾î¾ß ÇÑ´Ù. '`'Àº Űº¸µå ¼ýÀÚ 1¿·ÀÇ ¹®ÀÚÀÌ´Ù. Çò°¥¸®Áö ¾Ê±â¸¦ ¹Ù¶õ´Ù.
¿©±â¼ `gtk-config --cflags'´Â ÄÄÆÄÀÏ·¯¿¡°Ô include¸¦ ¾Ë·ÁÁÖ´Â ¿É¼ÇÀ̸ç, '--libs'´Â ¶óÀ̺귯¸®ÀÇ ¸®½ºÆ®¸¦ ¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¡¹ÖÇÒ ¶§ ³Ö¾îÁÖ´Â ¿©·¯ Çì´õÇÔ¼ö¿Í ¶óÀ̺귯¸®¸¦ ÁöÁ¤ÇÏÁö ¾Ê°í À§Ã³·³ ÇÏ¸é ³¡ÀÌ´Ù. ¹°·Ð gtk°ü·Ã ÇÔ¼öÀÏÅ×Áö¸¸...
½ÇÇàÀ» ½ÃŰ¸é ¾ÆÁÖ ½ä··ÇÑ È¸éÀÌ ¶ã °ÍÀÌ´Ù. ¸»±×´ë·Î ¾Æ¹«°Íµµ ¾ÈÇÏ´Â À©µµ¿ìÀÌ´Ù. ÇÏÁö¸¸ ½Ã½ºÅÛ ¸Þ´º³ª ÃÖ¼ÒÈ ¹öưÀ̳ª, close ¹öưÀº ¸¸µé¾îÁ® ÀÖÀ¸´Ï ±×°Ô ¾îµðÀΰ¡. ^^
¿©±â±îÁö ÇßÀ¸¸é ÀÌÁ¦ ´ç½ÅÀº gtkÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¿¡ ¹ßÀ» µé¿©³õÀº °ÍÀÌ´Ù.
ÀÚ ´ÙÀ½Àº hello world ÀÌ´Ù. Á»´õ ³ªÀº ¼¼°è·Î ³ª¾Æ°¼¾ß ÇÏÁö ¾ÊÀ»±î?
3. hello world
À¢¸¸ÇÑ ÇÁ·Î±×·¡¹Ö ÀÔ¹®¼¿¡¼ °¡Àå óÀ½ ºÎºÐ¿¡¼ ¸¸µé¾îº¸´Â ÇÁ·Î±×·¥Àº 'hello world'ÀÏ °ÍÀÌ´Ù. ±× À¯·¡´Â Àß ¸ð¸£°ÚÁö¸¸, hello world¸¦ ȸ鿡 »Ñ¸®´Â °ÍÀ¸·Î ÇØ¼ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ ¼³¸íÇÒ ¼ö Àֱ⿡ ½èÀ¸¸®¶ó »ý°¢ÇÑ´Ù. c ¾ð¾î¸¦ ¿¹¸¦ µéÀÚ¸é ÇÁ·ÒÇÁÆ®¿ëÀ¸·Î §´Ù¸é 10ÁÙµµ ¾ÈµÇ°ÚÁö¸¸. ¿äÁòÀº À©µµ¿ì ÀÎÅÍÆäÀ̽º¸¦ ±â¹ÝÀ¸·Î º¸´Ï ÇÁ·Î±×·¥ ¼Ò½º´Â ªÁö´Â ¾Ê´Ù. ÇÏÁö¸¸ ¿©·¯ºÐµéÀº ¾Õ¿¡ dummy window¸¦ Â¥º¸Áö ¾Ê¾Ò´ø°¡. Á¶±Ý¸¸ »ìÀ» ºÙ¿©¼ 'hello world'¸¦ ¸¸µé¾î º¸ÀÚ.
ÀÌ ½ÃÁ¡¿¡¼ ¹«¾ùÀÌ ´õ ÇÊ¿äÇұ »ý°¢Çغ¸ÀÚ. ¹°·Ð ¾Õ¿¡ dummy window¿Í ºñ±³Çؼ ¸»ÀÌ´Ù.
(1) À©µµ¿ì Áß°£¿¡ hello world¸¦ Âï¾î(?)ÁÖ´Â ÇÔ¼ö°¡ ÀÖÁö ¾ÊÀ»±î? printfó·³....
(2) ±× ÇÔ¼ö¸¦ ã¾Æº¸ÀÚ.
(3) ±×·±µ¥ ÇÔ¼ö´Â ã¾Ò´Âµ¥, ¾î´À ºÎºÐ¿¡¼ ½á¾ß ÇÏ¸é ±× ´ë»ó(window)Àº ¾î¶»°Ô ÁöÁ¤ÇؾßÇÏÁö?
À§ Á¤µµÀÇ »ý°¢À» ÇÑ´Ù¸é 50%´Â ¼º°øÇÑ ¼ÀÀÌ´Ù. ÇÏÁö¸¸ ±×¸® ½±Áö¸¸Àº ¾Ê´Ù. Á»´õ ÁÖÀǸ¦ ±â¿ï¿©Áֱ⠹ٶõ´Ù.
¿ì¼± À§ÀÇ °úÁ¤¿¡ ´ëÇÑ ´äÀ» Àû¾îº¸ÀÚ.
(1), (2) ¿©·¯ °¡Áö°¡ ÀÖÁö¸¸ label widgetÀÌ ÀÖ´Ù. ¶Ç´Ù¸¥ ¹æ¹ýÀº buttonÀ§Á¬ÀÌ ÀÖ´Ù. ´Ù¸¥ ¹æ¹ýµµ ÀÖÀ¸´Ï »ý°¢ÇØ º¸±â ¹Ù¶õ´Ù.
(3) ¹°·Ð gtk_*_new ·Î ¼±¾ðÇÑ´Ù. gtk_container_add¶ó´Â ÇÔ¼ö°¡ ÀÖ´Ù.
ÀÚ ´äÀ» ÇØº¸¾Ò´Ù. ¾î´ÀÁ¤µµ °¨À» Àâ¾ÒÀ¸¸é ¹Ù·Î ´äÀÌ ³ª¿Ã µí ÇÏ´Ù.
¿ì¼± ¼Ò½º¸¦ µé¿©´Ù º¸ÀÚ. ¾ÕºÎºÐ¿¡ »ìÀ» ºÙ¿´´Ù.
/* example-start hello.c */
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
gtkwidget *window;
gtkwidget *label;
gtk_init (&argc, &argv);
window = gtk_window_new (gtk_window_toplevel);
label = gtk_label_new ("hello world");
gtk_container_add (gtk_container(window), label);
gtk_widget_show (label);
gtk_widget_show (window);
gtk_main ();
return(0);
}
/* example-end */
ÄÄÆÄÀÏ ¹æ¹ýÀº ¾Æ±î¿Í µ¿ÀÏÇÏ´Ù. ÄÄÆÄÀÏ µÇ¾ú´Â°¡? ½ÇÇàÀÌ µÇ´Â°¡?
¾ÆÁÖ ÀÛÀº ¸ð¾çÀÇ À©µµ¿ì°¡ ³ª¿Ã °ÍÀÌ´Ù. 'hello world'¶ó´Â ±ÛÀÚ°¡ º¸ÀÌ´Â À©µµ¿ìÀÌ´Ù.
¼º°øÇÏ¿´´Ù¸é ÃàÇÏÇÑ´Ù.
ÇÏÁö¸¸ µû¶ó¸¸ ÇÏ¸é °øºÎ°¡ µÇÁö´Â ¾Æ´Ï´Ï ´Ù½Ã µé¿©´Ù º¸ÀÚ. dummy window¿Í ºñ±³Çؼ ¹¹°¡ ´Þ¶óÁø°Ç°¡?
gtkwidget *label;
¹°·Ð labelÀ̶ó´Â À̸§ÀÇ À§Á¬À» ¼±¾ðÇѰÍÀ̰í,
label = gtk_label_new ("hello world");
label·Î ¾µ°ÍÀÌ¸ç ±× labelÀÌ º¸¿©ÁÖ´Â°Ç 'hello world' Áï ¿ì¸®°¡ º¸ÀÌ±æ ¹Ù¶ó´Â ¹®ÀåÀÌ´Ù.
gtk_container_add (gtk_container(window), label);
»õ·Î¿î ÇÔ¼ö°¡ º¸ÀδÙ. gtk_container_add ÇÔ¼öÀÌ´Ù. À̰ÍÀº »óÀ§ container¿¡ »ðÀÔÇÏ´Â- ´Ù¸¥ Àǹ̷δ Á¾¼Ó ½ÃŰ´Â- ÇÔ¼öÀÌ´Ù. Áï labelÀº window¿¡ Æ÷ÇÔ½ÃÄѶó ÇÏ´Â ÀǹÌÀÌ´Ù. gtk_containerÀº ij½ºÆ® ¿¬»êÀÚÀÌ´Ù. ÄÜÅ×À̳ʶó´Â °ÍÀº ¸»±×´ë·Î ¹º Æ÷ÇÔ ¶Ç´Â ´ãÀ» ¼ö ÀÖ´Â ¾î¶² °ÍÀ» ¸»Çϸç, gtk¿¡¼µµ ¿©·¯ °¡Áö°¡ ÀÖ´Ù. À§ÀÇ ¿¹¿¡¼µµ window À§Á¬ÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù.
µÈ°ÍÀΰ¡? ´Ù½Ã Á¤¸®Çغ¸ÀÚ.
(1) ÃÖ»óÀ§ À©µµ¿ìº¯¼ö¸¦ ¼±¾ðÇϰí gtk_window_new·Î Á¤ÀÇÇß´Ù.
(2) label º¯¼ö¸¦ ¼±¾ðÇϰí gtk_label_new·Î Á¤ÀÇÇß´Ù.
(3) window¿¡ labelÀ» ³ªÅ¸³ª°Ô Çϱâ À§Çؼ gtk_container_add ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù.
(4) gtk_widget_show()ÇÔ¼ö·Î °¢°¢ÀÇ À§Á¬µéÀ» º¸ÀÌ°Ô ÇÏ¿´´Ù.
ÀÌÇØ°¡ °¡´Â°¡? ¾ÆÁÖ ³í¸®ÀûÀÌÁö ¾ÊÀº°¡?
ÀÚ hello windowÀ» ¸¸µé¾úÀ¸´Ï ´ÙÀ½ ´Ü°è·Î ³Ñ¾î°¡ º¸ÀÚ.
4. upgrade 'hello world'
ÀÚ À̹ø Àå¿¡¼´Â Áß¿äÇÑ °Í ¸î°¡Áö°¡ ³ª¿À´Ï ÁÖÀDZí°Ô µé¾îÁֱ⠹ٶõ´Ù. gtkÇÁ·Î±×·¡¹Ö¿¡¼ interface¸¦ ´Ù·ç´Â ºÎºÐÀÌ´Ù. interface¶õ »ç¿ëÀÚ¿Í ÄÄ(or À©µµ¿ì) »çÀÌÀÇ °ü°è¸¦ ¸»Çϸç, »ç¿ëÀÚ°¡ ¿ä±¸ÇÏ´Â ´ë·Î ¹ÝÀÀÇϴ ȯ°æÀ» ±¸ÇöÇÏ´Â °ÍÀÌ interface ÇÁ·Î±×·¡¹ÖÀÌ´Ù. ¾Õ¿¡¼ ´Ù·ç¾ú´ø hello world¿¡ Á¶±Ý¸¸ ´õ »ìÀ» ºÙ¿©¼ ±¸ÇöÇØ º¼±î ÇÑ´Ù.
ÀÚ ¹«½¼ »ìÀ» ´õºÙÀϱî? Áú¹®À» ¹Ù²Ù¾î¼ ¾î¶² ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÒ±î? ¹öưÀ» Çϳª ¸¸µé°í labelÀ» Çϳª ¸¸µç´ÙÀ½, ¹öưÀ» ´©¸£¸é labelÀÇ ³»¿ëÀÌ 'hello world open'À¸·Î ¹Ù²î¾ú´Ù°¡ ´Ù½Ã ´©¸£¸é 'hello world closed'·Î ¹Ù²îµµ·Î ÇØº¸¾Ò´Ù. ¹öưÀÇ ´©¸§¿¡ µû¸¥ º¯È¸¦ ±¸ÇöÇÏ´Â°Ô Áß¿äÇÑ ºÎºÐÀÌ µÈ´Ù.
ÀÚ ¿ì¼± ¼Ò½º ºÎºÐÀÌ´Ù.
#include <gtk/gtk.h>
gtkwidget *label;
void button_clicked ( gtkwidget *widget, gpointer data)
{
static int toggle = 1;
if (toggle == 1)
{
gtk_label_set_text ( gtk_label(label) , "hello world opened");
toggle = 0;
}
else
{
gtk_label_set_text ( gtk_label(label) , "hello world closed");
toggle = 1;
}
}
void delete_event ( gtkwidget *widget, gdkevent *event, gpointer data)
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
gtkwidget *window, *button;
gtkwidget *vbox;
gtk_init (&argc, &argv);
window = gtk_window_new (gtk_window_toplevel);
gtk_window_set_title(gtk_window (window), "upgrade hello world");
gtk_signal_connect ( gtk_object(window), "delete_event",
gtk_signal_func ( delete_event), null);
gtk_container_set_border_width ( gtk_container ( window), 10 );
vbox = gtk_vbox_new ( false,0);
gtk_container_add ( gtk_container ( window ), vbox);
label = gtk_label_new ("hello world closed");
gtk_box_pack_start (gtk_box(vbox), label, true, true, 0);
gtk_widget_show ( label);
button = gtk_button_new_with_label ("+¼+»+++++++ン!");
gtk_signal_connect ( gtk_object (button), "clicked",
gtk_signal_func ( button_clicked ), null);
gtk_box_pack_start (gtk_box(vbox), button, true, true, 0);
gtk_widget_show (button);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return(0);
}
/* example-end */
ÀÚ Çϳª¾¿ µé¿©´Ù º¸ÀÚ.
¿ì¼± main()ºÎºÐºÎÅÍ
»õ·Î¿î ÇÔ¼öµéÀÌ º¸ÀδÙ.
gtk_window_set_title();
gtk_signal_connect();
gtk_container_set_border_width();
gtk_vbox_new();
gtk_button_new_with_label();
gtk_box_pack_start();
¿ì¼± ¼³¸íÀ» ÇÏÀÚ¸é
gtk_window_set_title();
¸ÞÀÎÀ©µµ¿ìÀÇ Á¦¸ñÀ» Á¤ÇØÁÖ´Â ºÎºÐÀÌ´Ù. Àμö´Â window widget°ú Á¦¸ñ ¹®ÀÚ¿ÀÌ´Ù.
Ưº°ÇÑ ¼³¸íÀÌ ¾ø¾îµµ ÀÌÇØ °¥ °ÍÀ̶ó »ý°¢ÇÏ¿© ºÎ°¡ ¼³¸íÀº »ý·«ÇÑ´Ù.
gtk_container_set_border_width();
window ÀÇ border ÀÇ Å©±â¸¦ Á¤ÀÇÇÑ´Ù.
gtk_vbox_new();
gtk¿¡¼ À©µµ¿ì ¾ÈÀÇ ¿©·¯ °¡Áö À§Á¬µéÀ» ¹è¿Çϱâ À§Çؼ´Â box¶ó´Â À§Á¬À» ¸¹ÀÌ ¾´´Ù. À̰ÍÀº ½ÇÁ¦ º¸¿©Áö´Â À§Á¬Àº ¾Æ´ÏÁö¸¸ ´Ù¸¥ À§Á¬µéÀ» ¹è¿ÇÏ´Â °ÍÀ¸·Î ¾²ÀδÙ. À§¿¡ ¾²ÀÎ vboxµµ ÀÖÁö¸¸ hboxµµ ÀÖ´Ù. °¢°¢ ¼öÁ÷ ¹Ú½º¿Í ¼öÆò¹Ú½ºÀÌ´Ù. ¹°·Ð gtk_*_new()À¸·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. hbox¿Í vboxÀÇ Á¶ÇÕÀ¸·Î À§Á¬ÀÇ À§Ä¡¸¦ Á¤Çؼ Á»´õ Á÷°üÈµÈ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé ¼ö ÀÖ´Ù. table À̶ó´Â °Íµµ ¸¹ÀÌ »ç¿ëµÇ¸ç, frameµµ ÀÖ´Ù.
À§ ¼Ò½º Äڵ忡¼ vbox¸¦ Á¤ÀÇÇÏ°í °Å±â¿¡ ·¹À̺í°ú ¹öưÀ» packing ÇÏ¿´´Ù. packing À̶ó´Â ¸»Àº À§Á¬À» ½×¾Æ³Ö´Â´Ù°í º¸¸é µÈ´Ù. Áü°¡¹æ¿¡ ¿©·¯ ¹°Ç°µéÀ» Çϳª¾¿Çϳª¾¿ Á¤¸®ÇÒ ¶§ ¾î¶² ±âÁØÀ¸·Î ³ÖÀ¸¸é º¸±âµµ ÆíÇÏ°í ±â¾ïÇϱ⵵ ÁÁµíÀÌ vbox¶ó´Â °ÍÀ» ¸¸µçÈÄ ¼öÁ÷¹æÇâÀÇ ¹Ú½º¿¡ Â÷°îÂ÷°î widgetÀ» ³ÖÀ¸¸é À§¿¡¼ ¼ø¼ÀûÀ¸·Î ½×¿©¼ º¸±âÁÁ°Ô Á¤µ·µÇ¾î º¸¿©Áø´Ù. ±×¸²À» Âü°íÇϸé ÀÌÇØÇϱ⠽¬¿ï °ÍÀÌ´Ù.
gtk_button_new_with_label();
buttonÀ» Á¤ÀÇÇϴµ¥ labelÀ» ³Ö°í ½ÍÀ» ¶§ ¾²´Â ÇÔ¼öÀÌ´Ù. ¹öư¿¡´Â ÀϹÝÀûÀ¸·Î labelÀÌ º¸¿©¼ »ç¿ëÀÚ¿¡°Ô ¾î¶² ¿ªÇÒÀ» ÇÏ´ÂÁö ¾Ë·ÁÁØ´Ù. ¿©±â¼´Â 'Ŭ¸¯ÇØÁÖ¼¼¿ä!'¶ó°í ÇØº¸¾Ò´Ù. ÇÑ±ÛÆÐÄ¡µÈ gtkÀº ¿µ¹®»Ó¸¸ ¾Æ´Ï¶ó Çѱ۵µ º¸¿©Áö°Ô µÇ¾î ¸Þ½ÃÁöÀÇ ÇѱÛȰ¡ ½¬¿ï µíÇÏ´Ù.
gtk_box_pack_start();
gtk_container_add¿Í ºñ½ÁÇѵ¥. ¿©±â¼´Â ¹Ú½º¿¡ ½×±â(packing) À§Çؼ À§ ÇÔ¼ö¸¦ ¾´´Ù. gtk_box_pack_start()´Â hbox À§Á¬ÀÇ ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ, vboxºÎºÐ¿¡¼´Â À§ÂÊ¿¡¼ ¾Æ·¡ÂÊÀÇ ¼øÀ¸·Î ½×´Â´Ù´Â ÀǹÌÀ̸ç, ¹Ý´ë ¿ªÇÒÀ» ÇÏ´Â gtk_box_pack_end()ÇÔ¼öµµ ÀÖ´Ù. µÚ¿¡ ºÙ´Â ÀÎÀÚµéÀº expand, fillÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¼±ÅÃÀ̸ç, ¸¶Áö¸·ÀÌ paddingÀÇ Å©±â¸¦ Á¤ÀÇÇÑ´Ù.
ÀÚ À§¿¡ ¼³¸íÇÏÁö ¾ÊÀº °ÍÁß¿¡¼ °¡Àå Áß¿äÇÏ´ÙÇÒ¼ö ÀÖ´Â ºÎºÐÀÌ ³²¾Ò´Ù.
gtk_signal_connect( gtkobject *object, gchar *name, gtksignalfunc func, gpointer func_data);
À§ ÇÔ¼ö´Â interface , Áï »ç¿ëÀÚ°¡ ¹º°¡¸¦ ÇàÇÏ¿´À»(signal) ¶§ ¹ÝÀÀ ÇÏ´Â ÇÔ¼ö¿¡ ´ëÇØ¼ ¿¬°á (connect ) ½ÃÄÑÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
À§ÀÇ ¿¹Á¦Áß¿¡¼
gtk_signal_connect ( gtk_object (button), "clicked",
gtk_signal_func ( button_clicked ), null);
ºÎºÐÀ» ¿¹·Î µéÀÚ¸é, »ç¿ëÀÚ°¡ buttonÀ̶ó´Â À§Á¬À» ´·¶(click)À» °æ¿ì 'clicked' ¶ó´Â À̺¥Æ®°¡ ¹ß»ýÇϸç, button_clicked¶ó´Â ÇÔ¼ö¸¦ ºÒ·¯ ½ÇÇàÇ϶ó´Â Àǹ̰¡ µÈ´Ù. ½ÇÁ¦ button_clicked´Â ¼Ò½ºÀÇ ÀºÎºÐ¿¡ Á¤ÀÇÇÏ¿´´Ù.
µÎ ¹øÂ° ÀμöÀÎ "clicked"´Â ÀÓÀÇ·Î Á¤ÇØÁö´Â °ÍÀÌ ¾Æ´Ï´Ù. À̰ÍÀº °¢°¢ÀÇ À§Á¬¿¡ ´ëÇØ¼ »ç¿ëÀÚ°¡ ÇàÇÑ Çൿ - event¶ó°íµµ ÇÒ¼ö ÀÖ´Ù -À» ¸»Çϸç, ¹öưÀ̶ó¸é ´©¸£´Â °ÍÀÌ ÀÖÀ» °ÍÀ̸ç, ¸Þ´º¿¡¼´Â ¼±ÅÃÇÏ´Â ºÎºÐµîÀÌ ¿¹°¡ µÉ ¼ö ÀÖ´Ù. ÀÌ event´Â °¢°¢ÀÇ À§Á¬¿¡ µû¶ó ´Ù¸£¸ç, ±× À̸§¶ÇÇÑ Æ²¸®´Ù. ±× À̸§Àº ¹Ì¸® Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î Çì´õÈÆÄÀÏÀ̳ª ¹®¼¸¦ Âü°íÇϱ⸦ ¹Ù¶õ´Ù. ¹°·Ð »ç¿ëÀÚ°¡ ÀÓÀÇÀÇ À§Á¬À» ¸¸µé°í ÀÓÀÇÀÇ À̺¥Æ®¸¦ ¸¸µé¼ö´Â ÀÖÁö¸¸, ±×°ÍÀº Á»´õ °íÂ÷¿øÀûÀÎ ±â¼úÀÌ´Ù.
ÀÚ, »ç¿ëÀÚ°¡ ¹öưÀ» ´·¶´õ´Ï, button_clickedÀ̶ó´Â ÇÔ¼ö°¡ ºÒ·¯Áø´Ù. ½ÇÁ¦ À§ ¼Ò½º¿¡¼´Â ¹öưÀÌ ´·¯Áö¸é label ÀÇ ³»¿ëÀ» Åä±Û½ÃŰ´Â ÀÛ¿ëÀ» ÇÏ°Ô ÇØ³õ¾Ò´Ù. ÀÌ°Ç c ÇÁ·Î±×·¡¹ÖÀ» ÇÒÁÙ ¾Æ´Â »ç¶÷Àº ½±°Ô ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼³¸íÀº »ý·«Çϱâ·Î Çϰí. ¸¶Áö¸· Àμö´Â ÇÔ¼ö¿¡ ³Ñ°ÜÁú µ¥ÀÌÅÍÀÌ´Ù. ÀÌ µ¥ÀÌÅÍ´Â ´ëºÎºÐ ÇÁ·Î±×·¡¹Ö¿¡¼´Â nullÀÌÁö¸¸ »ç¿ëÀÚ°¡ Çʿ信 ÀÇÇØ ÀÓÀÇÀÇ °ªÀ» ³Ñ°ÜÁÖ¾î¾ß ÇÒ ¶§ Àû¾îÁÖ¸é µÈ´Ù.
À§¿¡ ¶Ç´Ù¸¥ gtk_signal_connect°¡ Àִµ¥, 'delete_event' À̸ç ÀÌ´Â ½Ã½ºÅÛ ¹öư - ¿À¸¥ÂÊ À§ÀÇ x¸ð¾çÀÇ ¹öư - ÀÌ ´·¯Á³À» °æ¿ì gtk ³»ºÎ¿¡ ¹Ì¸® Á¤ÀÇµÈ ±âº» ÇÔ¼ö, gtk_main_quitÀ» ºÎ¸£°Ô µÇ¾î ÀÖ´Ù. ´Ü¼øÈ÷ À©µµ¿ì¸¦ Á¾·á½ÃŰ´Â ÇÔ¼ö´Ù. »ç¿ëÀÚ°¡ ¸¸µéÁö ¾Ê¾Æµµ µÇ´Â - ÀϹÝÀûÀ¸·Î ÇàÇÏ¿©Áö´Â À̺¥Æ® ÇÔ¼ö- ÇÔ¼öµéÀº ¹Ì¸® Á¤ÀÇµÈ °ÍµéÀ» ¾²±âµµ ÇÑ´Ù.
Á¤¸®¸¦ ÇØº¸ÀÚ.
(1) ¿ì¼± windowÀ» »ý¼ºÇϰí, ¹Ú½º¸¦ ¸¸µç´Ù.
(2) labelÀ» »ý¼ºÇϰí Ãʱâ À̸§Àº 'hello world closed'ÀÌ´Ù. À̰ÍÀ» ¹Ú½º¿¡ ½×´Â´Ù(packing).
(3) buttonÀ» ¸¸µé°í Ãʱâ labelÀº 'Ŭ¸¯ÇØ ÁÖ¼¼¿ä'À̸ç, ¹öưÀÌ ´·¯Áú °æ¿ì ÇàÇÏ¿©Áú À̺¥Æ® ÇÔ¼ö¸¦ 'button_clicked'¶ó°í Á¤ÀÇÇÏ¿´°í À̺¥Æ®¿Í ¿¬°áÇÏ¿´´Ù. ¹öư ¶ÇÇÑ box¿¡ ½×¾Ò´Ù.
(4) °¢°¢ÀÇ À§Á¬À» º¸ÀÌ°Ô ÇÏ¿´´Ù.
¹°·Ð ÄÄÆÄÀÏ °úÁ¤Àº ¾ÕÀåµéÀÇ ¿¹Á¦µé°ú µ¿ÀÏÇÏ´Ù.
5. À§Á¬ ÀÛµ¿ ¹æ½Ä ÀÌÇØÇϱâ
gtk_main()ÇÔ¼öÀÇ ¼³¸íÀÌ ºüÁ³´Ù. À§¿¡ º¸ÀÎ ¼Ò½ºµé¿¡¼ µ¿ÀÏÇÏ°Ô ÀûÈù ÇÔ¼ö´Ù. ±×¸® Áß¿äÇÏÁö ¾ÊÀ»°Å °°Áö¸¸ Àú ÇÔ¼ö°¡ ¾ø´Ù¸é gtkÇÁ·Î±×·¥Àº ÄÄÆÄÀÏÀÌ ¾ÈµÈ´Ù. ¸¸ÀÏ µÇ´õ¶óµµ ¾Æ¹«°Íµµ ÀÛµ¿ (event ¹ÝÀÀ) ÇÏÁö ¾Ê´Â âÀÌ º¸ÀϰŶó »ý°¢ÇÑ´Ù.
gtk_main()´Â ½ÇÁ¦ c ¼Ò½º¿¡¼ ¹Ýµå½Ã º¸ÀÌ´Â main()°°Àº Á¸Àç´Ù. ÄÄÆÄÀÏ·¯°¡ main()¸¸À» ãµíÀÌ gtkÇÁ·Î±×·¥Àº gtk_main()°¡ ÀÖ¾î¾ß¸¸ µ¿ÀÛÀ» ÇÑ´Ù. ¹«½¼ ¿ªÇÒÀ» Çϱ淡 ÇÁ·Î±×·¥ÀÇ ÀÛµ¿ ¿©ºÎ¸¦ °áÁ¤ÇÒ±î? gtk ÇÁ·Î±×·¥ÀÇ ÀÛµ¿ ¹æ½ÄÀ» ÀÌÇØÇϸé ÀǿܷΠ½±´Ù.
À§ 'upgrade hello world'¿¡¼ gtk_signal_connect()ÇÔ¼ö¸¦ º¸¾ÒÀ» °ÍÀÌ´Ù. 'À̺¥Æ®°¡ ¹ß»ýÇÏ¿´À» ¶§ ±×¿¡ ¹ÝÀÀÇÏ´Â ÇÔ¼ö¿¡ ´ëÇÑ ¿¬°áÀÌ´Ù' ¶ó´Â ¸»·Î ¼³¸íÀ» ÇßÁö¸¸, Á¶±Ý´õ µé¿©´Ùº¸¸é, Àǹ®ÀÌ »ý±æ °ÍÀÌ´Ù. À©µµ¿ì°¡ ¸¸µé¾îÁö°í ¹öưÀÌ »ý¼ºµÇ°í, ·¹À̺íÀÌ º¸ÀÎÈÄ¿¡, ¹öưÀÌ ´·¯Áö¸é, ÇÁ·Î±×·¥À» ±×°É ¾î¶»°Ô ¾Ë°ÅÀ̸ç, clickedµÇ¾ú´Ù´Â °ÍÀº ¾î¶»°Ô Àü´ÞµÉ °ÍÀΰ¡? ÇÏ´Â °ÍÀÌ´Ù. ¾î´À Á¤µµ °¨ÀÌ ÀâÇû´Â°¡? gtk_main()ÀÌ ±× ¿ªÇÒÀ» ÇÑ´Ù.
½ÇÁ¦ gtkÇÁ·Î±×·¥¿¡¼ gtk_main()Àº ¹«ÇÑ ·çÇÁÀÇ ÇÔ¼ö¶ó°í º¸¸é µÈ´Ù. ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÀÌ µÇ´Ù°¡ gtk_main()¿¡¼ ·çÇÁ¸¦ µ¹°Ô µÇ°í ƯÁ¤ ÀÌÀ¯¿¡ ÀÇÇØ Å»ÃâÇÏ°Ô µÇ°í main()ÀÇ ³¡¿¡ µµ´ÞÇÏ¿© ÇÁ·Î±×·¥Àº Á¾·áµÈ´Ù. gtk_main() ÇÔ¼ö³»ºÎ¿¡¼´Â »ç¿ëÀÚ³ª ¶Ç´Â À©µµ¿ì ½Ã½ºÅÛ¿¡¼ º¸³»´Â ¿©·¯ °¡Áö º¯È(event) µéÀ» üũÇÏ°í ±×°ÍÀÌ ÇöÀç ÇÁ·Î±×·¥ÀÇ À̺¥Æ®ÀÎÁö¸¦ °¡¸§ÇÑ µÚ¿¡ ¸¸ÀÏ ÇöÀçÀÇ ÇÁ·Î±×·¥ÀÇ À̺¥Æ®À̸é À§Á¬ÀÇ Á¾·ù¿Í °¢°¢ÀÇ À̺¥Æ®¿¡ µû¶ó¼ gtk_signal_connect·Î ¿¬°áµÈ ÇÔ¼öµé·Î º¸³»¼ ±× ¹ÝÀÀÀ» º¸¿©ÁÖ°Ô µÈ´Ù. ¹°·Ð ³»ºÎÀûÀ¸·Î ¹Ì¸® Á¤ÀÇµÈ À̺¥Æ®¿Í ÇÔ¼öµéÀ» ½ÇÇàÇÏ´Â ¿ªÇÒµµ ÇÑ´Ù.
À̺¥Æ®¿Í ±× ¹ÝÀÀ ÇÔ¼ö°¡ ÀÖÀ» ¶§ µÑ »çÀÌ¿¡¼ ±× Áß°è ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ gtk_main() ÇÔ¼ö¶ó°í º¸¸é µÉ °ÍÀÌ´Ù. ¶ÇÇÑ ¾ÕÀ¸·Î ¿©·¯ºÐµéÀÌ Â¥´Â gtk ÇÁ·Î±×·¥µµ ¸¶Âù°¡Áö·Î À̺¥Æ®µé°ú ±× ÀÀ´äÀÇ ¹À½À¸·Î ¸¸µé¾î¾ß ÇÑ´Ù´Â °Íµµ ¾Ë¾Æ¾ß ÇÒ °ÍÀÌ´Ù.
6. ¸¶Ä¡¸ç
Á»´õ ¸¹Àº ³»¿ëÀ» ´Ù·ç°í ½Í¾úÁö¸¸ Áö¸é»ó À̸¸ ÁÙÀ̱î ÇÕ´Ï´Ù. ÇÊÀÚµµ ¾ÆÁ÷Àº gtkÇÁ·Î±×·¡¹ÖÀ» °øºÎÇÏ´Â ÁßÀ̶ó ÀÚ¼¼ÇÑ ºÎºÐÀº Àß ¸ð¸¨´Ï´Ù. ÇÏÁö¸¸ Á¦°¡ ÀÌÇØÇÑ ºÎºÐ¿¡ ´ëÇØ¼ ³²µé¿¡°Ô ¾Ë·ÁÁÖ´Â °Íµµ ¼·ÎÀÇ ¹ßÀü¿¡ µµ¿òÀÌ µÇ¸®¶ó »ý°¢Çϰí ÀÌ·¸°Ô ±ÛÀ» ½áº¾´Ï´Ù. Ʋ¸° ³»¿ëµµ ÀÖÀ»¼ö ÀÖÀ¸´Ï À߸øµÈ ºÎºÐ¿¡ ´ëÇØ¼´Â ¸ÞÀÏÀ» º¸³»ÁÖ½Ã¸é °¨»çÇϰڽÀ´Ï´Ù. À̹ø °ø°³°¿¬È¸°¡ ÁÁÀº ±âȸ°¡ µÇ¾î¼ gtk ÇÁ·Î±×·¡¹Ö ÇÏ´Â ºÐµéÀÌ ¸¹¾ÆÁ®¼ °°ÀÌ ¸ð¿© ¾ê±âÇÒ¼ö ÀÖ´Â ±âȸ°¡ ¸¹¾ÆÁ³À¸¸é ÇÕ´Ï´Ù.
ÇÁ·Î±×·¡¹Ö °øºÎ ÇÒ ¶§¿¡´Â ¹®¼µéµµ ÀÖÀ¸´Ï ±×°É Âü°íÇÏ½Ã±æ ¹Ù¶ó¸ç, Àǹ®³ª´Â »çÇ×ÀÌ ÀÖ´Ù¸é gtk»çÀÌÆ®ÀÇ ¸ÞÀÏ ¸®½ºÆ®¿¡ µé¾îµµ ÁÁÀ» µí ÇÕ´Ï´Ù. ÇϽô Àϵé Àß µÇ½Ã±æ ¹Ù¶ø´Ï´Ù. ¸»¿¡ µÎ¼°¡ ¾ø¾î Á˼ÛÇÕ´Ï´Ù. ^^;
gtk »çÀÌÆ®
http://www.gtk.org
ÇÊÀÚ ¿¬¶ôó
õ¸®¾È : dallkill
email : dallkill@chollian.net