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