X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ µµÀüÇϽô ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Àúµµ ¾Æ´Â °ÍÀº ¸¹ÀÌ ¾øÁö¸¸ ¿©·¯ºÐÀ» Á¶±ÝÀÌ¶óµµ µµ¿ï ¼ö ÀÖ´Ù¸é, ±×¸®°í ÀúÀÇ °Á¸¦ °è±â·Î ´õ¿í ´õ ¸¹Àº ¼öÁسôÀº X À©µµ¿ì ÇÁ·Î±×·¡¹Ö °ÁµéÀÌ »ý°Ü³ª±æ ±â´ëÇÏ¸é¼ X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤À» ½ÃÀÛÇÒ±î ÇÕ´Ï´Ù. ¾î·Æ´õ¶óµµ Æ÷±âÇÏÁö ¸¶½Ã°í ³¡±îÁö Àú¿Í ÇÔ²² °¡¼Å¼ ´ç´çÇÑ X À©µµ¿ì ÇÁ·Î±×·¡¸Ó·Î ¿ì¶Ò ¼½Ê½Ã¿ä. ±×¸®°í ¸®´ª½º¸¦ ºû³»ÁÝ´Ï´Ù.
¿©·¯ºÐÀÇ ¼±ÅÃÀº Á¤¸»·Î Ź¿ùÇÕ´Ï´Ù. X À©µµ¿ì ½Ã½ºÅÛÀº MS À©µµ¿ìÁî 95¿Í °°Àº ¾ûÅ͸®¿¡´Ù ´Ü¸íÇϴ üÁ¦¿Í´Â ÀüÇô ´Ù¸¥ ¼öÁØÀÇ ¾ÈÁ¤µÇ°í Ç¥ÁØÀûÀÎ ½Ã½ºÅÛÀÔ´Ï´Ù. ¿©·¯ºÐ²²¼ ¹Ì·¡¸¦ »ý°¢ÇϽŴٸé, ¹Ù·Î X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ¼±ÅÃÇϽʽÿä.
ÀÚ, ¿ì¼± Á¡°ËÇØ¾ß ÇÒ °ÍµéÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ Áغñ°¡ µÇ¾î ÀÖ´ÂÁö ¾Ë¾ÆºÁ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ÀÌ ±ÛÀ» Àд ºÐµéÀº ÃÖ¼ÒÇÑ X À©µµ¿ì°¡ ÀÛµ¿ÇÏ°í °è½Å ¼±ÅùÞÀº(?) ºÐµéÀÏ °ÍÀÌ°í, ³²Àº °ÍÀº ¿©·¯ºÐÀÌ ½½·¢¿þ¾î ¼³Ä¡½Ã X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ´Â Çì´õ ÆÄÀÏ µîÀ» Á¦´ë·Î ¼³Ä¡Çϼ̴ÂÁö È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. /usr/include/X11 ¤Ô±×¸®°í /usr/X11/lib ¿¡ ÈÀϵéÀÌ ÀÖ´ÂÁö ¸»ÀÔ´Ï´Ù.
¸ðµÎ ÀÌ»ó¾ø´Ù°í¿ä? ³×, ±×·¯¸é ½ÃÀÛÇսôÙ.
X À©µµ¿ì ÇÁ·Î±×·¥À̶õ X À©µµ¿ìÀÇ 'ÀÚ¿ø(Resource)'À» ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. XÀÇ ÀÚ¿øµéÀº ´ëÇ¥ÀûÀ¸·Î â(Window), »ö»ó(Color Map), ÆùÆ®(font) µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÀÚ¿øµéÀ» X À©µµ¿ì ¼¹ö(Server)¶ó°í ÇÏ´Â ³à¼®ÀÌ Àü±ÇÀ» °¡Áö°í °ü¸®ÇÏ°í ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ¿ªÇÒÀº ÀÌ¹Ì Á¤ÇØÁ® ÀÖ´Â '±ÔÄ¢'¿¡ µû¶ó¼, ÀÚ¿øÀ» °ü¸®ÇÏ°í ÀÖ´Â ¼¹ö¿¡ ¿¬°áÇÏ¿©, ¼¹ö´õ·¯ ¿ì¸®°¡ ¿øÇÏ´Â ÀÚ¿øÀ» ¼ºñ½ºÇØ´Þ¶ó°í ¿äûÇÏ´Â ÀÏÀÔ´Ï´Ù. ¹Ù·Î ¿ì¸®´Â ¼¹ö¶ó´Â ³ð°ú ¾î¶»°Ô ¿¬°áÇÒ °ÍÀÎÁö, ±×¸®°í ¾î¶»°Ô ¼¹ö´õ·¯ ÀÌ°Í Àú°Í ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀ» ´Þ¶ó°í ÇÏ´ÂÁö¸¦ ¹è¿ì´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ°Ô µË´Ï´Ù.
ÀÌ·¯ÇÑ ÇÁ·Î±×·¥À» Ŭ¶óÀ̾ðÆ®(Client)¶ó°í ÇÏÁö¿ä. ¼¹ö/Ŭ¶óÀ̾ðÆ® °³³äÀ̶ó°í Çؼ Ç×»ó ÇÁ·Î±×·¥À» "¹«¾ùÀÌ ¹«¾ù¿¡ ¿¬°áÇÏ¿© ¿øÇÏ´Â ÀÏÀ» ÇÑ´Ù"¶ó´Â »ç°í¹æ½Ä ÇÏ¿¡ ¸ðµç ÇÁ·Î±×·¥À» Â¥°Ô µË´Ï´Ù. ÀÌ´Â ´õ ³ª¾Æ°¡ ¼¼°è ÀúÆí¿¡ ÀÖ´Â ¼¹ö¿¡ ¿ì¸®ÁýÀÇ Å¬¶óÀ̾ðÆ®°¡ ¿¬°áÀ» ÇÏ¿© ¼ºñ½º¸¦ ¹Þ´Â´Ù´Â "³×Æ®¿öÅ© ÁöÇâÀû"ÀÌ°í ¹Ì·¡ ÁöÇâÀûÀÎ ÇÁ·Î±×·¡¹ÖÀÌ µË´Ï´Ù. ÀÎÅÍ³Ý ½Ã´ë¸¦ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô´Â ¾ÆÁÖ Áß¿äÇÑ °³³äÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ºÐ²²¼ Àú¿Í ÇÔ²² X ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¸¦ ŽÇèÇϽô٠º¸¸é ¾ÆÁÖ ÀÚ¿¬½º·´°Ô ¸ÚÁø ³×Æ®¿öÅ© ÇÁ·Î±×·¥¿¡ µµÀüÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù.
¿ì¸®´Â ´ÜÁö Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ¼¹ö¿¡ ¿¬°áÇÏ°í, ¼ºñ½º¸¦ ¹Þ°í, ¿¬°áÀ» ÇØÁ¦ ÇÏ´Â °ÍÀ» ¹è¿ì´Â °ÍÀÏ »ÓÀ̶ó´Â »ç½ÇÀ» Ç×»ó ¸í½ÉÇØÁÖ¼¼¿ä!
¿©·¯ºÐ ¸ðµÎ ´çÀå¿¡ ½ÇÁ¦ÀûÀÎ X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÏ°í ½ÍÀ¸½Ç °Ì´Ï´Ù. ÇÏÁö¸¸, ÀÌ·¯ÇÑ »ç½ÇµéÀº ¾Ë°í µé¾î°¡¼Å¾ß ´õ¿í ´õ »¡¸® ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇØÁö½Ç ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù.
cd /usr/X11/lib Çغ¸¼¼¿ä. ±×¸®°í ls ... lib¶ó´Â ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ¸¹Àº ÈÀϵéÀÌ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀÌ ³à¼®µé '¶óÀ̺귯¸®'´Â ¿ì¸®¸¦ Ç×»ó µµ¿ÍÁÖ´Â ³ðµéÀÔ´Ï´Ù. À̵éÀÌ ¾øÀ¸¸é ¾Æ¹« °Íµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ³à¼®µéÀ» ¿©·¯ºÐ²² ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù.
³ª¸ÓÁö Ä£±¸µéÀº ¼Ò°³½ÃÄÑ µå¸®±â Èûµé±º¿ä. ¾ÆÁ÷ ¶§°¡ µÇÁö ¾Ê¾Æ¼... ³ªÁß¿¡ ¼Ò°³½ÃÄÑ µå¸± ±âȸ°¡ ¿Ã Áö...
Ŭ¶óÀ̾ðÆ®°¡ Á¦ÀÏ ¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ¹«¾ùÀϱî¿ä? ... ¼¹ö¿¡ Á¢¼ÓÇÏ´Â ÀÏÀÔ´Ï´Ù.
°ú¿¬ ³ª´Â ¾î¶² ¼¹ö¸¦ ¼±ÅÃÇÒ °ÍÀΰ¡? ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÕ´Ï´Ù. º¸Åë µµ½º, À©µµ¿ìÁî ȯ°æ¿¡ Àͼ÷ÇϽŠºÐµéÀº Á» »ý¼ÒÇÑ °³³äÀÌÁö¿ä. ÇÏÁö¸¸ ¿äÁòÀº ÀÎÅͳÝÀ» ¸¹ÀÌ ÇϽñ⠶§¹®¿¡ ÀÌÇØÇϽñ⠾î·ÆÁö´Â ¾ÊÀ» °Ì´Ï´Ù. ¸®´ª½º X À©µµ¿ì ȯ°æ¿¡¼´Â ¾ÆÁÖ °£´ÜÇÑ ¹®Àåµé·Î ¿©·¯ºÐ ¿·¿¡ ÀÖ´Â ÄÄÇ»ÅÍ ¸»°íµµ ¼¼»ó ÀúÆí¿¡ ÀÖ´Â ÄÄÇ»ÅÍÀÇ ¸ð´ÏÅÍ¿¡´Ù ÇϳªÀÇ Ã¢À» ¶ç¿ì´Â ÀÏ Á¤µµ´Â ³Ê¹«µµ ½±°Ô ÇÒ ¼ö Àְŵç¿ä.
vi, emacs¿Í °°Àº ¿¡µðÅ͸¦ ÀÌ¿ëÇؼ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ µé¾î ÀÖ´Â ÈÀÏÀ» Çϳª ¸¸µé¾î º¸¼¼¿ä.
#include <X11/Xlib.h>
main()
{
Display *d ;
d = XOpenDisplay ("localhost:0.0") ;
XCloseDisplay (d) ;
}
¸¸¾à À§ÀÇ ³»¿ëÀ» ex01.c¶ó´Â À̸§À¸·Î ÀúÀåÇϼ̴ٸé,
cc -o ex01 ex01.c -lX11 Çغ¸½Ê½Ã¿ä.
ÄÄÆÄÀÏÀÌ Àߵ˴ϱî? ¾ÈµÈ´Ù±¸¿ä? ¿Ö ±×·²±î¿ä? Èûµç ¿µ¾îÁö¸¸ ¿¡·¯ »çÀ¯¸¦ Àß º¸½Ã¸é ¾Æ¸¶µµ Çì´õÆÄÀÏÀ» ¸øã´Â´Ù°í ±×·¯Áö ¾Ê³ª¿ä?
±×·¯¸é ´ÙÀ½°ú °°ÀÌ INCLUDE µð·ºÅ丮¸¦ ÁöÁ¤ÇØÁֽʽÿä.
cc -o ex01 ex01.c -I/usr/include/X11 -lX11
ÄÄÆÄÀÏÀº µÇµµ ¸µÅ©°¡ ¾ÈµÇ´Ù¸é ¶óÀ̺귯¸® µð·ºÅ丮µµ ÁöÁ¤ÇØÁÖ¼¼¿ä. -L/usr/X11/lib ¸¦ ¸í·ÉÇà¿¡ Ãß°¡½ÃÅ°½Ã¸é µË´Ï´Ù.
Á¦´ë·Î ÄÄÆÄÀÏÀÌ ÀÌ·ç¾îÁ³´Ù¸é, ½ÇÇàÀ» ½ÃÄѺ¸ÁÒ. ex10 ¿£ÅÍ!
¿©·¯ºÐ²²¼ ½Ç¸ÁÇϽô °ÍÀ» ´À³¥ ¼ö ÀÖ½À´Ï´Ù. :) ÀÌ°Ô ¹¹³Ä?
ÇÏÁö¸¸! ÀÌ ÇÁ·Î±×·¥Àº X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀÇ °ÅÀÇ ¸ðµç °ÍÀ» º¸¿©ÁÖ´Â °ÍÀ̳ª ´Ù¸§¾ø´Â ¾ÆÁÖ Áß¿äÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Àú´Â ±×·¸°Ô ¿ì±â°í ½Í³×¿ä. :)
ÀÌ ¾ûÅ͸®(?) X À©µµ¿ì ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¼³¸íÀ» µå¸®°íÀÚ ÇÕ´Ï´Ù.
ùÁÙ INCLUDE ¹®ÀåÀº XOpenDisplay, XCloseDisplay, Display º¯¼ö°¡ ¼±¾ðµÇ¾î ÀÖ´Â Çì´õÈÀÏ Xlib.h¸¦ Æ÷ÇÔ½ÃÅ°´Â ¹®ÀåÀÔ´Ï´Ù. ´ÙÀ½À¸·Î ´ç¿¬È÷ main ÇÔ¼ö°¡ Á¤ÀǵǾî¾ß°ÚÁÒ?
DisplayÇü Æ÷ÀÎÅÍ d ¸¦ ¼±¾ðÇÕ´Ï´Ù.
µð½ºÇ÷¹ÀÌ°¡ ¹«¾ùÀÎÁö Àß ¾Æ½Ç °Ì´Ï´Ù. ¿©·¯ºÐ²²¼ ¹Ù·Î ´« ¾Õ¿¡ µÎ°í °è½Å °ÍÀÌ ¸ð´ÏÅͶó°í ÇÏ´Â 'µð½ºÇ÷¹ÀÌ'ÀÔ´Ï´Ù. ±×·±µ¥ ¿©±â¼ Display¶ó°í ÇÏ´Â °ÍÀº X À©µµ¿ì ½Ã½ºÅÛ¿¡¼ ¾à°£ È®ÀåµÈ Àǹ̷Π»ý°¢ÇÕ´Ï´Ù.
Á¤ÀÇ : Display¶õ ÇϳªÀÇ ¼¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â 1°³ ÀÌ»óÀÇ ½ºÅ©¸°(Screen), 1°³ÀÇ Å°º¸µå, ¸¶¿ì½º µîµîÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Â ÁýÇÕüÀÌ¸ç ¿öÅ©½ºÅ×À̼Ç(Workstation) À̶ó°í ºÎ¸£±âµµ ÇÑ´Ù.
ÀÌ·¯ÇÑ µð½ºÇ÷¹ÀÌ´Â º¸Åë ¸ð´ÏÅÍ Çϳª Àüü¸¦ ³ªÅ¸³»´Â ½ºÅ©¸°À» Çϳª °®´Â °æ¿ì°¡ º¸ÅëÀÌÁö¸¸ Ư¼öÇÑ °æ¿ì 2°³ ÀÌ»óÀÇ ½ºÅ©¸°À» °®´Â °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡ µÎ °³ÀÇ ¸ð´ÏÅ͸¦ ¾²´Â "µà¾ó ¸ð´ÏÅÍ" ½Ã½ºÅÛµµ Á¾Á¾ º¼ ¼ö ÀÖ½À´Ï´Ù. ±× °æ¿ì Çϵå¿þ¾î°¡ ¹ÞÃÄÁشٸé, X ½Ã½ºÅÛÀº µÎ °³ÀÇ È¸éÀ» °¢°¢ ÀÌ¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ÇÁ·Î±×·¥ Çϳª ¸¸µé¸é Á¤¸» Àç¹ÌÀÖ°ÚÁÒ? X À©µµ¿ì ½Ã½ºÅÛ¿¡¼´Â ³Ê¹«µµ ½±°Ô ÀÌ·ç¾îÁý´Ï´Ù.
ÀÚ, ÀÌÁ¦ ¿ì¸®°¡ ¿øÇÏ´Â µð½ºÇ÷¹ÀÌ ¼¹ö¿¡ Á¢¼ÓÀ» Çغ¾½Ã´Ù.
XOpenDisplay ("localhost:0.0");
ÀÌ ¹®ÀåÀº localhostÀÇ 0¹ø µð½ºÇ÷¹ÀÌ(Áï, ù¹ø° µð½ºÇ÷¹ÀÌ)ÀÇ 0¹ø ½ºÅ©¸°(Áï, ù¹ø° ½ºÅ©¸°)¿¡ Á¢¼ÓÇ϶ó´Â ¶æÀÔ´Ï´Ù. localhost´Â ¹Ù·Î ¿©·¯ºÐ ÄÄÇ»Å͸¦ ÁöĪÇϴ ȣ½ºÆ®¸íÀÔ´Ï´Ù. ÀÌ°ÍÀ» ¸¸¾à ´Ù¸¥ ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò·Î ½áÁشٸé, ¾î¶»°Ú´Ï±î? ¿©·¯ºÐÀÇ ÄÄÇ»ÅÍ°¡ ³×Æ®¿öÅ©¿¡ ¹°·ÁÀÖ°í, »ó´ë¹æ È£½ºÆ®¸¦ »ç¿ëÇÒ ±ÇÇÑÀÌ ÁÖ¾îÁ® ÀÖ´Ù¸é, ¿ì¸® ÇÁ·Î±×·¥Àº Àú ¸Ö¸®¿¡ Àִ ȣ½ºÆ® ¼¹ö¿Í ¿¬°áÀ» ÇÏ°Ô µË´Ï´Ù. ¾Æ´Ï, ÀÌ·¸°Ô °£´ÜÇÒ ¼ö°¡!!! ÀÎÅÍ³Ý ÇÁ·Î±×·¥À̶ó´Â °ÍÀÌ º° °Í ¾Æ´Ï±º¿ä.
localhost:0.0 °ú °°Àº Ç¥Çö½ÄÀ» ´«¿©°Ü º¸¾ÆÁֽʽÿä. ¸í·ÉÇà¿¡¼ ÇÑ ¹ø set À̶ó°í Ãĺ¸¼¼¿ä. ¾Æ¸¶ ³»¿ëÀÌ ¸¹¾Æ¼ more ¸¦ ÇØÁÖ¼Å¾ß ÇÒ °Ì´Ï´Ù. ÇÑ ¹ø ±× ³»¿ëÀ» ÁÖ·ç·è »ìÆ캸½Ã¸é DISPLAY=:0.0À̶ó´Â Ç¥Çö½ÄÀ» ãÀ¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× ´ÙÀ½À¸·Î HOSTDISPLAY=freeyong:0.0 ÀÌ·± Ç¥Çöµµ º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ¹°·Ð freeyong°ú °°Àº ºÎºÐÀº ¿©·¯ºÐ¸¶´Ù ´Ù¸£Áö¿ä. ¿©·¯ºÐ²²¼ ÁöÁ¤ÇØÁֽŠÀ̸§ÀÌ ³ªÅ¸³¯ °Ì´Ï´Ù. localhost:0.0 À» freeyong:0.0µîÀ¸·Î ¹Ù²Ù¾î Áּŵµ µË´Ï´Ù. ÇÏÁö¸¸ ÀϺη¯ ¾Æ¹« Àǹ̵µ ¾ø´Â À̸§À» Á־½Ê½Ã¿ä. ÄÄÆÄÀÏÇÏ°í ½ÇÇàÀ» ½ÃÄÑ º¸½Ã¸é ±× °á°ú¸¦ ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ²À! È®ÀÎÇغ¸¼¼¿ä. º¸ÅëÀº Ç¥Çö½Ä ºÎºÐ¿¡ NULLÀ» ÁÖ¸é ÇöÀç DISPLAY¶ó´Â ȯ°æº¯¼öÀÇ °ªÀ» ÀÐ¾î¼ ¼¹ö·Î »ç¿ëÇÕ´Ï´Ù.
Á¢¼ÓÇؼ ÇÑ ÀÏÀº Çϳªµµ ¾øÁö¸¸, ÀÌÁ¦ Á¢¼ÓÀ» ¸¶ÃÄ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ±× ÇÔ¼ö°¡ ¹Ù·Î XCloseDisplay ÇÔ¼öÀÔ´Ï´Ù.
¿À´ÃÀº ¾ÆÁÖ ¾ÆÁÖ °£´ÜÇÏÁö¸¸, ¶ÇÇÑ ¾ÆÁÖ ¾ÆÁÖ ±Ùº»ÀûÀÎ ÇÁ·Î±×·¥À» Çϳª Â¥º¸¾Ò½À´Ï´Ù. ¸ðµç X À©µµ¿ì ÇÁ·Î±×·¥Àº ±âº»ÀûÀ¸·Î ¿¹Á¦ 1 ÇÁ·Î±×·¥°ú ±× Çü½ÄÀÌ °°½À´Ï´Ù. ¼¹ö¿¡ ¿¬°áÇÏ°í ¼ºñ½º ¹ÞÀº ÈÄ, Á¢¼ÓÀ» ÇØÁ¦ÇÕ´Ï´Ù. ¸ðµç À¯¿ëÇÑ ÀÛ¾÷Àº XOpenDisplay ÇÔ¼ö¿Í XCloseDisplay ÇÔ¼ö »çÀÌ¿¡ Àû¾îÁÖ½Ã¸é µË´Ï´Ù.
ÀÌ ±ÛÀ» ´Ù ÀÐÀ¸½Å ÈÄ, ²À Xlib.h ÈÀÏÀÇ ³»¿ëÀ» »ìÆ캸½Ê½Ã¿ä. ¿¹¸¦ µé¾î Display Çü º¯¼ö´Â ¾î¶»°Ô ¼±¾ð, Á¤ÀǵǾî ÀÖ´ÂÁö º¸½Ã¸é, Á¤¸»·Î ¸¹Àº Á¤º¸¸¦Áö´Ï°í ÀÖ´Â ±¸Á¶Ã¼(struct)¶ó´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.
¾Õ¿¡¼ ¸¸µç ¿øÃÊÀû(?) ÇÁ·Î±×·¥Àº ´ÜÁö ¼¹ö¿Í Á¢¼ÓÇÏÀÚ ¸¶ÀÚ Á¢¼ÓÀ» ²÷¾î¹ö¸®´Â °æ¿ì¿´½À´Ï´Ù. ±×·³, ÀÌÁ¦´Â ¼¹ö¿¡ Á¢¼ÓÇÏ°í ³ª¼ ¾ÆÁÖ °£´ÜÇÑ ÀÏÀ» Çϳª ½ÃÄѺ¸µµ·Ï ÇսôÙ. ¹Ù·Î â Çϳª¸¦ ¸¸µé¾î¼ Ç¥½ÃÇغ¸´Â °Ì´Ï´Ù.
#include <X11/Xlib.h>
main()
{
Display *d ;
Window w, root ;
d = XOpenDisplay(NULL) ;
root = XDefaultRootWindow (d);
w = XCreateSimpleWindow ( d, root, 50, 50, 400, 300,
2, BlackPixel (d,0), WhitePixel(d,0) );
XMapWindow (d, w);
XFlush (d);
getchar();
XCloseDisplay (d);
}
À̹ø ¿¹Á¦¿¡¼´Â Window ¶ó´Â »õ·Î¿î ÀÚ·áÇü°ú XDefaultRootWindow(), XCreateSimpleWindow(), XMapWindow(), XFlush() µîÀÇ »õ·Î¿î ÇÔ¼öµéÀÌ ³ª¿À´Â±º¿ä. ¾Ñ! BlackPixel(), WhitePixel()°ú °°Àº ¸ÅÅ©·Îµµ º¸À̴±º¿ä. ÇÏÁö¸¸ ÀÌ ¸ÅÅ©·ÎµéÀº ³ªÁß¿¡ ¼³¸íµå¸®±â·Î ÇÏ°Ú½À´Ï´Ù. ÇÏ·ç¿¡ ³Ê¹« ¸¹Àº °ÍÀ» ¹è¿ì¸é ¸Ó¸®°¡ ¾ÆÇÁÀݾƿä?
¿ì¸®°¡ âÀ» ¸¸µé°í ½ÍÀ» ¶§´Â â Çϳª¸¶´Ù À§ÀÇ ¿¹¿¡¼ ³ª¿Â Window Çü º¯¼ö Çϳª°¡ ÇÊ¿äÇÏ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Window Çü º¯¼ö Çϳª´Â ±× â¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â º¹ÀâÇÑ ±¸Á¶Ã¼ Á¤µµ¶ó°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ¿¹»óÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î´Â âÀÇ Å©±â, À§Ä¡, »ö»ó µîÀÌ ÀÖ½À´Ï´Ù.
Áö±ÝºÎÅÍ ¼³¸íµå¸®´Â ±âº»ÀûÀÎ ÀýÂ÷¸¦ ²À ¸Ó¸® ¼Ó¿¡ ³Ö¾îµÎ¼¼¿ä. ¾î¶² âÀ» ¸¸µéµçÁö ¿ì¸®´Â ¿ì¼±ÀûÀ¸·Î ±× â¿¡ ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÏ°í ÀÖÀ» º¯¼ö Çϳª¸¦ ÀÌ¹Ì ¸¸µé¾î³õ¾ß¾ß ÇÕ´Ï´Ù. Áï Window Çü º¯¼ö Çϳª¸¦. ±× ´ÙÀ½ ¼¹ö´õ·¯ âÀ» Çϳª ¸¸µé°Ú´Ù°í ¼ºñ½º ¿äûÀ» ÇÕ´Ï´Ù. (Á¶±Ý µÚ¿¡ ¼³¸íµå¸®´Â ÇÔ¼ö¸¦ ÅëÇØ) À̺¯ÀÌ ¾ø´Â ÇÑ ¼¹ö´Â âÀ̶ó´Â ÀÚ¿ø Çϳª¸¦ ¼¹ö Ãø(!!!)¿¡ ¸¸µé¾î ³õ½À´Ï´Ù. ±×¸®°í â ÀÚ¿ø¿¡ ´ëÇÑ ÀÚ¿ø °íÀ¯¹øÈ£(Resource ID)¸¦ ¾Æ±î Ŭ¶óÀ̾ðÆ® ÂÊ¿¡¼ ¸¸µé¾î ³õÀº º¯¼ö¿¡ ¹ÝȯÇØÁÝ´Ï´Ù. ÀÌ º¯¼ö´Â ¹Ù·Î Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö Ãø¿¡ ¸¸µé¾îÁø ÇÑ Ã¢¿¡ ´ëÇÑ ¿¬°áÅë·Î ¿ªÇÒÀ» ÇØÁÝ´Ï´Ù. ¹«Áö Áß¿äÇÏÁÒ?
ÀÌ·¸°Ô ¼¹ö Ãø¿¡´Ù â ÀÚ¿ø Çϳª¸¦ ¸¸µé¾î³õ°í, ±× ´ÙÀ½¿¡´Â ¿©·¯ºÐÀÌ ¿øÇÏ´Â ¶§¿¡ ±× âÀ» ȸ鿡 Ç¥½ÃÇØ´Þ¶ó°í ¿äûÇÏ¸é ¼¹ö°¡ ¾Ë¾Æ¼ ±× âÀ» Ç¥½ÃÇØÁÝ´Ï´Ù. ¹°·Ð ¿äû¿¡ µû¶ó ȸ鿡¼ »ç¶óÁö°Ô ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù.
¶Ç´Â ÇöÀç ³ªÅ¸³»Á® Àִ â¿¡ ´ëÇÏ¿© ¹è°æ»ö°ú Å׵θ®»öÀ» ¹Ù²Û´ÙµçÁö ÇÏ´Â ¼öÁ¤ ÀÛ¾÷ ¶ÇÇÑ ¾Æ±îÀÇ Window Çü º¯¼ö¸¦ ÅëÇؼ ÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿ì¸®´Â ¾ÕÀ¸·Î ¸ðµç ÀÚ¿ø¿¡ ´ëÇÏ¿© ¼¹ö Ãø¿¡ ÀÚ¿øÀ» ¸¸µé¾î ³õ°í ¿ì¸® Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¿¡¼´Â ´ÜÁö ±× ÀÚ¿ø¿¡ ´ëÇÑ ID¸¸À» º¯¼ö¿¡´Ù ÀúÀåÇسõ°í ÀÖ½À´Ï´Ù. ±×¸®°í ¿øÇÏ´Â ¶§¿¡ ±× ÀÚ¿øÀ» Ç¥½ÃÇÑ´ÙµçÁö, ¼öÁ¤ÇÑ´ÙµçÁö, ¶Ç´Â ¾ø¾Ø´ÙµçÁö ÇÏ´Â ÀÛ¾÷À» ÇàÇÕ´Ï´Ù. ±×¸®°í ³ªÁß¿¡ Á¤¸» ÇÊ¿ä°¡ ¾ø¾îÁø ÀÚ¿ø¿¡ ´ëÇؼ´Â ¼¹ö Ãø¿¡´Ù »èÁ¦Ç϶ó°í Åë°íÇÕ´Ï´Ù.
Á¦°¡ ÀÌ·¸°Ô ±æ°Ô ¼³¸íµå¸° °³³äÀ» ²À ¼÷ÁöÇØÁֽʽÿä. ¾î¶»°Ô º¸¸é ¿ì¸®°¡ ¾ÕÀ¸·Î ÇÏ´Â ÀÏÀÇ °ÅÀÇ ´ëºÎºÐÀ» ¸»¾¸µå¸° °ÍÀ̳ª ´Ù¸§¾ø½À´Ï´Ù.
ÇÔ¼ö À̸§ ±×´ë·Î Çؼ®Çغ¸¸é "°£´ÜÇÑ Ã¢À» »ý¼ºÇÑ´Ù"ÀÌÁö ¾Ê½À´Ï±î? ¿ì¸®°¡ ¿µ¾î ¹®È±Ç¿¡ »ì°í ÀÖ´Ù¸é, À̰͸¸Å ½ÄÀº Á× ¸Ô±â°¡ ¾îµð ÀÖ°Ú½À´Ï±î ¸¸Àº... °£´ÜÇÑ Ã¢À» ¸¸µå´Â ÇÔ¼ö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁö¿ä.
ÇÔ¼öÀÇ ¿øÇü(Prototype)
Window XCreateSimpleWindow ( Display* display,
Window parent,
int x,
int y,
unsigned int width,
unsigned int height,
unsigned int border_width,
unsigned long border_color,
unsigned long background_color );
ÇÔ¼ö ÇÑ ¹ø Á¤¸» °ÅâÇϱº¿ä. ¾ÕÀ¸·Î ³ª¿À´Â ÇÔ¼öµé ´ëºÎºÐÀÌ °ÅÀÇ ÀÌ·¸´Ù°í »ý°¢ Çϼŵµ ¹«¹æÇÕ´Ï´Ù. Á¤¸»·Î ¸¹Àº Á¤º¸¸¦ Àü´ÞÇØÁÖ¾î¾ß ÇÏ´Â °ÍÀ» º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. Áü ij¸®Ã³·³ ¼ûÀ» Å©°Ô µéÀ̽® ÈÄ, ´Ù´Ù´Ù ½¯ »õ ¾øÀÌ ¾ê±âÇغ¸ÀÚ¸é, 1¹ø° Display Çü Æ÷ÀÎÅÍ´Â XOpenDisplay()¿¡¼ Á¢¼ÓÇÑ µð½ºÇ÷¹À̸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀ̸ç, 2¹ø° Window´Â ÇöÀç ¸¸µé°íÀÚ Çϴ âÀÇ ¼Ò¼ÓµÇ´Â ºÎ¸ð âÀ̸ç, 3¹ø°, 4¹ø°´Â °¢°¢ x, y ÁÂÇ¥¸¦ ¶æÇÏ°í, 5¹ø°´Â Çȼ¿ ´ÜÀ§ÀÇ °¡·ÎÆø, 6¹ø°´Â Çȼ¿ ´ÜÀ§ÀÇ ¼¼·ÎÆø, ±×¸®°í 7¹ø°´Â Å׵θ®ÀÇ µÎ²², ¸¶Áö¸·À¸·Î 8¹ø°¿Í 9¹ø°´Â Å׵θ® »ö°ú âÀÇ ±âº»ÀûÀÎ ¹è°æ»öÀ» Ä«¸®Å°´Â unsigned long Çü ¼öÄ¡°ªÀÔ´Ï´Ù.
º¸Åë ÇϳªÀÇ µð½ºÇ÷¹ÀÌ¿¡¼ ´ëºÎºÐÀÇ ÀÏÀ» ÇØÄ¡¿ì´Ï±î 1¹ø° Àμö°¡ »ó´çÈ÷ ±ÍÂúÀ» ¼öµµ ÀÖÁö¸¸, »ý°¢Çغ¸¼¼¿ä, ¿©·¯ºÐÀÇ Å¬¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ´ÙÁß µð½ºÇ÷¹ÀÌ Á¢¼Ó ÇÁ·Î±×·¥ÀÌ µÉ ¼öµµ ÀÖÁö ¾Ê½À´Ï±î? ±×·¯¸é, ¿©±â Àú±â µÎ °³ ÀÌ»óÀÇ µð½ºÇ÷¹À̸¦ °£´ÜÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î ¿ä ù¹ø° Àμö¸¦ °¡Áö°í ¸»ÀÔ´Ï´Ù. 2¹ø°, ºÎ¸ð âÀº ¹«¾ùÀΰ¡? --- X À©µµ¿ìÀÇ ¸ðµç âÀº Ç×»ó ¾î¶² â¿¡ ¼ÓÇØ Àְųª, ¾î¶² âµéÀ» ÀÚ±â ÀÚ½Ä(Child)À¸·Î °®½À´Ï´Ù. ¾ÆÁÖ ±Ùº»ÀûÀ¸·Î´Â X À©µµ¿ì°¡ ¶ßÀÚ¸¶ÀÚ »ý±â´Â âÀº ¹Ù·Î Å׵θ®µµ ¾ø´Â â, ·çÆ®(root)âÀÔ´Ï´Ù. ¹Ù·Î ÀÌ Ã¢¿¡ ¸ðµç âµéÀÌ ¼ÓÇÏ´Â °ÍÀÔ´Ï´Ù. ¾î¶² ÇÁ·Î±×·¥À̵ç óÀ½ âÀº ¹Ù·Î ·çƮâÀÇ ÀÚ½ÄâÀÌ µË´Ï´Ù. ±× âÀº ´Ù½Ã ÀÚ±â ÀÚ½ÄâµéÀ» ¾ó¸¶µçÁö °¡Áú ¼ö ÀÖÁö¿ä. ¾îÂî µÇ¾úµç°£¿¡ »õ·Î »ý¼ºµÇ´Â âÀº Á·º¸(?)¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. Àڱ⠺θðâÀº ¾Ë¾Æ¾ß ÇÏÁö ¾Ê°Ú¾î¿ä? ¿©±â¼ Àá±ñ XDefaultRootWindow()¶ó´Â ÇÔ¼ö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¾½Ã´Ù.
ÇÔ¼öÀÇ ¿øÇü
Window XDefaultRootWindow ( Display *display );
ÀÌ ³à¼®ÀÇ ±â´ÉÀº Display Çü Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ¼¹öÀÇ ±âº»(Default) ·çƮâÀÇ Ã¢ ID¸¦ ¾Ë¾Æ´Ù°¡ ID¸¦ Window Çü º¯¼ö¿¡´Ù µÇµ¹·Á ÁÖ´Â ¿ªÇÒÀÔ´Ï´Ù.
¿ì¸®°¡ ¸¸µé°íÀÚ Çϴ âÀº Á÷Á¢ÀûÀ¸·Î ·çƮâÀÇ ¹Ù·Î ¾Æ·¡ ÀÚ½ÄâÀÌ µÇ¹Ç·Î, À§¿¡¼ ³ª¿Â XCreateSimpleWindow()ÀÇ µÎ¹ø°¿¡¼ ºÎ¸ðâ ID¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß Çϱ⠶§¹®¿¡ ÇÊ¿äÇÑ ÇÔ¼öÀÔ´Ï´Ù.
³ª¸ÓÁö´Â ÀÚ¸íÇϹǷΠ8¹ø°, 9¹ø° »ö»ó ÁöÁ¤ ºÎºÐ¿¡ ´ëÇÑ ¼³¸í¸¸ µå¸³´Ï´Ù.
X À©µµ¿ì¿¡¼ »ö»óÀº ¶ÇÇÑ ¼¹ö°¡ Á¦°øÇÏ´Â ÇϳªÀÇ ÀÚ¿øÀ¸·Î¼ ¼¹ö°¡ °ü¸®¸¦ ÇÏ°í ÀÖ½À´Ï´Ù. µû¶ó¼ ¿ì¸®°¡ »ý°¢ÇÏ´Â °Í ¸¸Å ½±°Ô »ö»óÀ» ¾²°Å³ª ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. Ȥ½Ã ¿©·¯ºÐÀº XV ¿Í °°Àº ±×·¡ÇÈ ÇÁ·Î±×·¥À» ¾²¸é¼ ±×·¡ÇÈ È¸éÀÇ ÁúÀÌ ¾î¶³ ¶§´Â ´Ù¸£°Ô ³ªÅ¸³ª´Â °ÍÀ» °æÇèÇغ¸½Å Àû ÀÖ½À´Ï±î? ±× °æ¿ì¿£ XV°¡ ¿øÇÏ´Â ¸¸ÅÀÇ »ö»ó ÀÚ¿øÀ» ¼¹ö¿¡°Ô¼ °ø±Þ¹ÞÁö ¸øÇϱ⠶§¹®ÀÔ´Ï´Ù. ¾î¶² ÀÌÀ¯¿¡¼µç...
¿¹¿¡¼ µå·¯³ªµí ±×³É °ËÁ¤°ú Èò»öÀ» ÁöĪÇÏ´Â ½¬¿î ¼ýÀÚ¸¦ ¾²´Â °Ô ¾Æ´Ï¶ó, BlackPixel(), WhitePixel()À̶ó´Â ¸ÅÅ©·Î¸¦ ½è½À´Ï´Ù. À̹ø °Á¿¡¼´Â »ö»óÀ» ¾²´Â °úÁ¤ÀÌ ±×·¸°Ô °£´ÜÇÏÁö´Â ¾Ê´Ù´Â »ç½Ç¸¸ ±â¾ïÇØÁֽñ⠹ٶø´Ï´Ù. Á¶¸¸°£¿¡ »ö»ó¿¡ ´ëÇÑ ¾ê±â°¡ À̾îÁý´Ï´Ù. ±× ¶§±îÁö¸¸ Âü¾ÆÁֽʽÿä.
ÀÌ ³à¼®Àº ¹«¾ùÀΰ¡ Çϸé, À§¿¡¼ ¼¹öÃø¿¡ ¸¸µé¶ó°í Å뺸ÇÑ Ã¢À» ½ÇÁ¦·Î ³ªÅ¸³»¶ó´Â Áö½Ã¸¦ ¼¹ö¿¡ º¸³»´Â ³à¼®ÀÔ´Ï´Ù. âÀÇ »ý¼º°ú Ç¥½Ã´Â º°°³ÀÇ °úÁ¤ÀÌÁö¿ä.
ÇÔ¼öÀÇ ¿øÇü
XMapWindow ( Display *display, Window w );
ƯÁ¤ µð½ºÇ÷¹ÀÌ ¼¹ö¿¡¼ w¶ó´Â âÀ» ȸ鿡 ½ÇÁ¦·Î Ç¥½ÃÇÕ´Ï´Ù. ¿©±â¼ ¿µ¾î MapÀº µ¿»ç·Î¼ "Áöµµ·Î ±×¸®´Ù","¹èÄ¡ÇÏ´Ù"ÀÇ ¶æÀÔ´Ï´Ù. Á¦°¡ ´Ù´Ï´Â ÁöÁú°úÇаú¿¡¼´Â ÁöÁúµµ ±×¸®´Â °ÍÀ» ¸ÅÇÎ(Mapping)ÇÑ´Ù¶ó°í ¸»ÇÕ´Ï´Ù.
¾Æ´Ï, ÀÌ°Ç ¶Ç ¹»±î¿ä? Ç÷¯½¬(flush)´Â ÈÀå½Ç¿¡¼ º¼ ÀÏÀ» ´Ù º» ÈÄ, º¯±âÀÇ ¹°À» ³»¸®´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÇѲ¨¹ø¿¡ ¹°À» Áà Èê·Áº¸³»´Â ±×·± ÀÏÀÔ´Ï´Ù. X À©µµ¿ì¿¡ ¹¹ ±×·± ÀÏÀÌ ÇÊ¿äÇϳı¸¿ä? °ÅÂü ÀÌ»óÇϱº¿ä.
C ÇÁ·Î±×·¥À» °øºÎÇغ¸½Ã¸é, printf¿Í °°Àº ¸¹Àº Ãâ·Â¹®µéÀÌ ½ÇÇà Á÷ÈÄ¿¡ Ãâ·ÂÀÌ ÀÌ·ç¾îÁö´Â °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¾Æ½Ç °Ì´Ï´Ù. ½ÇÁ¦´Â ¸Å¹ø Ãâ·Â ¸í·ÉÀ» ¹ÞÀ» ¶§ ¸¶´Ù Ãâ·ÂÀ» ÇÏ´Â °Íº¸´Ù´Â ÇѲ¨¹ø¿¡ ¹öÆÛ¿¡ ¸ð¾Æ³õ°í ¶§°¡ µÇ¸é ´Ü ÇÑ ¹øÀÇ ½ÇÇàÀ¸·Î È¿À²¼ºÀ» ³ôÀÌ´Â ±â¼úÀ» äÅÃÇÕ´Ï´Ù. X À©µµ¿ìµµ ¶ÇÇÑ ±×·¸½À´Ï´Ù. ±× ¼ö¸¹Àº Ŭ¶óÀ̾ðÆ®µé·ÎºÎÅÍÀÇ ¼ºñ½º ¿äûÀ» ±× ¶§ ±× ¶§ ½ÇÇàÇÏ°Ô µÇ¸é ´É·üÀÌ ¶³¾îÁö°Ô µÇ¹Ç·Î, ¼¹ö´Â ¹öÆÛ¸¦ ¸¶·ÃÇÏ°í ±× ¹öÆÛ°¡ Â÷°Å³ª ¹öÆÛ¸¦ ºñ¿ì¶ó´Â ¸í½ÃÀûÀÎ ¿ä±¸°¡ ÀÖÀ» ¶§¸¸ ½ÇÇàÀ» ÇÏ°Ô µË´Ï´Ù.
À̹ø ¿¹´Â X À©µµ¿ì ¼¹ö¿¡°Ô´Â Äà¹æ±Íµµ ²ð ÇÊ¿ä°¡ ¾÷À» ¸¸Å, ÀÚÀßÇÑ ¿ä±¸À̱⠶§¹®¿¡ ±×·± ¸í·ÉÀ» ³»¸°´Ù°í Çؼ ¹öÆÛ°¡ Âû ¸® ¸¸¹«ÇÕ´Ï´Ù. ±×·¯´Ï, °Á¦·Î 'º¯±â ¹°À» ÂÓ ³»·Á¾ß°ÚÁÒ?'
ÇÔ¼öÀÇ ¿øÇü
XFlush ( Display *display );
À§ ¿¹Á¦¸¦ ex02.c¶ó°í ÀúÀåÇϼ̴ٸé,
cc -o ex02 ex02.c -lX11 -I/usr/X11/include -L/usr/X11/lib
º¸Åë -I, -L ¿É¼ÇÀº ÁÖÁö ¾ÊÀ¸¼Åµµ µÇÁö¸¸ Á¦´ë·Î Çì´õÈÀÏ°ú ¶óÀ̺귯¸®¸¦ ãÁö ¸øÇÒ ¶§´Â ¸í½ÃÀûÀ¸·Î ÁÖ½Ã¸é µË´Ï´Ù.
ÀÚ, ÀÌÁ¦ X Å͹̳Π»ó¿¡¼ ½ÇÇàÀ» Çغ¼±î¿ä? ¿ì¸®°¡ ¿¹»óÇß´ø °Í°ú´Â Á» ´Ù¸¦ °ÍÀÔ´Ï´Ù. ¿Ö³Ä±¸¿ä? ¿©·¯ºÐ²²¼ fvwm°ú °°Àº À©µµ¿ì °ü¸®ÀÚ¸¦ ¾²°í °è½Ã¸é, ¿ì¸®°¡ ÀǵµÇÏÁö´Â ¾Ê¾ÒÁö¸¸ ±× ³ðÀÌ ¿ì¸®°¡ ¸¸µé°íÀÚ Çϴ âÀÇ ¸ð¾ç¿¡ °³ÀÔÇÏ°í µé¾î¿À±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ ºÎºÐ¿¡ ´ëÇÑ ¼³¸í ¶ÇÇÑ ´ÙÀ½ ¹øÀ¸·Î ¹Ì·ç±â·Î ÇÏ°í ´ÜÁö âÀÌ ¸¸µé¾îÁ³´Ù´Â °Í¸¸ È®ÀÎÇÏ°í ³Ñ¾î°¡ÁÒ. :)
Á¾·á´Â ½ÇÇà½ÃŲ Å͹̳Πâ¿¡¼ ¿£ÅÍÅ°¸¦ ÇÑ ¹ø ´·¯ÁÖ½Ã¸é µË´Ï´Ù.
¾ÆÂü! ¿¹Á¦¿¡¼ ¿Ö getchar()¸¦ ½è´ÂÁö ÇÑ ¹ø »ý°¢Çغ¸¼¼¿ä. ±×¸®°í, À§¿¡¼ ¿£ÅÍ Å°°¡ ¾Æ´Ï¶ó ½ºÆäÀ̽º¹Ù °°Àº °ÍÀ» ´©¸£¸é ¿Ö Á¾·áÇÏÁö ¾Ê´ÂÁöµµ »ý°¢Çغ¸¼¼¿ä. ¾Æ·¡¿¡¼ ±× ´äÀ» µå¸®°Ú½À´Ï´Ù.
¹Ù·Î ¾Õ¿¡¼ ¾ÆÁÖ °£´ÜÇÑ Ã¢ Çϳª¸¦ ¸¸µé¾î º¸¾ÒÁö¿ä. À̹ø¿¡´Â ±× ⠾ȿ¡´Ù ´Ù¸¥ ÀÛÀº âµéÀ» ¿©·¯ °³ ¸¸µé¾î º¸±â·Î ÇÏ°Ú½À´Ï´Ù.
#include <X11/Xlib.h>
main()
{
Display *d ;
Window root, p, w1, w2, w3 ;
unsigned long Black, White ;
d = XOpenDisplay (NULL);
/* ÁÖ ÇÁ·Î±×·¥ ºÎºÐ ½ÃÀÛ */
root = DefaultRootWindow(d);
Black = BlackPixel(d,0);
White = WhitePixel(d,0);
p = XCreateSimpleWindow (d, root, 100, 100,
600, 400, 2, Black, White );
w1 = XCreateSimpleWindow (d, p, 50, 50,
200, 150, 2, Black, White );
w2 = XCreateSimpleWindow (d, p, 200, 100,
200, 150, 2, Black, White );
w3 = XCreateSimpleWindow (d, p, 350, 200,
200, 150, 2, Black, White );
XMapWindow(d, p);
XMapWindow(d, w1);
XMapWindow(d, w2);
XMapWindow(d, w3);
XFlush(d);
sleep(3);
XDestroySubwindows(d, p);
XDestoryWindow(d, p);
/* ÁÖ ÇÁ·Î±×·¥ ºÎºÐ ³¡ */
XCloseDisplay (d);
}
ÀÌÁ¦´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ Á¡Á¡ º¹ÀâÇØÁö´Â °Í °°°í, ½ÇÁ¦ ÇÁ·Î±×·¥ °°¾ÆÁö´Â±º¿ä. ÇÏÁö¸¸ ±âº» »À´ë´Â º¯ÇÔÀÌ ¾ø½À´Ï´Ù! Á¦°¡ /* */·Î Ç¥½ÃÇÑ ºÎºÐ¸¸ÀÌ ´Ã¾úÀ» »Ó, ¿ì¸®´Â Ç×»ó 1. ¼¹ö¿¡ Á¢¼Ó, 2. ¼¹ö¿¡ ¿äû, 3. ¼¹ö¿Í Á¢¼Ó ÇØÁ¦ ¶ó´Â ±âº»ÀûÀÎ µî½ÄÀ» ¸Ó¸® ¼Ó¿¡ µÎ°í ÀÖ¾î¾ß ÇÕ´Ï´Ù.
¸ðµç âÀÇ ºÎ¸ðâÀº °á±¹ ·çƮâÀÔ´Ï´Ù. ±× ⠾ȿ¡¼ ¸ðµç ÀÚ½ÄâµéÀÌ »ý¼ºµÇ°í Ç¥½ÃµË´Ï´Ù. ¶Ç ±× ÀÚ½ÄâµéÀº ¹Ù·Î ¶È°°Àº °úÁ¤À» ÅëÇؼ ÀÚ±â ÀÚ½ÅÀÇ ÀÚ½ÄâµéÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù. ¸¶Áö¸· ´Ü°èÀÇ ÀÚ½Äâµéµµ ¶ÇÇÑ ¸¶Âù°¡Áö·Î... ±×·¯ÇÑ ¿ø¸®¸¦ À̹ø ¿¹¿¡¼ È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. »ê¾ÆÁ¦ÇÑ °°Àº °Ç ÇÊ¿ä¾ø°ÚÁÒ? :)
Window Çü º¯¼ö root, p, w1, w2, w3 ÀÌ·¸°Ô ´Ù¼¸°³¸¦ ¼±¾ðÇصξú½À´Ï´Ù. root´Â DefaultRootWindow()¶ó´Â ¸ÅÅ©·Î¸¦ ÅëÇؼ ÇöÀç ·çƮâÀÇ ID¸¦ ±â¾ïÇÏ°í ÀÖ½À´Ï´Ù. ù¹ø° XCreateSimpleWindow ÇÔ¼ö¸¦ ÅëÇؼ ·çƮâÀÇ ÀÚ½ÄâÀ¸·Î¼ p âÀ» ¸¸µé¾ú½À´Ï´Ù. µÎ¹ø° °°Àº ÇÔ¼ö¸¦ ÅëÇؼ À̹ø¿¡´Â À§¿¡¼ ¸¸µé¾î ³õÀº p âÀ» ºÎ¸ðâÀ¸·Î ÇÏ´Â ÀÚ½Äâ w1 À» ¸¸µé¾ú½À´Ï´Ù. °°Àº °úÁ¤À» ÅëÇؼ p âÀÇ ÀÚ½Äâµé w2, w3¸¦ ¼¹ö Ãø¿¡ ¸¸µé¾î ³õ¾Ò½À´Ï´Ù. ±ÍÂúÀ¸½Ã´õ¶óµµ â»ý¼º ÇÔ¼öµé¿¡ ÁÖ¾îÁø XY ÁÂÇ¥, â Å©±â¸¦ º¸½Ã°í âÀÌ ¾î¶»°Ô ³ªÅ¸³¯ °ÍÀÎÁö¸¦ ¿¹ÃøÇغ¸½Ê½Ã¿ä.
<< Àá±ñ »ý°¢Áß... >>
ÄÄÆÄÀÏ ¹æ¹ýÀº ÀÌÀü°ú µ¿ÀÏÇÕ´Ï´Ù.
À̹ø ¿¹Á¦¿¡¼´Â Black, White¶ó´Â unsigned long Çü º¯¼ö µÎ °³¸¦ ¼±¾ðÇسõ°í´Â Àü¹ø ¿¹Á¦¿¡¼µµ ¼±º¸ÀÎ ÀûÀÌ ÀÖ´Â BlackPixel(), WhitePixel()À̶ó´Â ¸ÅÅ©·Î¸¦ ½á¼ °¢°¢ °ËÁ¤°ú Èò»öÀ» ³ªÅ¸³»´Â ¼öÄ¡¸¦ ÀúÀåÇÏ°í ÀÖ½À´Ï´Ù. â »ý¼ºÇÔ¼ö°¡ ¿©·¯ ¹ø ¾²¿´À¸¹Ç·Î ±× ¶§¸¶´Ù »ö»ó ÁöÁ¤ºÎºÐ¿¡ ¸ÅÅ©·Î¸¦ ½áÁֱ⠺¸´Ù´Â º¯¼ö¿¡ ÀúÀåÇØµÎ°í ±× º¯¼öÀÇ ÀúÀå°ªÀ» »ç¿ëÇÏ°íÀÚ Çß½À´Ï´Ù. º° °Ç ¾Æ´ÏÁÒ.
ÀÚ, ¼¹öÃø¿¡ ¸¸µé¾î ³õÀº âµéÀ» ³ªÅ¸³» ºÁ¾ß°ÚÁÒ? :)
XMapWindow ÇÔ¼ö¸¦ ÅëÇؼ µð½ºÇ÷¹ÀÌ d ¿¡ ÀÚ½Äâ p ¸¦ Ç¥ÇöÇÕ´Ï´Ù. ±× ´ÙÀ½ 3°³ÀÇ ¹®Àåµµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. µð½ºÇ÷¹ÀÌ d ¿¡ w1, w2, w3¸¦ Ç¥ÇöÇÕ´Ï´Ù. w1, w2, w3´Â p âÀÇ ÀÚ½Äâµé·Î µî·Ï,»ý¼ºµÇ¾î Àֱ⠶§¹®¿¡ p ⠾ȿ¡ Ç¥ÇöµË´Ï´Ù. ±×¸®°í, ¸»¾¸Àº ¾Èµå·ÈÁö¸¸ ÀÚ½ÄâµéÀÇ ÁÂÇ¥°è´Â ¹Ù·Î Àü ºÎ¸ðâÀÇ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÕ´Ï´Ù. ºÎ¸ðâÀÇ ¿ÞÂÊ À±¸¼®ÀÌ ÀÚ½ÄâµéÀÇ ¿øÁ¡(0,0)ÀÌ µÇ´Â °ÍÀÌÁö¿ä.
»ç½Ç ¸¶Áö¸· 3°³ÀÇ ¹®ÀåÀº ¾à°£ ¼ÒºñÀûÀÎ ¹®ÀåÀÔ´Ï´Ù. âÀÇ »ý¼º°ú Ç¥½Ã¶ó´Â °úÁ¤Àº º°°³ÀÇ °úÁ¤À̹ǷÎ, ÀÏ´Ü »ç¿ëÀ» À§Çؼ ¸î °³¸¦ »ý¼º½ÃÄѳõÀº ÈÄ, ±× ¶§ ±× ¶§ ¿øÇÏ´Â ÀÚ½Äâµé¸¸ Ç¥½ÃÇÒ ¶§´Â XMapWindow ÇÔ¼ö¸¦ ½á¾ß ÇÏ°ÚÁö¸¸, ¸¹Àº °æ¿ì ÇѲ¨¹ø¿¡ ÀÚ½ÄâµéÀ» ¸ù¶¥ Ç¥½ÃÇÏ°íÀÚ ÇÒ ¶§°¡ ¸¹°í, ±× °æ¿ì¿¡´Â Âü ¹ø°Å·ÓÁÒ? ±×·¡¼ ¿©±â¼ »õ·Î¿î ÇÔ¼ö Çϳª¸¦ ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü
XMapSubwindows ( Display * d, Window w );
µð½ºÇ÷¹ÀÌ d ¿¡¼ â w ÀÇ ¸ðµç ÀÚ½ÄâµéÀ» ÀÏ°ýÀûÀ¸·Î ȸ鿡 Ç¥½ÃÇÕ´Ï´Ù. Æí¸®¸¦ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÌÁö¿ä.
¾ÕÀ¸·Îµµ ¸¹Àº ÇÔ¼öµéÀÌ ±â´ÉÀº °ÅÀÇ °°À¸¸é¼ ÀÌ·¸°Ô »ç¼ÒÇÏ°Ô ´Ù¸¥ ¿©·¯ °¡Áöµé·Î ¸¶·ÃµÇ¾î ÀÖ´Ù´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü : XDestroyWindow ( Display *d, Window p );
ÇÔ¼öÀÇ ¿øÇü : XDestroySubwindows ( Display *d, Window p );
âÀ» Æı«Çعö¸®¶ó°í(Destory) ¿äûÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù. ´õ ÀÌ»ó Ç¥½ÃÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø âµéÀº ÀÚ¿øÀý¾àÀ» À§Çؼ¶óµµ(¸Þ¸ð¸®¸¦ Â÷ÁöÇÏ°í ÀÖÀ¸´Ï±î¿ä) Á¦ ¶§ ¾ø¾ÖÁÖ´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. À§¿¡¼º¸¸é µÎ Á¾·ùÀÇ À¯»çÇÑ ÇÔ¼ö°¡ Àִµ¥, ù¹ø° °ÍÀº ÁöÁ¤µÈ ÇϳªÀÇ Ã¢À» ¾ø¾Ö´Â °ÍÀÌ°í, µÎ¹ø°´Â ±× âÀÌ Æ÷ÇÔÇÏ°í ÀÖ´Â ¸ðµç ÀÚ½ÄâµéÀ» ã¾Æ¼ ¾ø¾ÖÁÖ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð ÀÚ½Äâµé Áß¿¡¼ ¼±º°Çؼ ¾ø¾Ö·Á°í ÇÏ½Å´Ù¸é ´ç¿¬È÷ Çϳª¾¿ ¾ø¾Ö´Â ÇÔ¼öÀΠù¹ø° °ÍÀ» ¾²½Ç ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù.
Å°º¸µå ÀÔ·Â ¶ÇÇÑ ¹öÆÛ¹æ½ÄÀ̹ǷΠ½ºÆäÀ̽º¹Ù¸¦ ¸î ¹ø Ãĺ¸¾ÒÀÚ ½ÇÁ¦·Î ÇÁ·Î±×·¥ ¿¡´Â Àü´ÞÀÌ µÇÁö ¾Ê´Ù°¡ ¸®ÅÏÅ°¸¦ ¹ÞÀ¸¸é ÀϽÿ¡ Ç÷¯½¬µË´Ï´Ù.
Á¤¸» º¸Àß °Í ¾ø´Â ÇÁ·Î±×·¥ ¿¹¶ó°í »ý°¢ÇÏ½Ç Áö ¸ð¸£°ÚÁö¸¸, Á¦°¡ º¸±â¿¡´Â X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡¼ âÀ» Ç¥½ÃÇÒ ÁÙ ¾Æ½Å´Ù¸é °ÅÀÇ ¹ÝÀº ¹è¿ì½Å °ÍÀ̶ó°í È®½ÇÈ÷ ¸»¾¸µå¸± ¼ö ÀÖ½À´Ï´Ù. ´õ¿í °íÂ÷¿øÀûÀ¸·Î ¹öÆ°, ´ëÈ»óÀÚ, ¸Þ´º µîÀÇ ±×·¡ÇÈ ÀÎÅÍÆäÀ̽ºµµ °á±¹¿£ Àڱ׸¶ÇÑ Ã¢µéÀÇ °áÇÕÀÏ »ÓÀÔ´Ï´Ù. ³ªÁß¿¡ ¼Õ½±°Ô ¹Ù·Î ¿ì¸® °ç¿¡ ÀÖ´Â Athena Widget À̶ó°í ÇÏ´Â Æí¸®ÇÑ ÀÎÅÍÆäÀ̽º º¸µû¸®¸¦ »ç¿ëÇغ¸°Ô µÉ ÅÙµ¥¿ä, ¾Æ¸¶µµ ¿©·¯ºÐ ½º½º·Î Á¤¸» »ö´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°í ½Í´Ù´Â »ý°¢ÀÌ µé°Ô µÇ½Ç °Ì´Ï´Ù. ¾öû³ ÀÎÅÍÆäÀ̽ºÀÇ ÀÚÀ¯! ÀÌ°ÍÀº X À©µµ¿ì°¡ ´Ù¸¥ ¾î¶² GUI ½Ã½ºÅÛ º¸´Ùµµ °³¹æÀûÀÓÀ» Áõ¸íÇغ¸ÀÌ°Ô µÉ °Ì´Ï´Ù. ±â´ëÇØÁÖ¼¼¿ä.
ÀÌ Â©¸·ÇÑ ¿¹¸¦, ÀÌ ¿¹¿¡¼ º¸ÀÌ´Â ¼ø¼¸¦ ²À ÀÌÇØÇÏ½Ã°í ¸Ó¸® ¼Ó¿¡ Ç×»ó ±â¾ïÇØ Áֽʽÿä. ¾ÆÁÖ Áß¿äÇÑ ÆÐÅÏ Áß¿¡ ÇϳªÀÔ´Ï´Ù.
¿À´ÃÀº ¾î¶»°Ô »ö»ó(Color)À» ¼¹ö·ÎºÎÅÍ ¾ò¾î³»°í »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ ¾Ë¾Æº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ±× µ¿¾È °è¼Ó ¹Ì·ï¿Ô´ø ÀÏÀ̱⵵ Çϱ¸¿ä...
Áö±Ý±îÁö ¾Æ¹« ¼³¸í¾øÀÌ Àú´Â BlackPixel(), WhitePixel()µîÀÇ ¸ÅÅ©·Î¸¦ ¿¹Á¦¿¡¼ ½á¿Ô½À´Ï´Ù. À̸§ÀÌ ³ªÅ¸³»µí °ËÁ¤»ö/¹é»öÀ» ±¸ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ¾úÁö¿ä. ÀÌÁ¦´Â ÀÌ°Í ¸»°íµµ ¿ì¸®°¡ ¿øÇÏ´Â »öµéÀ» ÀϹÝÀûÀ¸·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇؼ ¾Ë¾Æº¾´Ï´Ù.
»ö»ó ¶ÇÇÑ ¼¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â ÀÚ¿øÀÇ ÇϳªÀÔ´Ï´Ù. µû¶ó¼ âÀ» ¸¸µé¾î ´Þ¶ó°í ¼¹ö¿¡ ¿äûÇÏ°í, Ç¥½ÃÇ϶ó°í ¿äûÇÏ´Â ÀÛ¾÷µé°ú ¸¶Âù°¡ÁöÀÇ °úÁ¤À» °ÅÄ¡°Ô µË´Ï´Ù.
¼¹ö´Â Ä÷¯¸Ê(Color Map)À̶ó°í ÇÏ´Â °ÍÀ» °¡Áö°í ÀÖ½À´Ï´Ù. »ö»óÀ» ³ªÅ¸³»´Â Áöµµ ¶Ç´Â µµÇ¥¸¦ ¶æÇÏÁö¿ä. ÀÌ°ÍÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö Àá±ñ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ°í ÀÖ´Â Ãâ·ÂÀåÄ¡ Áß¿¡ ºñÆ®¸Ê µð½ºÇ÷¹ÀÌ¿¡ ¼ÓÇÏ´Â CRT¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿©·¯ºÐ²²¼ ´« ¾Õ¿¡ µÎ°í °è½Å ¸ð´ÏÅÍÀÌÁö¿ä. ÀÌ ¸ð´ÏÅÍÀÇ ¿ø¸®´Â ¿©·¯ºÐ ¸ðµÎ ¾Æ½Ã´Ù½ÃÇÇ ºûÀÇ 3¿ø»ö¿¡ ´ëÀÀÇÏ´Â 3°³ÀÇ ÀüÀÚÃÑÀÌ ¸ð´ÏÅÍ Ç¥¸é¿¡ ¹ß¶óÁ® ÀÖ´Â RGB Çü±¤¹°Áú¿¡ ¾Ë¸Â°Ô ºñÃçÁüÀ¸·Î½á ¿ì¸®°¡ ¿øÇÏ´Â ¸ðµç »öÀ» ¾ò´Â °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ¿øÇÒ ¶§´Â ºûÀÇ 3¿ø»öÀ» ¾Ë¸Â°Ô ½á¼ ÀüÀÚÃÑÀ» ¹ß»çÇÏÁö¿ä. ±×·±µ¥, ¹Ù·Î ¿©±â¼ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ±¸ÇöÇÒ ¶§ °ú¿¬ ³ë¶ûÀº RGB ¸¦ °¢°¢ ¾î¶² ³óµµ·Î ¼¯¾î¾ß Çϴ°¡? º¸¶ó/ÀÚÁÖ»öÀº ¾î¶°ÇÑ°¡¸¦ ÀúÀåÇÏ°í Àִ ǥ°¡ ÇÊ¿äÇѵ¥¿ä, ¹Ù·Î ±×°ÍÀÌ Ä÷¯¸ÊÀÔ´Ï´Ù.
¼¹ö´Â Àΰ£ÀÌ ¾Æ´Ï¶ó ±â°èÀ̱⠶§¹®¿¡ ¿ì¸®°¡ yellow¶ó°í ¸»ÇÏ¸é ¾î¶² °ÍÀÎÁö ÀüÇô ¾Ë ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. ´ÜÁö ÀڱⰡ °¡Áö°í ÀÖ´Â Ä÷¯¸Ê¿¡¼ yellow¿¡ ÇØ´çµÇ´Â °ÍÀ» ã¾Æ¼ ¸ð´ÏÅÍ¿¡°Ô Àû´çÇÑ ¾çÀÇ RGB Á¶ÇÕÀ» Àü´ÞÇÒ »ÓÀÔ´Ï´Ù. ¾î¶»½À´Ï±î? Ä÷¯¸ÊÀ̶ó´Â °ÍÀÌ Á¤¸» Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°í ÀÖÁö¿ä? ÀÌ°ÍÀÌ ¾û¸ÁÀÌ µÇ¸é ¾î¶»°Ô µÉ±î¿ä? ÄÄÇ»ÅÍ°¡ Á¤½Å¸øÂ÷¸®°í ³ë¶ûÀ» ¿øÇÒ ¶§ ºÐÈ«À» Ç¥½ÃÇÒ Áöµµ ¸ð¸¨´Ï´Ù.
¼¹ö´Â ±âº»ÀûÀÎ Ä÷¯¸ÊÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
¾ÕÀ¸·Î »ö»óÀ» ÀÌ¿ëÇÏ´Â ¾î¶² ÀÛ¾÷µµ ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.
#include <X11/Xlib.h>
main()
{
Display *d;
Window Root, w;
/* »ö»ó°ªÀ» ¾Ë¾Æ³¾ ¶§ ¾µ º¯¼öµé */
Colormap CMap;
XColor color, color_exact;
unsigned long Black, Blue;
d = XOpenDisplay ( NULL );
/* ¿øÇÏ´Â »ö»ó °ËÁ¤/ÆĶûÀ» ¾ò´Â ºÎºÐ */
CMap = XDefaultColormap ( d, 0 );
XAllocNamedColor ( d, CMap, "black", &color, &color_exact );
Black = color.pixel;
XAllocNamedColor ( d, CMap, "blue", &color, &color_exact );
Blue = color.pixel;
Root = DefaultRootWindow ( d );
w = XCreateSimpleWindow ( d, Root, 100, 100, 600, 400,
2, Black, Blue );
XMapWindow ( d, w );
XFlush ( d );
sleep(10);
XDestroyWindow ( d, w );
XCloseDisplay ( d );
}
À§ÀÇ ¿¹¸¦ »ìÆ캸½Ã¸é, »ö»ó°ª(unsigned longÇü °ª) Çϳª ¾ò´Â°Ô ±×·¸°Ô ½¬¿î °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¹ß°ßÇϼÌÀ» °Ì´Ï´Ù.
¸Ç ¸ÕÀú ÇؾßÇÒ ÀÏÀº Ä÷¯¸ÊÀÇ ID¸¦ ¼¹ö·ÎºÎÅÍ ¾Ë¾Æ³»´Â °ÍÀÔ´Ï´Ù. Colormap Çü º¯¼ö CMapÀ» Çϳª ¼±¾ðÇصξú½À´Ï´Ù. ±×¸®°í ³ª¼ XDefaultColormap() ÇÔ¼ö¸¦ ½á¼ ÇöÀçÀÇ ¼¹ö, ÇöÀçÀÇ ±âº» ȸé(0¹ø ȸé)ÀÇ ±âº» Ä÷¯¸Ê ID¸¦ ¹Ýȯ¹Þ½À´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü
Colormap XDefaultColormap ( Display *d, int screen_no );
ÀÌÁ¦ Ä÷¯¸ÊÀ» ¾Ë¾Æ³ÂÀ¸´Ï, ¿ì¸®°¡ ¿øÇÏ´Â »öÀÇ Çȼ¿°ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. ÀÌ ¶§¿¡´Â XColor Çü º¯¼ö µÎ °³°¡ ÇÊ¿äÇÕ´Ï´Ù. ±×¸®°í XAllocnamedColor ÇÔ¼ö¸¦ ½á¼ ¼¹ö´õ·¯ ÇÔ¼ö¿¡ ÁÖ¾îÁø Ä÷¯¸Ê¿¡¼ ¿ì¸®°¡ ¿øÇÏ´Â »ö»óÀ̸§À» ã¾Æ¼ ±× »ö»ó À̸§¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ XColorÇü º¯¼ö¿¡ ÀúÀåÇϵµ·Ï ¿äûÇÕ´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü
Status XAllocNamedColor( Display *d,
Colormap cmap,
_XConst char* color_name,
XColor *screen_def_return,
XColor *exact_def_return );
¿©±â¼ ³ª¿À´Â »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ Áö±Ý ¸ðµÎ ¾Æ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¾Æ¼Å¾ß ÇÑ´Ù°í »ý°¢ÇÒ ¶§ ²À ÀÚ¼¼È÷ ¼³¸íµå¸®°Ú½À´Ï´Ù. ÇÔ¼öÀÇ À̸§ ÀÚü°¡ »ó´çÈ÷ ±æ°í ¼³¸íÀûÀ̱⠶§¹®¿¡ ±× ³»¿ëÀ» ¾Ë¾Æº¸±â ÁÁ½À´Ï´Ù. ¹°·Ð ŸÀÌÇÎÇϱâ´Â ¿©°£ Èûµç°Ô ¾Æ´ÏÁÒ? ÀÌ ÇÔ¼ö´Â À̸§¿¡¼µµ µå·¯³ªµíÀÌ Named Color Áï À̸§ÀÌ ºÙ¾î ÀÖ´Â »ö»ó¿¡ ´ëÇÏ¿©, ¿ì¸®°¡ ÀÌ ÇÔ¼ö¿¡ ÁÖ¼Ò·Î Àü´ÞÇØÁÖ´Â XColor Çü º¯¼ö µÎ °³¿¡ ¾Ë¸Â´Â Á¤º¸¸¦ ÇÒ´ç(Allocation)ÇØÁÝ´Ï´Ù. Çϳª´Â ½ºÅ©¸° ±âº»°ªÀ¸·Î¼ Çϵå¿þ¾îÀûÀ¸·Î °¡Àå ±Ù»çÇÏ°Ô ½ÇÇö½Ãų ¼ö ÀÖ´Â Á¤º¸°¡ µé¾î°¡°í, ³ª¸ÓÁö Çϳª´Â ÁöÁ¤ÇÑ »öÀÇ Á¤È®ÇÑ Á¤º¸°¡ µé¾î°£´Ù°í ÇÕ´Ï´Ù. ¿ì¸®´Â ÀüÀÚ¸¸ »ç¿ëÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù. ¾µ¸¸ÇÑ ±×·¡ÇÈ ÇÁ·Î±×·¥À» ¸¸µé±â À§Çؼ´Â ¾ÆÁÖ Á¤È®ÇÏ°Ô ¾Ë¾Æ¾ß ÇÏ°ÚÁö¸¸ Áö±Ý Á¦°¡ ÇÏ°íÀÚ ÇÏ´Â °ÀÇ´Â À绡¸® X ÇÁ·Î±×·¡¹Ö Àü¹Ý¿¡ ´ëÇÏ¿© ÈȾ´Â ¼öÁØÀÌ´Ï ÀÌÇØÇϼ¼¿ä.
À¸À×? ±×·±µ¥ À̸§ÀÌ ÀÖ´Â »ö»óÀ̶ó´Ï... ÇÏ½Ç ºÐµéÀÌ °è½Ç °Í °°±º¿ä. Àü¹ø fvwm °ÀÇ Áß »ö»ó¼³Á¤ °ÀÇ ¶§ showrgb ¶ó´Â ¸í·ÉÀ» ±â¾ïÇϽʴϱî? ½© »óÅ¿¡¼ showrgb Çغ¸½Ê½Ã¿ä. ±×·¯¸é ÇöÀç ¼¹ö°¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â À̸§ºÙÀº »ö»óµé ¸ñ·ÏÀÌ RGB °ª°ú ÇÔ²² ÁÖ·ç·è ³ªÅ¸³ª°Ô µÉ °Ì´Ï´Ù. ¹Ù·Î ±× ¸ñ·Ï¿¡ ÀÖ´Â °Íµé¸¸À» ¸»ÇÕ´Ï´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â red, yellow, blue, green µîÀÌ ¹Ù·Î ±×°ÍÀÔ´Ï´Ù.
À̺¯ÀÌ ¾ø´Â ÇÑ, ½ÇÆÐÇÏÁö ¾ÊÀ»Å×´Ï »ç½ÇÀº int Çü º¯¼öÀÎ Status¿¡´Â 0ÀÌ ¾Æ´Ñ True °ªÀÌ ¹ÝȯµÇ¾î ¿É´Ï´Ù. ¸¸¾à¿¡ ¹®Á¦°¡ ¹ß»ýÇß´Ù¸é False, 0 ÀÔ´Ï´Ù.
ÀÌÁ¦´Â Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â XColor Çü º¯¼ö¸¦ ½á¼ °á±¹¿¡ ¿ì¸®°¡ ¾Ë°í ½Í¾ú´ø °ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. XColor Çü º¯¼ö´Â Xlib.h ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ±¸Á¶Ã¼ º¯¼ö·Î¼ ¸î °³ÀÇ »ö»ó¿¡ ´ëÇÑ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Ù°í º¸½Ã¸é µË´Ï´Ù. ¿ì¸®°¡ »ç¿ëÇÒ°ÍÀº ±× Áß¿¡ unsigned long Çü ¸â¹öÀÎ pixel ¸â¹öÀÔ´Ï´Ù. ±× °ªÀ» Black À̳ª Blue º¯¼ö¿¡ ÀúÀå½ÃÄÑ ³õÀ¸¸é µÇ´Â °ÍÀÌÁö¿ä.
»ö»óÀº ¼¹ö°¡ °ü¸®ÇÏ´Â ÀÚ¿øÀÔ´Ï´Ù. À̸¦ »ç¿ëÇϱâ À§Çؼ´Â XDefaultColormap ÇÔ¼ö¸¦ ½á¼ ±âº»ÀûÀÎ Ä÷¯¸Ê ID¸¦ ¾Ë¾Æ³½ ÈÄ, XAllocNamedColor ÇÔ¼ö¸¦ ÅëÇؼ ƯÁ¤ À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ XColor Á¤º¸¸¦ ¾Ë¾Æ³À´Ï´Ù. ±×¸®°í ³ª¼ XColor ±¸Á¶Ã¼ÀÇ pixel ¸â¹ö°ªÀ» Àо½Ã¸é µË´Ï´Ù.
±×·±µ¥, »ö»ó ÇϳªÀÇ Çȼ¿°ªÀ» ¾Ë±â À§Çؼ Ç×»ó ÀÌ·¸°Ô ¸¹Àº °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Ù´Ï, Á» ³Ê¹«ÇÑ °Í °°ÁÒ? ±×·¸´Ù¸é, ¿©·¯ºÐ²²¼ »ö»óÀ̸§À» Àü´ÞÇØÁÖ¸é, ±× »ö»ó¿¡ °üÇÑ Çȼ¿°ªÀ» ¹ÝȯÇØÁÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ½Ã¸é µÉ °Ì´Ï´Ù. ²À ÇÑ ¹ø ¸¸µé¾îº¸¼¼¿ä. Ã¥À» °¡Áö°í °è½Å ºÐµéÀº ¾Æ½Ç Áöµµ ¸ð¸£°Ú³×¿ä. :)
¿À´ÃÀº ¿ì¸®°¡ ÀÌ¹Ì ¸¸µé¾î ³õÀº âµé¿¡ ´ëÇؼ À̸®Àú¸® ¸¶À½²¯ ³î¾Æº¸°Ú½À´Ï´Ù. âÀÇ »ö±òÀ» ¹Ù²Û´ÙµçÁö, âÀÇ Å©±â¸¦ ¹Ù²Û´ÙµçÁö, ¾ø¾Ý´Ù°¡ ´Ù½Ã ³ªÅ¸³ª°Ô ÇÑ´ÙµçÁö ... ¹¹ ÀÌ·± ³îÀ̸¦ ÇÏ·Á°í ÇÕ´Ï´Ù.
À쫆 ̢À» ¸¸µå½Ç ¶§ ¹è°æ»ö°ú Å׵θ®»öÀ» °áÁ¤Çسõ±â´Â ÇßÁö¸¸, »ç¶÷À̶õ°Ô ¸¶À½ÀÌ ´Þ¶óÁú ¶§µµ ÀÖ´Â °Í ¾Æ´Ï°Ú¾î¿ä? ÀÚ, ÀÌ¹Ì Ç¥½ÃµÇ¾î Àִ âÀ» ±×´ë·Î ³öµÐ ä »ö±ò¸¸ ÇÑ ¹ø ¹Ù²Ù¾î º¾½Ã´Ù. ¿©·¯ºÐÀÌ ¸¶À½¿¡ µå´Â »öÀ» °ñ¶óº¸¼¼¿ä. ¹Ù·Î Àü ½Ã°£¿¡ ¸»¾¸µå¸° »ö»ó Á¤º¸ ¾Ë¾Æ³»±â´Â ±â¾ïÇÏ°í °è½ÃÁÒ?
XSetWindowBorder ( Display *d, Window w, unsigned long border_pixel );
XSetWindowBackground ( Display *d, Window w, unsigned long background_pixel );
¼³¸íÀÌ ÇÊ¿äÇÑ°¡¿ä? Àμö·Î ÁÖ¾îÁö´Â Window Çü º¯¼ö´Â ¿ì¸®°¡ »öÀ» º¯È½ÃÅ°°íÀÚ ÇÏ´Â ´ë»ó âÀ» ³ªÅ¸³»´Â º¯¼ö¸¦ ¾²¸é µÇ°í¿ä, Çȼ¿°ªÀº ¿©·¯ºÐ²²¼ ¿øÇϽô »öÀÇ Çȼ¿°ªÀ» Àú¹ø °ÀÇ¿¡¼Ã³·³ ±¸Çϼż Àü´ÞÇÏ½Ã¸é µÇ°í...
ÀÚ, ¿¹Á¦ 3 ¹øÀÇ 10ÃÊ °£ Áö¿¬ ÇÔ¼ö(sleep) µÚ¿¡´Ù ¿©·¯ºÐ²²¼ Çѹø ÀÌ ÇÔ¼öµéÀ» ÀÌ¿ëÇؼ »ö»óÀ» ¹Ù²Ù¾îº¸½Ê½Ã¿ä. ÀØÁö ¸¶½Ç °ÍÀº XFlush¸¦ ÇØÁÖ¼Å¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. XFlush¸¦ ÇØÁÖ½Ã°í ³ª¼ ¶Ç ´Ù½Ã sleep ÇÔ¼ö¸¦ ¾²¼Å¾ß ±× °á°ú¸¦ È®ÀÎÇÏ½Ç ¼öÀÖ°ÚÁö¿ä?
<< »ý°¢ Áß... >>
¿©·¯ºÐ, Á» ¾î·Á¿î°¡¿ä? ±×·¯¸é Á¦°¡ Çغ» °á°ú¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù.
¿¹Á¦ 3 ¿¡ Ãß°¡ sleep(10); ¹®Àå ´ÙÀ½ºÎÅÍÀÔ´Ï´Ù.
XAllocNamedColor( d, CMap, "green", &color, &ExactColor );
XSetWindowBorder( d, w, color.pixel );
XAllocNamedColor( d, CMap, "peachpuff", &color, &ExactColor );
XSetWindowBackground( d, w, color.pixel );
/* ??? */
XFlush ( d );
sleep(5);
µîµî...
¼³¸íÀ» µå¸®ÀÚ¸é, Àü¹ÝºÎ¿¡¼´Â green »öÀÇ Çȼ¿°ªÀ» ¾Ë¾Æ³»¼ Å׵θ®»öÀ» º¯È½ÃÄ×°í, ÈĹݺο¡¼´Â peachpuff »öÀ¸·Î ¹è°æ»öÀ» ¹Ù²Ù¶ó°í Áö½ÃÇß½À´Ï´Ù. ±×¸®°í ²À ¹°³»¸®´Â °Í ÀØÁö ¸¶½Ê½Ã¿ä.(flush)
ÇÏÁö¸¸ ÀÌ·¸°Ô ÇÑ´Ù°í Çؼ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ¾ÆÁ÷ ºÎÁ·ÇÑ °ÍÀÌ Çϳª ÀÖ½À´Ï´Ù. ±×°ÍÀº ´ÙÀ½°ú °°Àº ÇÔ¼öÀÔ´Ï´Ù.
3. â ¹è°æÀ» Áö¿ì´Â ÇÔ¼ö, ¾Æ´Ï ´Ù½Ã Ä¥ÇÏ´Â ÇÔ¼ö!!!
XClearWindow ( Display *d, Window w );
ÇÔ¼öÀÇ À̸§¿¡¼ º¸À̵í, âÀ» Áö¿ì´Â, Á¤È®È÷ ¸»Çؼ âÀÇ ¹è°æÀ» Áö¿ì´Â ÇÔ¼öÀÔ´Ï´Ù. ´õ¿í »ó¼¼È÷ ¸»¾¸µå¸®ÀÚ¸é, ÇöÀçÀÇ ¹è°æÀ» Áö¿ì°í, ÇöÀç âÀÇ Á¤º¸ Áß ¹è°æ»ö¿¡ ÇØ´çÇÏ´Â »öÀ¸·Î ´Ù½Ã Ä¥ÇØÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¹è°æÀ» ¹Ù²Ù½Ã°íÀÚ ÇÒ ¶§´Â ÇÑ ¹ø âÀ» Áö¿öÁֽôø°¡ ¾Æ´Ï¸é ±×¿Í ¶È°°Àº È¿°ú¸¦ °®´Â ÀÏÀ» ÇØÁÖ½Ã¸é µË´Ï´Ù. ±×°ÍÀÌ ¹«¾ùÀ̳ı¸¿ä? âÀ» UnMap Çß´Ù°¡ ´Ù½Ã MapÇÏ½Ã¸é µË´Ï´Ù.
µû¶ó¼ Á¦°¡ À§¿¡¼ /* ??? */ ¶ó°í ÇÑ ºÎºÐ¿¡ ´ÙÀ½°ú °°ÀÌ ½á³Ö¾îÁֽʽÿä.
XClearWindow ( d , w );
âÀÇ Å׵θ®¿Í ¹è°æ»öÀ» ¹Ù²Ù´Â ÇàÀ§´Â â Á¶ÀÛ¿¡ ÀÖ¾î¼ ¾ÆÁÖ ±âº»ÀûÀÎ ÇàÀ§ÀÓÀº ¹°·ÐÀÌ°Å´Ï¿Í ¾ÆÁÖ Áß¿äÇÑ ÇàÀ§À̱⵵ ÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ X À©µµ¿ì ÇÁ·Î±×·¥¿¡¼ ¸ÅÀÏ º¸½Ã´Â ¹öÆ°µéÀ» º¸¼¼¿ä. Æ÷ÀÎÅ͸¦ °¡Á®´Ù ´ë¸é Å׵θ®³ª ±× ÀÚü »öÀÌ º¯ÇÏ´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. °á±¹¿¡´Â ±× ¹öÆ°µµ Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ Ã¢À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Â °Í¿¡ ºÒ°úÇÕ´Ï´Ù. ¸Þ´ºµµ ±×·¯ÇÏ°í¿ä. X À©µµ¿ì´Â ±×¾ß¸»·Î ¾ÆÁÖ Âزô¸¸ âºÎÅÍ ½ÃÀÛÇؼ Å͹̳Πâ°ú °°Àº Å« âµéÀ» Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù.
¸¹Àº ºÐµé²²¼ geometry¶ó´Â ´Ü¾î¸¦ º¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. Geometry¶ó ÇÔÀº â¿¡ ´ëÇÑ ´ÙÀ½°ú °°Àº Á¤º¸¸¦ ¸»ÇÕ´Ï´Ù. âÀÇ ÁÂÇ¥(¹°·Ð âÀÇ ¿ÞÂÊ À±¸¼® ÁÂÇ¥¸¦ ¸»ÇÏ°ÚÁÒ?), Æø°ú ³ôÀÌ, Å׵θ® µÎ²² µî.
»ç°¢Çü âÀÇ ±âº» ¿ä¼ÒµéÀ̶ó°í ÇÒ ¼ö ÀÖ´Â °ÍÀÌÁÒ. â Àü¹Ý¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Á®´Ù ÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼ö Çϳª¸¦ ¸ÕÀú ¼Ò°³ÇÏ°Ú½À´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>¿¡ ¼±¾ð
Status XGetGeometry ( Display *display,
Window drawable_object,
Window root_ID,
int *x,
int *y,
unsigned *width,
unsigned *height,
unsigned *border_width,
unsigned *depth
)
Geometry Á¤º¸¸¦ °¡Á®¿À´Â(Get) ÇÔ¼öÀÔ´Ï´Ù. ù¹ø° Display Çü Æ÷ÀÎÅÍ´Â ÇöÀç ÀÛ¾÷ ÁßÀÎ µð½ºÇ÷¹ÀÌ IDÀÌ°í, µÎ¹ø° Window Çü º¯¼ö´Â ¹Ù·Î ¿ì¸®°¡ geometry Á¤º¸¸¦ ¾Ë¾Æ³»°íÀÚ ÇÏ´Â ´ë»ó âÀÇ IDÀÔ´Ï´Ù. ±× ´ÙÀ½ º¯¼öµéÀº Çϳª°°ÀÌ Æ÷ÀÎÅÍ º¯¼öµéÀÔ´Ï´Ù. ¿©·¯ºÐµµ C ÇÁ·Î±×·¡¹ÖÀ» Çغ¸¼Å¼ ¾Æ½Ã°ÚÁö¸¸, ¾î¶² ÇÔ¼öµç ¹Ýȯ°ªÀº Çϳª ¹Û¿¡ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ ±× ÇÔ¼ö¸¦ ÅëÇØ ¿©·¯ °³ÀÇ ¹Ýȯ°ªÀ» °¡Áö°íÀÚ ÇÒ ¶§ ¾²´Â ±â¼úÀÌ ¹Ù·Î ±× ÇÔ¼ö¿¡°Ô ÁÖ¼Ò ÁöÁ¤ ¹æ½ÄÀÇ È£Ãâ(Call by Reference), Áï Æ÷ÀÎÅÍ·Î º¯¼ö¸¦ Àü´ÞÇØÁÖ´Â ¹æ½ÄÀÔ´Ï´Ù. ±× ÇÔ¼ö¿¡¼ ±× º¯¼öÀÇ ³»¿ë¿¡ ¾Ë¸Â´Â °ªÀ» ½áÁÖ¸é µÇ´Ï±î¿ä. ±×·¸½À´Ï´Ù. ¼¼¹ø° º¯¼öµéºÎÅÍ´Â ¿ì¸®°¡ ¾Ë°í ½ÍÀº Á¤º¸µéÀ» °¡Áö°í ¿Ã º¯¼öµéÀÔ´Ï´Ù. ¼¼¹ø° WindowÇü º¯¼ö´Â µÎ¹ø° Àμö¿¡¼ ÁÖ¾îÁø ID¸¦ °®´Â âÀÌ ¼ÓÇÑ ROOT âÀÇ ID¸¦ ¹ÝȯÇÕ´Ï´Ù. Àú·Î¼´Â ¾ÆÁ÷µµ ¿Ö ¼¼¹ø° Àμö¸¦ ÁÖ¾î¾ß ÇÏ´ÂÁö ±× Çʿ伺À» ÀÌÇØÇÒ ¼ö´Â ¾øÁö¸¸, È¥µ¿Çϼż´Â ¾ÈµÇ´Â °ÍÀº ¾î¶² âÀÌ ¼ÓÇÏ´Â ÀÚ½ÅÀÇ ºÎ¸ðâ ID°¡ ¹ÝȯµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó Àý´ëÀûÀ¸·Î ROOT âÀÇ ID°¡ ¹ÝȯµÈ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ³×¹ø° Àμö´Â x ÁÂÇ¥, ´Ù¼¸¹ø° Àμö´Â y ÁÂÇ¥, ±× ´ÙÀ½Àº Æø, ³ôÀÌ, Å׵θ® µÎ²²ÀÔ´Ï´Ù. ±×¸®°í ¸¶Áö¸·Àº Depth Áï ±íÀ̸¦ ¸»Çϴµ¥, ÀÌ°ÍÀº ÇöÀç â¿¡¼ »ö±òÀ» ±¸ÇöÇϴµ¥ ÀÖ¾î ¸î ºñÆ®¸¦ »ç¿ëÇÏ°í Àִ°¡¸¦ ¸»ÇØÁÝ´Ï´Ù. ÀÌ ¼ýÀÚ°¡ 8À̸é 8 ºñÆ® Ä®¶ó(8bpp) Áï 256 Ä®¶ó°¡ µÇ°ÚÁÒ? 16 bpp´Â 65536 Ä®¶ó, 24 bpp´Â 16¸¸ 7õ Ä®¶ó(16,777,216)¸¦ ¸»ÇÕ´Ï´Ù.
ÀÚ, ¿ô±â´Â »ç½ÇÀº À§¿¡¼ ¾Ë¾Æ³¾ ¼ö ÀÖ´Â x, y ÁÂÇ¥´Â ±× âÀÌ ¼ÓÇÑ ºÎ¸ðâÀÇ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÑ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¸¸¾à ·çƮâÀÌ A âÀ» Æ÷ÇÔÇÏ°í, A âÀÌ ´Ù½Ã B âÀ» Æ÷ÇÔÇÑ´Ù°í ÇսôÙ. B â¿¡ ´ëÇÏ¿© XGetGeometry ÇϽøé, ¼¼¹ø° Àμö¿¡´Â ROOTâÀÇ ID°¡, x, y º¯¼ö¿¡´Â A âÀÇ ¿ÞÂÊ À±¸¼®À» (0,0)À¸·Î ÇÏ´Â ÁÂÇ¥°è¸¦ ¾²´Â »ó´ëÀûÀÎ B âÀÇ ÁÂÇ¥°è°¡ ¹ÝȯµÇ¾î ¿É´Ï´Ù.
¸¶Áö¸·À¸·Î µ¡ºÙÀÌ°íÀÚ ÇÏ´Â »ç½ÇÀº ÀÌ·¸½À´Ï´Ù. ¿©·¯ºÐ²²¼ Xlib.h ÈÀÏ¿¡¼ XGetGeometry ÇÔ¼ö¸¦ ã¾Æ¼ ½ÇÁ¦ ³»¿ëÀ» º¸½Ã¸é µÎ¹ø° º¯¼öÀÇ ÀÚ·áÇüÀº Window ÇüÀÌ ¾Æ´Ï¶ó ½ÇÁ¦·Î´Â Drawable Áï ¹«¾ùÀΰ¡¸¦ ±×¸± ¼ö ÀÖ´Â ´ë»óÀ¸·Î µÇ¾î ÀÖ´Ù´Â °ÍÀ» ¹ß°ßÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ±×°Í¿¡ ´ëÇÑ ¼³¸íÀº ´Ù½Ã µÚ·Î ¹Ì·ì´Ï´Ù. ¾îÂî µÇ¾úµç Drawable Çü ÀÚ·á¿¡´Â Window ÇüÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
âÀÇ geometry¸¦ ¹Ù²Ù´Â ÇÔ¼öµéÀ» ¿©±â¿¡ ¼Ò°³ÇÕ´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>¿¡ ¼±¾ð
XMoveWindow ( Display *display, Window w, int x, int y );
XResizeWindow ( Display *display, Window w,
unsigned int width, unsigned int height );
XSetWindowBorderWidth ( Display *display, Window w,
unsigned int border_width );
ù¹ø° ÇÔ¼ö´Â âÀÇ À§Ä¡¸¦ ÁÖ¾îÁø x, y ÁÂÇ¥°ª¿¡ µû¶ó À̵¿½ÃÅ°´Â ³à¼®ÀÔ´Ï´Ù. ¹°·Ð ÁÂÇ¥´Â ºÎ¸ðâ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÕ´Ï´Ù. µÎ¹ø° ÇÔ¼ö´Â Resize Áï Å©±â º¯È½ÃÅ°´Â ÇÔ¼ö·Î¼ ÁÖ¾îÁø Æø&³ôÀÌ °ª¿¡ µû¶ó Å©±â¸¦ º¯È½Ãŵ´Ï´Ù. ¼¼¹ø°´Â ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö ¼³¸íÇصå·Á¾ß Çϳª¿ä? ³×, ¸Â½À´Ï´Ù. Å׵θ® ÆøÀ» º¯È½Ãŵ´Ï´Ù.
¿À´ÃÀÇ ¸ðµç ³»¿ëÀ» ´ã°í ÀÖ´Â ¿¹Á¦¸¦ Àû¾îµå¸®°í ¿À´Ã °ÀǸ¦ ¸¶Ä¥±î ÇÕ´Ï´Ù. ÇÑ ¹ø ¿©·¯ºÐµé²²¼ ºÐ¼®Çغ¸¼¼¿ä.
/* âÀÇ »ö»ó º¯È¿Í Geometry º¯È */
#include <X11/Xlib.h>
/* ÇÔ¼ö ¼±¾ð */
unsigned long UsrColorPixel( Display*, char* );
int main()
{
Display *d;
Window w0, w1, w2; /* One TopLevel Window & Two Child Windows */
unsigned long black_pixel;
int w_X1, w_Y1, w_X2, w_Y2; /* µÎ ÀÚ½ÄâÀÇ À§Ä¡ ÁÂÇ¥ */
unsigned int width, height, I; /* ÀÚ½ÄâÀÇ Æø & ³ôÀÌ */
/* ¼¹ö¿Í Á¢¼ÓÇϱ⠱׸®°í º¯¼öµéÀ» ÃʱâÈ */
d = XOpenDisplay ( NULL );
black_pixel = BlackPixel ( d, 0 );
width = 200; height = 100;
w_X1 = 10; w_Y1 = 10; w_X2 = width - 10; w_Y2 = height - 10;
/* ÀÚ, ½ÃÀÛÇغ¼±î¿ä? */
printf( "I will make windows.\n" );
sleep( 2 );
/* â Çϳª ±×¸®°í ÀÚ½Äâ 2°³ »ý¼º */
w0 = XCreateSimpleWindow ( d, DefaultRootWindow( d ),
100, 100, width*2, height*2, 1,
black_pixel, WhitePixel( d, 0 ) );
w1 = XCreateSimpleWindow ( d, w0, w_X1, w_Y1, width, height, 1,
black_pixel, UsrColorPixel( d, "magenta" ) );
w2 = XCreateSimpleWindow ( d, w0, w_X2, w_Y2, width, height, 3,
black_pixel, UsrColorPixel( d, "blue" ) );
/* â°ú ÀÚ½ÄâÀ» ȸé»ó¿¡ Ç¥½Ã */
XMapWindow( d, w0 );
XMapSubwindows( d, w0 );
XFlush( d );
printf( "Unmap & Map.\n" );
sleep( 3 );
/* â Çϳª¸¦ UNMAP, MAP */
XUnmapWindow( d, w1 ); XFlush( d );
sleep( 1 );
XMapWindow( d, w1 ); XFlush ( d );
printf( "I will change the color of windows.\n" );
sleep( 3 );
/* â ÇϳªÀÇ »ö»óÀ» º¯°æ */
XSetWindowBorder( d, w2, UsrColorPixel( d, "red" ) );
XSetWindowBackground( d, w2, UsrColorPixel( d, "green" ) );
XClearWindow( d, w2 );
XFlush( d ); sleep( 1 );
XSetWindowBackground( d, w0, UsrColorPixel( d, "yellow" ) );
XClearWindow( d, w0 );
XFlush( d );
printf( "I will move windows.\n" );
sleep( 3 );
/* â Çϳª¾¿ À̵¿ */
for ( ; w_X1 < width - 10 ; )
{
XMoveWindow( d, w1, w_X1++, w_Y1 );
XFlush( d );
}
for ( ; w_X1 > 10 ; )
{
XMoveWindow( d, w1, w_X1--, w_Y1 );
XFlush( d );
}
for ( ; w_Y2 > 10 ; )
{
XMoveWindow( d, w2, w_X2, w_Y2-- );
XFlush( d );
}
for ( ; w_Y2 < height - 10 ; )
{
XMoveWindow( d, w2, w_X2, w_Y2++ );
XFlush( d );
}
printf( "I will change the size of windows.\n" );
sleep( 3 );
/* âÀÇ Å©±â¸¦ È®Àå/Ãà¼Ò */
XResizeWindow ( d, w1, width + 100, height + 50 );
XMoveResizeWindow ( d, w2, w_X2 + 50, w_Y1 + 20,
width - 100, height - 50 );
/* XMoveResize !!! */
XFlush ( d );
printf( "At last, I will change the width of borders.\n" );
sleep( 3 );
/* âÀÇ Å׵θ® È®Àå */
for ( I = 1 ; I < 20 ; I++ )
{
XSetWindowBorderWidth ( d, w2, I );
XFlush( d );
}
printf( "Jobs done. Merci.\n" );
sleep( 3 );
/* â Æı« & ¼¹ö¿ÍÀÇ Á¢¼Ó ÇØÁ¦ */
XUnmapWindow( d, w0 );
XUnmapSubwindows( d, w0 );
XDestroySubwindows( d, w0 );
XDestroyWindow( d, w0 );
XCloseDisplay( d );
return 0; /* ¼º°øÀûÀ¸·Î ÇÁ·Î±×·¥À» ¼öÇà */
}
/*
UsrColorPixel() : ÁÖ¾îÁø À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ ±âº» Ä÷¯¸ÊÀÇ Çȼ¿°ª ¹Ýȯ
*/
unsigned long UsrColorPixel( display, name )
Display *display;
char *name;
{
Colormap cmap;
XColor c0, c1;
cmap = DefaultColormap( display, 0 );
XAllocNamedColor( display, cmap, name, &c0, &c1 );
/* ¿©±â¼ ¿ì¸®´Â c1 À» ¾ÆÁ÷ ÀÌ¿ëÇÏÁö ¾Ê½À´Ï´Ù. */
return ( c0.pixel );
}
¿©±â±îÁö°¡ ¿¹Á¦ 6 ÀÔ´Ï´Ù. ¸¶Áö¸·¿¡ »ç¿ëÀÚ Á¤ÀÇÇÔ¼ö UsrColorPixel()Àº ¹Ù·Î Àü ½Ã°£¿¡ Á¦°¡ ¹®Á¦·Î ³»µå·È´ø °Í¿¡ ´ëÇÑ ´ä Áß ÇϳªÀÔ´Ï´Ù. ¿©·¯ºÐµé²²¼ °¢ÀÚ ÀڽŸ¸ÀÇ Á¤ÀÇÇÔ¼ö¸¦ ¸¸µé¾î ³õÀ¸¼Ì°ÚÁö¿ä? Àú¶û ºñ±³ÇØ º¸½Ê½Ã¿ä.
ÀÌ ¿¹Á¦¸¦ º¸½Ã¸é¼ ÇÑ ÁÙ ÇÑ ÁÙÀÌ ¾î¶² ÀÏÀ» ÇÏ°Ô µÉ °ÍÀÎÁö ¹Ì¸® ¸Ó¸® ¼Ó¿¡¼ ±×·Áº¸½Ã°í, ¹ø°Å·Î¿ì½Ã´õ¶óµµ ²À ¿¹Á¦¸¦ Àڱ⠼ÕÀ¸·Î ŸÀÌÇÎÇϽøé¼( »ó´çÇÑ ³ë°¡´ÙÁÒ? :) ) ÇÔ¼ö ÇϳªÇϳª¸¦ ÀÍÈ÷½Ã±â ¹Ù¶ø´Ï´Ù. ¸ðµç ÇÔ¼öµéÀÌ ¿Ö ±×·¸°Ô ¾º¿©Á®¾ß Çϴ°¡, ¿Ö ±×·¸°Ô ¹Û¿¡ ¸¸µéÁö ¸øÇߴ°¡¿¡ ´ëÇؼµµ »ý°¢ÇØÁÖ½Ã¸é ´õ¿í ÁÁ±¸¿ä. ±× ´ÙÀ½, ÀÌ ¿¹Á¦ ¼Ó¿¡´Â Á¦°¡ ¼³¸íµå¸®Áö ¾ÊÀº ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ±× ÇÔ¼ö´Â ¿©·¯ºÐ²²¼ ÈûµéÀÌÁö ¾Ê°í ±× ÀÇ¹Ì¿Í »ç¿ë¹ýÀ» ¾Æ½Ç ¼ö ÀÖÀ» °Å¶ó°í »ý°¢ÇÕ´Ï´Ù.
¿©·¯ºÐµµ Àß ¾Æ½Ç °Ì´Ï´Ù. ÇÁ·Î±×·¡¹ÖÀº Â¥Áõ³¯ Á¤µµ·Î ¸¹Àº ½Ç¼öµéÀÇ ¿¬¹ß ¼Ó¿¡¼ ±× ½Ç·ÂÀÌ ´Ã¾î°£´Ù´Â »ç½Ç, ±×¸®°í ¾û¶×ÇÑ ½Ç¼ö ¼Ó¿¡¼ Áß¿äÇÑ ¹®Á¦µéÀ» ÆľÇÇØ ³ª°¥ ¼ö ÀÖ´Ù´Â »ç½Ç ¸»ÀÔ´Ï´Ù. ´ÙÀ½°ú °°Àº ¹®ÀåÀÌ ¿¹Á¦¿¡ ÀÖÁÒ?
XSetWindowBackground( d, w0, UsrColorPixel( d, "yellow" ) );
¿ä ¹®ÀåÀ» /* */À¸·Î ÁÖ¼®¹® ó¸®ÇϽðųª Áö¿ì½Å ´ÙÀ½ ÄÄÆÄÀÏÇÏ°í ½ÇÇà½ÃÄÑ º¸¼¼¿ä. ÀÚ, ¾î¶² ÀÏÀÌ ÀϾ´Ï±î?
X À©µµ¿ì ÇÁ·Î±×·¡¹Ö º° °Í ¾Æ´Õ´Ï´Ù. âÀ» °¡Áö°í ³ë´Â Àå³À̶ó°í³ª ÇÒ±î¿ä?