Previous Next Table of Contents

2. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : Xlib

X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ µµÀüÇϽô ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Àúµµ ¾Æ´Â °ÍÀº ¸¹ÀÌ ¾øÁö¸¸ ¿©·¯ºÐÀ» Á¶±ÝÀÌ¶óµµ µµ¿ï ¼ö ÀÖ´Ù¸é, ±×¸®°í ÀúÀÇ °­Á¸¦ °è±â·Î ´õ¿í ´õ ¸¹Àº ¼öÁسôÀº X À©µµ¿ì ÇÁ·Î±×·¡¹Ö °­ÁµéÀÌ »ý°Ü³ª±æ ±â´ëÇϸ鼭 X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤À» ½ÃÀÛÇÒ±î ÇÕ´Ï´Ù. ¾î·Æ´õ¶óµµ Æ÷±âÇÏÁö ¸¶½Ã°í ³¡±îÁö Àú¿Í ÇÔ²² °¡¼Å¼­ ´ç´çÇÑ X À©µµ¿ì ÇÁ·Î±×·¡¸Ó·Î ¿ì¶Ò ¼­½Ê½Ã¿ä. ±×¸®°í ¸®´ª½º¸¦ ºû³»ÁÝ´Ï´Ù.

2.1 X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡±â ¾Õ¼­

¿©·¯ºÐÀÇ ¼±ÅÃÀº Á¤¸»·Î Ź¿ùÇÕ´Ï´Ù. X À©µµ¿ì ½Ã½ºÅÛÀº MS À©µµ¿ìÁî 95¿Í °°Àº ¾ûÅ͸®¿¡´Ù ´Ü¸íÇϴ üÁ¦¿Í´Â ÀüÇô ´Ù¸¥ ¼öÁØÀÇ ¾ÈÁ¤µÇ°í Ç¥ÁØÀûÀÎ ½Ã½ºÅÛÀÔ´Ï´Ù. ¿©·¯ºÐ²²¼­ ¹Ì·¡¸¦ »ý°¢ÇϽŴٸé, ¹Ù·Î X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ¼±ÅÃÇϽʽÿä.

ÀÚ, ¿ì¼± Á¡°ËÇØ¾ß ÇÒ °ÍµéÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ Áغñ°¡ µÇ¾î ÀÖ´ÂÁö ¾Ë¾ÆºÁ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ÀÌ ±ÛÀ» Àд ºÐµéÀº ÃÖ¼ÒÇÑ X À©µµ¿ì°¡ ÀÛµ¿ÇÏ°í °è½Å ¼±ÅùÞÀº(?) ºÐµéÀÏ °ÍÀÌ°í, ³²Àº °ÍÀº ¿©·¯ºÐÀÌ ½½·¢¿þ¾î ¼³Ä¡½Ã X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ´Â Çì´õ ÆÄÀÏ µîÀ» Á¦´ë·Î ¼³Ä¡Çϼ̴ÂÁö È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. /usr/include/X11 ¤Ô±×¸®°í /usr/X11/lib ¿¡ È­ÀϵéÀÌ ÀÖ´ÂÁö ¸»ÀÔ´Ï´Ù.

¸ðµÎ ÀÌ»ó¾ø´Ù°í¿ä? ³×, ±×·¯¸é ½ÃÀÛÇսôÙ.

2.2 X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ̶õ ?

X À©µµ¿ì ÇÁ·Î±×·¥À̶õ X À©µµ¿ìÀÇ 'ÀÚ¿ø(Resource)'À» ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. XÀÇ ÀÚ¿øµéÀº ´ëÇ¥ÀûÀ¸·Î â(Window), »ö»ó(Color Map), ÆùÆ®(font) µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÀÚ¿øµéÀ» X À©µµ¿ì ¼­¹ö(Server)¶ó°í ÇÏ´Â ³à¼®ÀÌ Àü±ÇÀ» °¡Áö°í °ü¸®ÇÏ°í ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ¿ªÇÒÀº ÀÌ¹Ì Á¤ÇØÁ® ÀÖ´Â '±ÔÄ¢'¿¡ µû¶ó¼­, ÀÚ¿øÀ» °ü¸®ÇÏ°í ÀÖ´Â ¼­¹ö¿¡ ¿¬°áÇÏ¿©, ¼­¹ö´õ·¯ ¿ì¸®°¡ ¿øÇÏ´Â ÀÚ¿øÀ» ¼­ºñ½ºÇØ´Þ¶ó°í ¿äûÇÏ´Â ÀÏÀÔ´Ï´Ù. ¹Ù·Î ¿ì¸®´Â ¼­¹ö¶ó´Â ³ð°ú ¾î¶»°Ô ¿¬°áÇÒ °ÍÀÎÁö, ±×¸®°í ¾î¶»°Ô ¼­¹ö´õ·¯ ÀÌ°Í Àú°Í ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀ» ´Þ¶ó°í ÇÏ´ÂÁö¸¦ ¹è¿ì´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ°Ô µË´Ï´Ù.

ÀÌ·¯ÇÑ ÇÁ·Î±×·¥À» Ŭ¶óÀ̾ðÆ®(Client)¶ó°í ÇÏÁö¿ä. ¼­¹ö/Ŭ¶óÀ̾ðÆ® °³³äÀ̶ó°í Çؼ­ Ç×»ó ÇÁ·Î±×·¥À» "¹«¾ùÀÌ ¹«¾ù¿¡ ¿¬°áÇÏ¿© ¿øÇÏ´Â ÀÏÀ» ÇÑ´Ù"¶ó´Â »ç°í¹æ½Ä ÇÏ¿¡ ¸ðµç ÇÁ·Î±×·¥À» Â¥°Ô µË´Ï´Ù. ÀÌ´Â ´õ ³ª¾Æ°¡ ¼¼°è ÀúÆí¿¡ ÀÖ´Â ¼­¹ö¿¡ ¿ì¸®ÁýÀÇ Å¬¶óÀ̾ðÆ®°¡ ¿¬°áÀ» ÇÏ¿© ¼­ºñ½º¸¦ ¹Þ´Â´Ù´Â "³×Æ®¿öÅ© ÁöÇâÀû"ÀÌ°í ¹Ì·¡ ÁöÇâÀûÀÎ ÇÁ·Î±×·¡¹ÖÀÌ µË´Ï´Ù. ÀÎÅÍ³Ý ½Ã´ë¸¦ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô´Â ¾ÆÁÖ Áß¿äÇÑ °³³äÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ºÐ²²¼­ Àú¿Í ÇÔ²² X ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¸¦ ŽÇèÇϽô٠º¸¸é ¾ÆÁÖ ÀÚ¿¬½º·´°Ô ¸ÚÁø ³×Æ®¿öÅ© ÇÁ·Î±×·¥¿¡ µµÀüÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù.

¿ì¸®´Â ´ÜÁö Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ¼­¹ö¿¡ ¿¬°áÇÏ°í, ¼­ºñ½º¸¦ ¹Þ°í, ¿¬°áÀ» ÇØÁ¦ ÇÏ´Â °ÍÀ» ¹è¿ì´Â °ÍÀÏ »ÓÀ̶ó´Â »ç½ÇÀ» Ç×»ó ¸í½ÉÇØÁÖ¼¼¿ä!

2.3 ¾Ë¾ÆµÎ¾î¾ß ÇÒ »ç½Ç

¿©·¯ºÐ ¸ðµÎ ´çÀå¿¡ ½ÇÁ¦ÀûÀÎ X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÏ°í ½ÍÀ¸½Ç °Ì´Ï´Ù. ÇÏÁö¸¸, ÀÌ·¯ÇÑ »ç½ÇµéÀº ¾Ë°í µé¾î°¡¼Å¾ß ´õ¿í ´õ »¡¸® ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇØÁö½Ç ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù.

cd /usr/X11/lib Çغ¸¼¼¿ä. ±×¸®°í ls ... lib¶ó´Â ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ¸¹Àº È­ÀϵéÀÌ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀÌ ³à¼®µé '¶óÀ̺귯¸®'´Â ¿ì¸®¸¦ Ç×»ó µµ¿ÍÁÖ´Â ³ðµéÀÔ´Ï´Ù. À̵éÀÌ ¾øÀ¸¸é ¾Æ¹« °Íµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ³à¼®µéÀ» ¿©·¯ºÐ²² ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù.

³ª¸ÓÁö Ä£±¸µéÀº ¼Ò°³½ÃÄÑ µå¸®±â Èûµé±º¿ä. ¾ÆÁ÷ ¶§°¡ µÇÁö ¾Ê¾Æ¼­... ³ªÁß¿¡ ¼Ò°³½ÃÄÑ µå¸± ±âȸ°¡ ¿Ã Áö...

2.4 ÀÚ, ÀÌÁ¦ ½ÃÀÛÇغ¼±î¿ä?

Ŭ¶óÀ̾ðÆ®°¡ Á¦ÀÏ ¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ¹«¾ùÀϱî¿ä? ... ¼­¹ö¿¡ Á¢¼ÓÇÏ´Â ÀÏÀÔ´Ï´Ù.

°ú¿¬ ³ª´Â ¾î¶² ¼­¹ö¸¦ ¼±ÅÃÇÒ °ÍÀΰ¡? ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÕ´Ï´Ù. º¸Åë µµ½º, À©µµ¿ìÁî ȯ°æ¿¡ Àͼ÷ÇϽŠºÐµéÀº Á» »ý¼ÒÇÑ °³³äÀÌÁö¿ä. ÇÏÁö¸¸ ¿äÁòÀº ÀÎÅͳÝÀ» ¸¹ÀÌ ÇϽñ⠶§¹®¿¡ ÀÌÇØÇϽñ⠾î·ÆÁö´Â ¾ÊÀ» °Ì´Ï´Ù. ¸®´ª½º 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¶õ?

µð½ºÇ÷¹ÀÌ°¡ ¹«¾ùÀÎÁö Àß ¾Æ½Ç °Ì´Ï´Ù. ¿©·¯ºÐ²²¼­ ¹Ù·Î ´« ¾Õ¿¡ µÎ°í °è½Å °ÍÀÌ ¸ð´ÏÅͶó°í ÇÏ´Â 'µð½ºÇ÷¹ÀÌ'ÀÔ´Ï´Ù. ±×·±µ¥ ¿©±â¼­ Display¶ó°í ÇÏ´Â °ÍÀº X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ ¾à°£ È®ÀåµÈ Àǹ̷Π»ý°¢ÇÕ´Ï´Ù.

Á¤ÀÇ : Display¶õ ÇϳªÀÇ ¼­¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â 1°³ ÀÌ»óÀÇ ½ºÅ©¸°(Screen), 1°³ÀÇ Å°º¸µå, ¸¶¿ì½º µîµîÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Â ÁýÇÕüÀÌ¸ç ¿öÅ©½ºÅ×À̼Ç(Workstation) À̶ó°í ºÎ¸£±âµµ ÇÑ´Ù.

ÀÌ·¯ÇÑ µð½ºÇ÷¹ÀÌ´Â º¸Åë ¸ð´ÏÅÍ Çϳª Àüü¸¦ ³ªÅ¸³»´Â ½ºÅ©¸°À» Çϳª °®´Â °æ¿ì°¡ º¸ÅëÀÌÁö¸¸ Ư¼öÇÑ °æ¿ì 2°³ ÀÌ»óÀÇ ½ºÅ©¸°À» °®´Â °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡ µÎ °³ÀÇ ¸ð´ÏÅ͸¦ ¾²´Â "µà¾ó ¸ð´ÏÅÍ" ½Ã½ºÅÛµµ Á¾Á¾ º¼ ¼ö ÀÖ½À´Ï´Ù. ±× °æ¿ì Çϵå¿þ¾î°¡ ¹ÞÃÄÁشٸé, X ½Ã½ºÅÛÀº µÎ °³ÀÇ È­¸éÀ» °¢°¢ ÀÌ¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ÇÁ·Î±×·¥ Çϳª ¸¸µé¸é Á¤¸» Àç¹ÌÀÖ°ÚÁÒ? X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â ³Ê¹«µµ ½±°Ô ÀÌ·ç¾îÁý´Ï´Ù.

XOpenDisplay ÇÔ¼ö

ÀÚ, ÀÌÁ¦ ¿ì¸®°¡ ¿øÇÏ´Â µð½ºÇ÷¹ÀÌ ¼­¹ö¿¡ Á¢¼ÓÀ» Çغ¾½Ã´Ù.

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 ÇÔ¼ö

Á¢¼ÓÇؼ­ ÇÑ ÀÏÀº Çϳªµµ ¾øÁö¸¸, ÀÌÁ¦ Á¢¼ÓÀ» ¸¶ÃÄ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ±× ÇÔ¼ö°¡ ¹Ù·Î XCloseDisplay ÇÔ¼öÀÔ´Ï´Ù.

¿À´ÃÀº ¾ÆÁÖ ¾ÆÁÖ °£´ÜÇÏÁö¸¸, ¶ÇÇÑ ¾ÆÁÖ ¾ÆÁÖ ±Ùº»ÀûÀÎ ÇÁ·Î±×·¥À» Çϳª Â¥º¸¾Ò½À´Ï´Ù. ¸ðµç X À©µµ¿ì ÇÁ·Î±×·¥Àº ±âº»ÀûÀ¸·Î ¿¹Á¦ 1 ÇÁ·Î±×·¥°ú ±× Çü½ÄÀÌ °°½À´Ï´Ù. ¼­¹ö¿¡ ¿¬°áÇÏ°í ¼­ºñ½º ¹ÞÀº ÈÄ, Á¢¼ÓÀ» ÇØÁ¦ÇÕ´Ï´Ù. ¸ðµç À¯¿ëÇÑ ÀÛ¾÷Àº XOpenDisplay ÇÔ¼ö¿Í XCloseDisplay ÇÔ¼ö »çÀÌ¿¡ Àû¾îÁÖ½Ã¸é µË´Ï´Ù.

ÀÌ ±ÛÀ» ´Ù ÀÐÀ¸½Å ÈÄ, ²À Xlib.h È­ÀÏÀÇ ³»¿ëÀ» »ìÆ캸½Ê½Ã¿ä. ¿¹¸¦ µé¾î Display Çü º¯¼ö´Â ¾î¶»°Ô ¼±¾ð, Á¤ÀǵǾî ÀÖ´ÂÁö º¸½Ã¸é, Á¤¸»·Î ¸¹Àº Á¤º¸¸¦Áö´Ï°í ÀÖ´Â ±¸Á¶Ã¼(struct)¶ó´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.

2.5 °£´ÜÇÑ Ã¢ Çϳª ¸¸µé¾î º¾½Ã´Ù.

¾Õ¿¡¼­ ¸¸µç ¿øÃÊÀû(?) ÇÁ·Î±×·¥Àº ´ÜÁö ¼­¹ö¿Í Á¢¼ÓÇÏÀÚ ¸¶ÀÚ Á¢¼ÓÀ» ²÷¾î¹ö¸®´Â °æ¿ì¿´½À´Ï´Ù. ±×·³, ÀÌÁ¦´Â ¼­¹ö¿¡ Á¢¼ÓÇÏ°í ³ª¼­ ¾ÆÁÖ °£´ÜÇÑ ÀÏÀ» Çϳª ½ÃÄѺ¸µµ·Ï ÇսôÙ. ¹Ù·Î â Çϳª¸¦ ¸¸µé¾î¼­ Ç¥½ÃÇغ¸´Â °Ì´Ï´Ù.

 #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 Çü º¯¼ö Çϳª´Â ±× â¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â º¹ÀâÇÑ ±¸Á¶Ã¼ Á¤µµ¶ó°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ¿¹»óÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î´Â âÀÇ Å©±â, À§Ä¡, »ö»ó µîÀÌ ÀÖ½À´Ï´Ù.

â »ý¼º, Ç¥½Ã ...

Áö±ÝºÎÅÍ ¼³¸íµå¸®´Â ±âº»ÀûÀÎ ÀýÂ÷¸¦ ²À ¸Ó¸® ¼Ó¿¡ ³Ö¾îµÎ¼¼¿ä. ¾î¶² âÀ» ¸¸µéµçÁö ¿ì¸®´Â ¿ì¼±ÀûÀ¸·Î ±× â¿¡ ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÏ°í ÀÖÀ» º¯¼ö Çϳª¸¦ ÀÌ¹Ì ¸¸µé¾î³õ¾ß¾ß ÇÕ´Ï´Ù. Áï Window Çü º¯¼ö Çϳª¸¦. ±× ´ÙÀ½ ¼­¹ö´õ·¯ âÀ» Çϳª ¸¸µé°Ú´Ù°í ¼­ºñ½º ¿äûÀ» ÇÕ´Ï´Ù. (Á¶±Ý µÚ¿¡ ¼³¸íµå¸®´Â ÇÔ¼ö¸¦ ÅëÇØ) À̺¯ÀÌ ¾ø´Â ÇÑ ¼­¹ö´Â âÀ̶ó´Â ÀÚ¿ø Çϳª¸¦ ¼­¹ö Ãø(!!!)¿¡ ¸¸µé¾î ³õ½À´Ï´Ù. ±×¸®°í â ÀÚ¿ø¿¡ ´ëÇÑ ÀÚ¿ø °íÀ¯¹øÈ£(Resource ID)¸¦ ¾Æ±î Ŭ¶óÀ̾ðÆ® ÂÊ¿¡¼­ ¸¸µé¾î ³õÀº º¯¼ö¿¡ ¹ÝȯÇØÁÝ´Ï´Ù. ÀÌ º¯¼ö´Â ¹Ù·Î Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö Ãø¿¡ ¸¸µé¾îÁø ÇÑ Ã¢¿¡ ´ëÇÑ ¿¬°áÅë·Î ¿ªÇÒÀ» ÇØÁÝ´Ï´Ù. ¹«Áö Áß¿äÇÏÁÒ?

ÀÌ·¸°Ô ¼­¹ö Ãø¿¡´Ù â ÀÚ¿ø Çϳª¸¦ ¸¸µé¾î³õ°í, ±× ´ÙÀ½¿¡´Â ¿©·¯ºÐÀÌ ¿øÇÏ´Â ¶§¿¡ ±× âÀ» È­¸é¿¡ Ç¥½ÃÇØ´Þ¶ó°í ¿äûÇÏ¸é ¼­¹ö°¡ ¾Ë¾Æ¼­ ±× âÀ» Ç¥½ÃÇØÁÝ´Ï´Ù. ¹°·Ð ¿äû¿¡ µû¶ó È­¸é¿¡¼­ »ç¶óÁö°Ô ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù.

¶Ç´Â ÇöÀç ³ªÅ¸³»Á® Àִ â¿¡ ´ëÇÏ¿© ¹è°æ»ö°ú Å׵θ®»öÀ» ¹Ù²Û´ÙµçÁö ÇÏ´Â ¼öÁ¤ ÀÛ¾÷ ¶ÇÇÑ ¾Æ±îÀÇ Window Çü º¯¼ö¸¦ ÅëÇؼ­ ÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿ì¸®´Â ¾ÕÀ¸·Î ¸ðµç ÀÚ¿ø¿¡ ´ëÇÏ¿© ¼­¹ö Ãø¿¡ ÀÚ¿øÀ» ¸¸µé¾î ³õ°í ¿ì¸® Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¿¡¼­´Â ´ÜÁö ±× ÀÚ¿ø¿¡ ´ëÇÑ ID¸¸À» º¯¼ö¿¡´Ù ÀúÀåÇسõ°í ÀÖ½À´Ï´Ù. ±×¸®°í ¿øÇÏ´Â ¶§¿¡ ±× ÀÚ¿øÀ» Ç¥½ÃÇÑ´ÙµçÁö, ¼öÁ¤ÇÑ´ÙµçÁö, ¶Ç´Â ¾ø¾Ø´ÙµçÁö ÇÏ´Â ÀÛ¾÷À» ÇàÇÕ´Ï´Ù. ±×¸®°í ³ªÁß¿¡ Á¤¸» ÇÊ¿ä°¡ ¾ø¾îÁø ÀÚ¿ø¿¡ ´ëÇؼ­´Â ¼­¹ö Ãø¿¡´Ù »èÁ¦Ç϶ó°í Åë°íÇÕ´Ï´Ù.

Á¦°¡ ÀÌ·¸°Ô ±æ°Ô ¼³¸íµå¸° °³³äÀ» ²À ¼÷ÁöÇØÁֽʽÿä. ¾î¶»°Ô º¸¸é ¿ì¸®°¡ ¾ÕÀ¸·Î ÇÏ´Â ÀÏÀÇ °ÅÀÇ ´ëºÎºÐÀ» ¸»¾¸µå¸° °ÍÀ̳ª ´Ù¸§¾ø½À´Ï´Ù.

XCreateSimpleWindow ÇÔ¼ö¿¡ ´ëÇÏ¿©...

ÇÔ¼ö À̸§ ±×´ë·Î Çؼ®Çغ¸¸é "°£´ÜÇÑ Ã¢À» »ý¼ºÇÑ´Ù"ÀÌÁö ¾Ê½À´Ï±î? ¿ì¸®°¡ ¿µ¾î ¹®È­±Ç¿¡ »ì°í ÀÖ´Ù¸é, À̰͸¸Å­ ½ÄÀº Á× ¸Ô±â°¡ ¾îµð ÀÖ°Ú½À´Ï±î ¸¸Àº... °£´ÜÇÑ Ã¢À» ¸¸µå´Â ÇÔ¼ö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁö¿ä.

 ÇÔ¼öÀÇ ¿øÇü(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()

ÀÌ ³à¼®Àº ¹«¾ùÀΰ¡ Çϸé, À§¿¡¼­ ¼­¹öÃø¿¡ ¸¸µé¶ó°í Å뺸ÇÑ Ã¢À» ½ÇÁ¦·Î ³ªÅ¸³»¶ó´Â Áö½Ã¸¦ ¼­¹ö¿¡ º¸³»´Â ³à¼®ÀÔ´Ï´Ù. âÀÇ »ý¼º°ú Ç¥½Ã´Â º°°³ÀÇ °úÁ¤ÀÌÁö¿ä.

 ÇÔ¼öÀÇ ¿øÇü

 XMapWindow ( Display *display, Window w );

ƯÁ¤ µð½ºÇ÷¹ÀÌ ¼­¹ö¿¡¼­ w¶ó´Â âÀ» È­¸é¿¡ ½ÇÁ¦·Î Ç¥½ÃÇÕ´Ï´Ù. ¿©±â¼­ ¿µ¾î MapÀº µ¿»ç·Î¼­ "Áöµµ·Î ±×¸®´Ù","¹èÄ¡ÇÏ´Ù"ÀÇ ¶æÀÔ´Ï´Ù. Á¦°¡ ´Ù´Ï´Â ÁöÁú°úÇаú¿¡¼­´Â ÁöÁúµµ ±×¸®´Â °ÍÀ» ¸ÅÇÎ(Mapping)ÇÑ´Ù¶ó°í ¸»ÇÕ´Ï´Ù.

XFlush()

¾Æ´Ï, ÀÌ°Ç ¶Ç ¹»±î¿ä? Ç÷¯½¬(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()¸¦ ½è´ÂÁö ÇÑ ¹ø »ý°¢Çغ¸¼¼¿ä. ±×¸®°í, À§¿¡¼­ ¿£ÅÍ Å°°¡ ¾Æ´Ï¶ó ½ºÆäÀ̽º¹Ù °°Àº °ÍÀ» ´©¸£¸é ¿Ö Á¾·áÇÏÁö ¾Ê´ÂÁöµµ »ý°¢Çغ¸¼¼¿ä. ¾Æ·¡¿¡¼­ ±× ´äÀ» µå¸®°Ú½À´Ï´Ù.

2.6 ⠾ȿ¡ ¶Ç âÀ» ¸¸µé¾î º¾½Ã´Ù.

¹Ù·Î ¾Õ¿¡¼­ ¾ÆÁÖ °£´ÜÇÑ Ã¢ Çϳª¸¦ ¸¸µé¾î º¸¾ÒÁö¿ä. À̹ø¿¡´Â ±× ⠾ȿ¡´Ù ´Ù¸¥ ÀÛÀº âµéÀ» ¿©·¯ °³ ¸¸µé¾î º¸±â·Î ÇÏ°Ú½À´Ï´Ù.

 #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 ½Ã½ºÅÛ º¸´Ùµµ °³¹æÀûÀÓÀ» Áõ¸íÇغ¸ÀÌ°Ô µÉ °Ì´Ï´Ù. ±â´ëÇØÁÖ¼¼¿ä.

ÀÌ Â©¸·ÇÑ ¿¹¸¦, ÀÌ ¿¹¿¡¼­ º¸ÀÌ´Â ¼ø¼­¸¦ ²À ÀÌÇØÇÏ½Ã°í ¸Ó¸® ¼Ó¿¡ Ç×»ó ±â¾ïÇØ Áֽʽÿä. ¾ÆÁÖ Áß¿äÇÑ ÆÐÅÏ Áß¿¡ ÇϳªÀÔ´Ï´Ù.

2.7 ÀÌÁ¦´Â Èæ¹éÀÌ ¾Æ´Ï¶ó Ä®¶ó âÀ» ¸¸µé¾îº¾½Ã´Ù.

¿À´ÃÀº ¾î¶»°Ô »ö»ó(Color)À» ¼­¹ö·ÎºÎÅÍ ¾ò¾î³»°í »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ±× µ¿¾È °è¼Ó ¹Ì·ï¿Ô´ø ÀÏÀ̱⵵ Çϱ¸¿ä...

Áö±Ý±îÁö ¾Æ¹« ¼³¸í¾øÀÌ Àú´Â BlackPixel(), WhitePixel()µîÀÇ ¸ÅÅ©·Î¸¦ ¿¹Á¦¿¡¼­ ½á¿Ô½À´Ï´Ù. À̸§ÀÌ ³ªÅ¸³»µí °ËÁ¤»ö/¹é»öÀ» ±¸ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ¾úÁö¿ä. ÀÌÁ¦´Â ÀÌ°Í ¸»°íµµ ¿ì¸®°¡ ¿øÇÏ´Â »öµéÀ» ÀϹÝÀûÀ¸·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù.

»ö»ó ¶ÇÇÑ ¼­¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â ÀÚ¿øÀÇ ÇϳªÀÔ´Ï´Ù. µû¶ó¼­ âÀ» ¸¸µé¾î ´Þ¶ó°í ¼­¹ö¿¡ ¿äûÇÏ°í, Ç¥½ÃÇ϶ó°í ¿äûÇÏ´Â ÀÛ¾÷µé°ú ¸¶Âù°¡ÁöÀÇ °úÁ¤À» °ÅÄ¡°Ô µË´Ï´Ù.

¼­¹ö´Â Ä÷¯¸Ê(Color Map)À̶ó°í ÇÏ´Â °ÍÀ» °¡Áö°í ÀÖ½À´Ï´Ù. »ö»óÀ» ³ªÅ¸³»´Â Áöµµ ¶Ç´Â µµÇ¥¸¦ ¶æÇÏÁö¿ä. ÀÌ°ÍÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö Àá±ñ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

Ä÷¯¸ÊÀ̶õ?

ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ°í ÀÖ´Â Ãâ·ÂÀåÄ¡ Áß¿¡ ºñÆ®¸Ê µð½ºÇ÷¹ÀÌ¿¡ ¼ÓÇÏ´Â CRT¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿©·¯ºÐ²²¼­ ´« ¾Õ¿¡ µÎ°í °è½Å ¸ð´ÏÅÍÀÌÁö¿ä. ÀÌ ¸ð´ÏÅÍÀÇ ¿ø¸®´Â ¿©·¯ºÐ ¸ðµÎ ¾Æ½Ã´Ù½ÃÇÇ ºûÀÇ 3¿ø»ö¿¡ ´ëÀÀÇÏ´Â 3°³ÀÇ ÀüÀÚÃÑÀÌ ¸ð´ÏÅÍ Ç¥¸é¿¡ ¹ß¶óÁ® ÀÖ´Â RGB Çü±¤¹°Áú¿¡ ¾Ë¸Â°Ô ºñÃçÁüÀ¸·Î½á ¿ì¸®°¡ ¿øÇÏ´Â ¸ðµç »öÀ» ¾ò´Â °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ¿øÇÒ ¶§´Â ºûÀÇ 3¿ø»öÀ» ¾Ë¸Â°Ô ½á¼­ ÀüÀÚÃÑÀ» ¹ß»çÇÏÁö¿ä. ±×·±µ¥, ¹Ù·Î ¿©±â¼­ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ±¸ÇöÇÒ ¶§ °ú¿¬ ³ë¶ûÀº RGB ¸¦ °¢°¢ ¾î¶² ³óµµ·Î ¼¯¾î¾ß Çϴ°¡? º¸¶ó/ÀÚÁÖ»öÀº ¾î¶°ÇÑ°¡¸¦ ÀúÀåÇÏ°í Àִ ǥ°¡ ÇÊ¿äÇѵ¥¿ä, ¹Ù·Î ±×°ÍÀÌ Ä÷¯¸ÊÀÔ´Ï´Ù.

¼­¹ö´Â Àΰ£ÀÌ ¾Æ´Ï¶ó ±â°èÀ̱⠶§¹®¿¡ ¿ì¸®°¡ yellow¶ó°í ¸»ÇÏ¸é ¾î¶² °ÍÀÎÁö ÀüÇô ¾Ë ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. ´ÜÁö ÀڱⰡ °¡Áö°í ÀÖ´Â Ä÷¯¸Ê¿¡¼­ yellow¿¡ ÇØ´çµÇ´Â °ÍÀ» ã¾Æ¼­ ¸ð´ÏÅÍ¿¡°Ô Àû´çÇÑ ¾çÀÇ RGB Á¶ÇÕÀ» Àü´ÞÇÒ »ÓÀÔ´Ï´Ù. ¾î¶»½À´Ï±î? Ä÷¯¸ÊÀ̶ó´Â °ÍÀÌ Á¤¸» Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°í ÀÖÁö¿ä? ÀÌ°ÍÀÌ ¾û¸ÁÀÌ µÇ¸é ¾î¶»°Ô µÉ±î¿ä? ÄÄÇ»ÅÍ°¡ Á¤½Å¸øÂ÷¸®°í ³ë¶ûÀ» ¿øÇÒ ¶§ ºÐÈ«À» Ç¥½ÃÇÒ Áöµµ ¸ð¸¨´Ï´Ù.

¼­¹ö´Â ±âº»ÀûÀÎ Ä÷¯¸ÊÀ» °¡Áö°í ÀÖ½À´Ï´Ù.

¿øÇÏ´Â »öÀ» ¼±ÅÃÇϱâ À§ÇØ °ÅÄ¡´Â °úÁ¤

¾ÕÀ¸·Î »ö»óÀ» ÀÌ¿ëÇÏ´Â ¾î¶² ÀÛ¾÷µµ ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

  1. ±âº» Ä÷¯¸Ê(Default ColorMap)ÀÇ ID¸¦ ¾Ë¾Æ³½´Ù.
  2. À§ ±âº» Ä÷¯¸ÊÀ¸·ÎºÎÅÍ ¿øÇÏ´Â »öÀÇ Çȼ¿°ª(Pixel Value)¸¦ ¾Ë¾Æ³½´Ù.

 #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 ¸â¹ö°ªÀ» Àо½Ã¸é µË´Ï´Ù.

±×·±µ¥, »ö»ó ÇϳªÀÇ Çȼ¿°ªÀ» ¾Ë±â À§Çؼ­ Ç×»ó ÀÌ·¸°Ô ¸¹Àº °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Ù´Ï, Á» ³Ê¹«ÇÑ °Í °°ÁÒ? ±×·¸´Ù¸é, ¿©·¯ºÐ²²¼­ »ö»óÀ̸§À» Àü´ÞÇØÁÖ¸é, ±× »ö»ó¿¡ °üÇÑ Çȼ¿°ªÀ» ¹ÝȯÇØÁÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ½Ã¸é µÉ °Ì´Ï´Ù. ²À ÇÑ ¹ø ¸¸µé¾îº¸¼¼¿ä. Ã¥À» °¡Áö°í °è½Å ºÐµéÀº ¾Æ½Ç Áöµµ ¸ð¸£°Ú³×¿ä. :)

2.8 ¸¸µé¾î ³õÀº â °¡Áö°í ³î±â

¿À´ÃÀº ¿ì¸®°¡ ÀÌ¹Ì ¸¸µé¾î ³õÀº âµé¿¡ ´ëÇؼ­ À̸®Àú¸® ¸¶À½²¯ ³î¾Æº¸°Ú½À´Ï´Ù. âÀÇ »ö±òÀ» ¹Ù²Û´ÙµçÁö, âÀÇ Å©±â¸¦ ¹Ù²Û´ÙµçÁö, ¾ø¾Ý´Ù°¡ ´Ù½Ã ³ªÅ¸³ª°Ô ÇÑ´ÙµçÁö ... ¹¹ ÀÌ·± ³îÀ̸¦ ÇÏ·Á°í ÇÕ´Ï´Ù.

ÀÌ¹Ì ¸¸µé¾î ³õÀº â »ö±ò ¹Ù²Ù±â

À쫆 ̢À» ¸¸µå½Ç ¶§ ¹è°æ»ö°ú Å׵θ®»öÀ» °áÁ¤Çسõ±â´Â ÇßÁö¸¸, »ç¶÷À̶õ°Ô ¸¶À½ÀÌ ´Þ¶óÁú ¶§µµ ÀÖ´Â °Í ¾Æ´Ï°Ú¾î¿ä? ÀÚ, ÀÌ¹Ì Ç¥½ÃµÇ¾î Àִ âÀ» ±×´ë·Î ³öµÐ ä »ö±ò¸¸ ÇÑ ¹ø ¹Ù²Ù¾î º¾½Ã´Ù. ¿©·¯ºÐÀÌ ¸¶À½¿¡ µå´Â »öÀ» °ñ¶óº¸¼¼¿ä. ¹Ù·Î Àü ½Ã°£¿¡ ¸»¾¸µå¸° »ö»ó Á¤º¸ ¾Ë¾Æ³»±â´Â ±â¾ïÇÏ°í °è½ÃÁÒ?

  1. Å׵θ®(Border)»ö º¯È­
       XSetWindowBorder ( Display *d, Window w, unsigned long border_pixel );
    
  2. ¹è°æ(Background)»ö º¯È­
     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¸¦ ¹Ù²Ù¾î º¾½Ã´Ù.

âÀÇ 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 À©µµ¿ì ÇÁ·Î±×·¡¹Ö º° °Í ¾Æ´Õ´Ï´Ù. âÀ» °¡Áö°í ³ë´Â Àå³­À̶ó°í³ª ÇÒ±î¿ä?


Previous Next Table of Contents