· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/X-Window-Programming-KLDP

You are not allowed to 'Keywords'


X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤

X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤

À̸¸¿ë, geoman@nownuri.net

1996³â 3¿ù 19ÀÏ

1. ½ÃÀÛÇϸ鼭

¸®´ª¼­µéÀº ´ÜÁö ±â¼ºÁ¦Ç°À» »ç¿ëÇϴµ¥ ¸¸Á·ÇÏÁö ¾Ê°í, ¶â¾î°íÄ¡°í âÁ¶ÇÏ´Â ÀÏÀ» ÁÁ¾ÆÇÏ´Â ±²ÀåÇÑ À¯ÀúµéÀÔ´Ï´Ù. ¸®´ª½º Ä¿³Î¹öÀü°ú ½½·¢¹öÀü ¸¸Å­ »¡¸® º¯ÇÏ´Â ¿î¿µÃ¼Á¦ ¼ÒÇÁÆ®¿þ¾î°¡ ¾îµð ÀÖ°Ú½À´Ï±î? ¶Ç À̸¸Å­ ¿î¿µÃ¼Á¦ÀÇ "±âº»±â"¿¡ Ãæ½ÇÇÑ Ã¼Á¦°¡ ¾îµð ÀÖ°Ú½À´Ï±î? ±×·¡¼­ ¿ì¸® ¸®´ª¼­µéÀº ¾î¶² À¯Àúµéº¸´Ùµµ ÀںνÉÀÌ ´ë´ÜÇÕ´Ï´Ù.

¸®´ª½º¿©, ¸¸¼¼ ¸¸¼¼ ¸¸¸¸¼¼!

¸®´ª½º¸¦ »ç¿ëÇϸ鼭 ÄÄÆÄÀÏÀ» ¾ÈÇغ¸½Å ºÐÀ̶ó¸é ¾ÆÁ÷ ¸®´ª½ºÀÇ Áø°¡¸¦ ¸Àº¸Áö ¸øÇϽŠºÐÀ̶ó°í ÇÒ ¼ö ÀÖÁö¿ä. ¸®´ª½º¸¦ »ç¿ëÇϸ鼭 Àڱ⠽º½º·Î ÇÁ·Î±×·¥À» Â¥º¸Áö ¸øÇϽŠºÐµéÀº ¸®´ª½ºÀÇ ÁøÂ¥ ÁøÂ¥ Áø°¡¸¦ ¸Àº¸Áö ¸øÇÏ´Â ºÐÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌÁ¦ºÎÅÍ´Â ¸®´ª½ºÀÇ Âü¸ÀÀ» ¸¸³£Çغ¼±î ÇÕ´Ï´Ù.

1.1 °­ÀÇÀÇ ´ë»ó

Á¦¸ñ¿¡¼­µµ ºÐ¸íÇÏ°Ô ³ªÅ¸³ª´Â °Íó·³, Á¦°¡ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ëÀº ÇÁ·Î±×·¡¹Ö ÀϹݿ¡ °üÇÑ °ÍÀÌ ¾Æ´Õ´Ï´Ù. ±×°ÍÀº Á¦°¡ ´Ù·ê ¼ö ÀÖ´Â Çѵµ¸¦ ¹þ¾î³³´Ï´Ù. ÀÌ °­Á¸¦ ÀаíÀÚ ÇϽô ºÐµéÀº ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°Àº »çÇ׿¡ ¸ðµÎ ÇØ´çµÇ½Ã´Â ºÐµéÀÌ¼Å¾ß ¿øÇÒÇÑ ÇнÀÀÌ ÀÌ·ç¾îÁú °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù.

  • ±âº»ÀûÀÎ C ÇÁ·Î±×·¡¹ÖÀ» ÇÏ½Ç ¼ö ÀÖ´Â ºÐ
  • SHELL ½ºÅ©¸³Æ®¿¡ ´ëÇØ ¾Æ½Ã´Â ºÐ
  • À¯´Ð½º °è¿­ÀÇ ÇÁ·Î¼¼½º/È­ÀÏó¸®/½Ã±×³Î µîÀÇ °³³äÀ» ¾Æ½Ã´Â ºÐ

Á» »ç¾çÀÌ ³ôÁÒ? ±×·¡¼­ ±× µ¿¾È ¸Á¼³ÀÌ°Ô µÇ¾ú½À´Ï´Ù. ¿ì¼±Àº ¸®´ª½º ´ëÁßÈ­¿¡ ±â¿©ÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀÎ °Íµé¿¡ ´ëÇؼ­¸¸ °­ÀǸ¦ ÁøÇàÇÒ±î? ÇÏ´Â »ý°¢µµ ¼ö¾øÀÌ ¸¹ÀÌ Çغ¸¾Ò½À´Ï´Ù. ±×·¯³ª ¸®´ª½ºµ¿ÀÇ ¸¹Àº ºÐµé²²¼­µµ ¾çÀûº¯È­ »Ó ¾Æ´Ï¶ó ÀÌÁ¨ ÁúÀûº¯È­¸¦ ¼­¼­È÷ Ãß±¸ÇØ¾ß ÇÑ´Ù´Â ¹®Á¦ÀǽÄÀ» °¡Áö½Å °Í °°¾Æ¼­ ¿ë±â¸¦ ³»¾î Çغ¾´Ï´Ù.

1.2 ´ë·«ÀûÀÎ °­ÀÇ ³»¿ë ¼Ò°³

ÀçÂ÷ ¸»¾¸µå¸®Áö¸¸ °­Àdz»¿ëÀº ¸®´ª½º ÇÁ·Î±×·¡¹Ö ÀϹݿ¡ ´ëÇÏ¿© ´Ù·çÁö ¾Ê½À´Ï´Ù. Àú´Â X À©µµ¿ì ½Ã½ºÅÛÀÇ GUI ÀÚ¿øÀ» ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ ÀÌ¿ëÇϴµ¥ ´ëÇÏ¿©, Áï X À©µµ¿ì¿ë ÇÁ·Î±×·¥ÀÇ "ÀÎÅÍÆäÀ̽º"¿¡ °üÇÑ ³»¿ë¸¸ ´Ù·ç°íÀÚ ÇÕ´Ï´Ù.

  • X ³»¿¡¼­ âÀÇ »ý¼º°ú ¼Ò¸ê, °ü¸®
  • X ±×·¡ÇÈ
  • X Event ó¸®Çϱâ
  • Å°º¸µå/¸¶¿ì½º µîÀÇ ÀÔ·Â
  • ±âŸ µîµî

MS À©µµ¿ìÁî °°Àº GUI üÁ¦¿¡¼­ÀÇ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀº ¾Æ½Ç°Ì´Ï´Ù. °ÅÀÇ ½ÃÁß¿¡ ÀÖ´Â ´ëºÎºÐÀÇ Ã¥µéÀÌ ÀÌ·¯ÇÑ ³»¿ëÀ» ´Ù·ç°í ÀÖÁö¿ä. À§ ³»¿ë¸¸ ÀÍÈ÷½Å´Ù°í Çؼ­ ¿ÏÀüÇÑ ÀǹÌÀÇ X À©µµ¿ì¿ë ÇÁ·Î±×·¥À» ¸¸µå½Ç ¼ö´Â ¾øÀ» °Ì´Ï´Ù. ÇÏÁö¸¸ À§ÀÇ ³»¿ëÀ» ¸ð¸£½Å´Ù¸é X À©µµ¿ì¿ë ÇÁ·Î±×·¥Àº Àý´ë·Î ¸¸µå½Ç ¼ö ¾ø½À´Ï´Ù. ±× Á¤µµ·Î ¾ÆÁÖ ±âÃÊÀûÀÎ ³»¿ë¸¸À» ´ã°í ÀÖ½À´Ï´Ù. ´õ¿í ½Éµµ±íÀº X À©µµ¿ì ÇÁ·Î±×·¡¹Ö °­Á´ À̹ø ±âÃÊ °­Á°¡ ³¡³­ ÈÄ¿¡¾ß °¡´ÉÇÒ °Í °°½À´Ï´Ù. ( ±× À¯¸íÇÑ À§Á¬ °°Àº °Í µîµî )

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¶ó´Â ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ¸¹Àº È­ÀϵéÀÌ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀÌ ³à¼®µé '¶óÀ̺귯¸®'´Â ¿ì¸®¸¦ Ç×»ó µµ¿ÍÁÖ´Â ³ðµéÀÔ´Ï´Ù. À̵éÀÌ ¾øÀ¸¸é ¾Æ¹« °Íµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ³à¼®µéÀ» ¿©·¯ºÐ²² ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù.

  • libX11 : À̸§¿¡µµ µå·¯³ªµíÀÌ °¡Àå ±âº»ÀûÀÎ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ¸ðµç Ä£±¸µéÀº ÀÌ Ä£±¸ ¾øÀÌ´Â ¹«¿ëÁö¹°ÀÔ´Ï´Ù. °¡Àå Áß¿äÇÑ, ±×¸®°í °¡Àå º»ÁúÀûÀÎ X ÀÇ ±â´ÉÀ» ½ÇÇöÇØÁÖ´Â Xlib ÀÔ´Ï´Ù.
  • libXt : X ÅøŶ(X Toolkit Intrinsic)À̶ó°í ºÎ¸¨´Ï´Ù. Xlib À§¿¡¼­ ±¸ÇöµÇ¾î ÀÖ´Â ¾ÆÁÖ À¯¿ëÇÑ ·çƾµéÀÔ´Ï´Ù. ³ªÁß¿¡ À§Á¬À̶ó°í ÇÏ´Â X ÀÎÅÍÆäÀ̽º¿¡¼­ ¾ÆÁÖ Áß¿äÇÑ ³ðµéÀ» ´Ù·ê ¶§ ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀ» ÀÚÀ¯ÀÚÀç·Î »ç¿ëÇÏ½Ç ¼ö ÀÖ´Â ¼öÁØÀÌ µÇ½Ã¸é X ÇÁ·Î±×·¡¹ÖÀº ³¡³­ °Å³ª ´Ù¸§¾øÁÒ.
  • libXaw : Athena Widget ÀÔ´Ï´Ù. ¾Õ±ÛÀÚ¸¦ µû¼­ aw ÀÔ´Ï´Ù. Áö±Ý ÇöÀç´Â °ÅÀÇ »ó¿ë ¸ðƼÇÁ(Motif)¸¸ÀÌ »ç¿ëµÇ¾î °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â °Í °°½À´Ï´Ù. ÇÏÁö¸¸ X¸¦ °³¹ßÇÑ MIT°¡ ¸¸µç °ÍÀ¸·Î¼­ Free À̹ǷÎ, Àú´Â ¿©·¯ºÐ°ú ¹ÌÈíÇϳª¸¶ ÀÌ Ä£±¸¸¦ °¡Áö°í ¿¹»Û ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î º¼±îÇÕ´Ï´Ù. ¸ðƼÇÁ¿¡ °üÇÑ °ÍÀº ¼­Á¡¿¡ Ã¥ÀÌ ¿ÂÅë ±ò·Á ÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. ¾îÂî µÇ¾úµç ¾Ë¾ÆµÎ½Ã¸é, ¸ðƼÇÁµµ ±Ý¹æ »ç¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ¿äÁò libXaw3d°¡ ³ª¿ÍÀִµ¥, ¿øÆÇ libXaw°¡ ¿ö³« ÃʶóÇؼ­ ÇÑ°è°¡ ÀÖ±â´Â ÇÏÁö¸¸, Á¦ °³ÀÎÀûÀÎ °ßÇØ´Â ±×·¡µµ ¼³Ä¡ÇϽô °ÍÀÌ ´õ ÁÁ´ÙÀÔ´Ï´Ù. ¼¼¿¬À̳ª °í½ºÆ®½ºÅ©¸³Æ®ÀÇ ¹öÆ°ÀÌ ¾à°£ 3Â÷¿øÀûÀ¸·Î, ±×¸®°í ¸ðƼÇÁ ³¿»õ¸¦ dz±â´õ±º¿ä.
  • libXmu : Miscellaneous UtilitiesÀÇ ¾Õ±ÛÀڵ鸸 µû¼­ mu ÀÔ´Ï´Ù. ±âŸ µîµîÀÇ ±â´ÉÀ» ±¸ÇöÇØÁÖ´Â ³à¼®ÀÌÁö¸¸, ¾ø¾î¼­´Â ¾ÈµÉ ³à¼®ÀÔ´Ï´Ù. ±× ±âŸ µîµîÀ̶ó°í ÇÏ´Â °ÍÀÌ Çϵµ ¸¹ÀÌ ¾²¿©¼­...
  • libXpm : È®ÀåÀÚ°¡ xpmÀÎ È­ÀÏµé º¸½Å Àû ÀÖÀ¸½ÃÁÒ? Ä÷¯ ºñÆ®¸Ê È­ÀÏ Áö¿ø µîÀÇ ±×·¡ÇÈ Áö¿ø ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ¾È Áß¿äÇÒ ¸®°¡ ÀÖÀ»±î¿ä?

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

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

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

°ú¿¬ ³ª´Â ¾î¶² ¼­¹ö¸¦ ¼±ÅÃÇÒ °ÍÀΰ¡? ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÕ´Ï´Ù. º¸Åë µµ½º, À©µµ¿ìÁî ȯ°æ¿¡ Àͼ÷ÇϽŠºÐµéÀº Á» »ý¼ÒÇÑ °³³äÀÌÁö¿ä. ÇÏÁö¸¸ ¿äÁòÀº ÀÎÅͳÝÀ» ¸¹ÀÌ ÇϽñ⠶§¹®¿¡ ÀÌÇØÇϽñ⠾î·ÆÁö´Â ¾ÊÀ» °Ì´Ï´Ù. ¸®´ª½º X À©µµ¿ì ȯ°æ¿¡¼­´Â ¾ÆÁÖ °£´ÜÇÑ ¹®Àåµé·Î ¿©·¯ºÐ ¿·¿¡ ÀÖ´Â ÄÄÇ»ÅÍ ¸»°íµµ ¼¼»ó ÀúÆí¿¡ ÀÖ´Â ÄÄÇ»ÅÍÀÇ ¸ð´ÏÅÍ¿¡´Ù ÇϳªÀÇ Ã¢À» ¶ç¿ì´Â ÀÏ Á¤µµ´Â ³Ê¹«µµ ½±°Ô ÇÒ ¼ö Àְŵç¿ä.

vi, emacs¿Í °°Àº ¿¡µðÅ͸¦ ÀÌ¿ëÇؼ­ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ µé¾î ÀÖ´Â È­ÀÏÀ» Çϳª ¸¸µé¾î º¸¼¼¿ä.

  • ¿¹Á¦ 1
 #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 °£´ÜÇÑ Ã¢ Çϳª ¸¸µé¾î º¾½Ã´Ù.

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

  • ¿¹Á¦ 2
 #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 ⠾ȿ¡ ¶Ç âÀ» ¸¸µé¾î º¾½Ã´Ù.

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

  • ¿¹Á¦ 3
 #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)¸¦ ¾Ë¾Æ³½´Ù.

  • ¿¹Á¦ 4
 #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 Áï Å©±â º¯È­½ÃÅ°´Â ÇÔ¼ö·Î¼­ ÁÖ¾îÁø Æø&³ôÀÌ °ª¿¡ µû¶ó Å©±â¸¦ º¯È­½Ãŵ´Ï´Ù. ¼¼¹ø°´Â ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö ¼³¸íÇصå·Á¾ß Çϳª¿ä? ³×, ¸Â½À´Ï´Ù. Å׵θ® ÆøÀ» º¯È­½Ãŵ´Ï´Ù.

¿À´ÃÀÇ ¸ðµç ³»¿ëÀ» ´ã°í ÀÖ´Â ¿¹Á¦¸¦ Àû¾îµå¸®°í ¿À´Ã °­ÀǸ¦ ¸¶Ä¥±î ÇÕ´Ï´Ù. ÇÑ ¹ø ¿©·¯ºÐµé²²¼­ ºÐ¼®Çغ¸¼¼¿ä.

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

3. È޽İ­ÀÇ : ¸®¼Ò½º(Resource)

À̹ø¿¡´Â Xlib ÇÁ·Î±×·¡¹ÖÀ» ¶°³ª¼­ Àá½Ã ±âºÐÀüȯÀ» ÇÒ±î ÇÕ´Ï´Ù. °è¼Ó ¶È°°Àº ÆÐÅÏÀÇ ÇÁ·Î±×·¡¹Ö °øºÎ¸¦ ÇÏ´Ùº¸¸é ÁöÄ¡ÁÒ? ±×·¡¼­ Àç¹ÌÀÖ´Â ÀÏ ÇÑ °¡Áö¸¦ ¿À´Ã Çغ¸·Á°í ÇÕ´Ï´Ù.

XÀ©µµ´Â »ç¿ëÀÚ¿¡°Ô ¹«ÇÑÇÑ ÀÚÀ¯¸¦ ÁÖ´Â ½Ã½ºÅÛÀÔ´Ï´Ù. À©µµ 3.1¿Í À© 95¸¸ ¾²°í »ì¾Æ¿Â ¿ì¸®µé¿¡°Ô´Â óÀ½¿¡ »ó´çÈ÷ °Ì¸Ô°Ô ÇÏÁö¸¸, ¾Ë¾Æ°¡¸é ¾Ë¾Æ °¥¼ö·Ï ÀÌÇØÇϱⰡ ±×·¸°Ô ¾î·Á¿î °ÍÀº ¾Æ´Ï¸ç, ÇÑ ¹ø ¾Ë°í ³ª¸é À̰͸¸Å­ Æí¸®ÇÑ °ÍÀÌ ¾ø½À´Ï´Ù. ÄÄÇ»Å͸¦ »ç¿ëÇÑ´Ù´Â °ÍÀÌ ´Ü¼ø¹Ýº¹ ÀÛ¾÷À» ½Ç¼ö¾øÀÌ ºü¸£°Ô Çس½´Ù´Â ±âº» ÃëÁöµµ ÀÖÁö¸¸, Ä÷¯ µð½ºÇ÷¹ÀÌÀÇ °³¹ß µîÀ¸·ÎºÎÅÍ ½ÃÀÛµÈ ÄÄÇ»ÅÍÀÇ ¸ÖƼ¹Ìµð¾îÈ­´Â ½Ã°¢Àû À̹ÌÁö¿¡ ´ëÇÑ ¸¹Àº °ü½ÉÀ» °¡Áö°Ô ÇØ¿Ô½À´Ï´Ù. ƯÈ÷ ÄÄÇ»ÅÍ ±×·¡ÇÈ ºÐ¾ß´Â Çö´ë¿¡ ¾ø¾î¼­´Â ¾ÈµÉ Áß¿äÇÑ ÄÄÇ»ÅÍ È°¿ë ºÐ¾ßÀÌÁö¿ä.

X À©µµ´Â Çϳª·Î Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º Á¦ÇÑ»çÇ× °°Àº °ÍÀÌ ¾ø½À´Ï´Ù. ¿©·¯ºÐÀÇ fvwm À©µµ°ü¸®ÀÚ¸¦ ´Ù¸¥ À©µµ°ü¸®ÀÚ·Î ¹Ù²Ù¾îÁֱ⸸ ÇÏ¸é ¾ÆÁÖ »ö´Ù¸¥ ºÐÀ§±â¸¦ ´À³¥ ¼ö ÀÖ½À´Ï´Ù. ´Ù¾ç¼º°ú ÇÔ²² ºÐÀ§±â´Â ´Þ¸® Çϸ鼭µµ ¸ðµç ±â´ÉÀº º¯ÇÔ¾ø´Â ÀÏ°ü¼ºµµ °¡Áö°í ÀÖ´Â °ÍÀÌ X À©µµÀÔ´Ï´Ù.

½ÃÀÛÇÏ´Â ¸»ÀÌ Á» ±æ¾úÁÒ? ¿À´Ã ¿ì¸®´Â ÀÚ¿ø(Resource)À̶ó°í ÇÏ´Â X À©µµÀÇ Áß¿ä ÇÑ °³³ä¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸°í, ¸î °¡Áö Àç¹ÌÀÖ´Â ½Ç½ÀÀ» Çغ¼±î ÇÕ´Ï´Ù. ¿À´Ã ½Ç½ÀÀ» ÅëÇØ ¿©·¯ºÐÀº X ÇÁ·Î±×·¥À» ¿©·¯ºÐÀÇ ÃëÇâ¿¡ ¸Âµµ·Ï º¯È­½ÃÅ°´Â Áñ°Å¿òÀ» ´©¸®½Ç ¼ö ÀÖ½À´Ï´Ù. ±×·³, ½ÃÀÛÇغ¸µµ·Ï ÇÏÁÒ.

3.1 ¸®¼Ò½º(Resource)¶õ ¹«¾ùÀΰ¡?

¾Õ¼­µµ °£·«ÇÏ°Ô ¼³¸íµå·ÈÁö¸¸, ´Ù½Ã±Ý ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù. ¸®¼Ò½º¶ó´Â °³³äÀº X À©µµ ½Ã½ºÅÛ¿¡¼­ ¸î °¡Áö ´Ù¸¥ Àǹ̷Π»ç¿ëµÇ°í ÀÖ½À´Ï´Ù.

ù¹ø°·Î X Server Resource¶ó´Â °³³äÀε¥, ¿ì¸®°¡ Áö±Ý ÇÏ°í ÀÖ´Â Xlib ÇÁ·Î±×·¡¹Ö¿¡¼­µµ ³ª¿ÔµíÀÌ, ¼­¹ö°¡ °ü¸®ÇÏ´Â ´ë»óÀ¸·Î¼­ÀÇ Ã¢(window), ÆùÆ®(font), »ö»ó(color), ±×·¡ÇÈ ÄÁÅؽºÆ®(GC) µîÀÌ ¹Ù·Î ±×°ÍµéÀÔ´Ï´Ù. Àü¼úÇÑ ¹Ù¿Í °°ÀÌ Å¬¶óÀ̾ðÆ®´Â ´ÜÁö ¸®¼Ò½º ID ¸¸À» °¡Áö°í À̸®Àú¸® ¼­¹ö¿¡°Ô ¿øÇÏ´Â ¼­ºñ½º¸¦ ¿äûÇÒ »Ó ÀÔ´Ï´Ù.

µÎ¹ø°·Î Xlib º¸´Ù ÇÑ ´Ü°è »óÀ§ÀÇ Xt(X Toolkit) ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ³ª¿À´Â ³»¿ëÀ¸·Î¼­ »ç¿ëÀÚ°¡ À̸®Àú¸® ¼ÂÆÃÀ» ÇÒ ¼ö ÀÖ´Â À§Á¬(Widget)ÀÇ ¼Ó¼ºÀ̶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. À§Á¬¿¡ °ü·ÃµÈ »ö»ó, ÆùÆ®, À§Ä¡, ¸ð¾ç µîÀÌ ±×°ÍÀÔ´Ï´Ù. Xlib ÇÁ·Î±×·¡¹ÖÀ» ¾î´À Á¤µµ ³¡³½ ÈÄ Athena À§Á¬ SetÀ» °¡Áö°í Xt ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ º»°ÝÀûÀ¸·Î ´Ù·ç°Ô µÉ ³»¿ëÀÌÁö¸¸, ¹Ì¸® ¼±º¸ÀÌ°íÀÚ ÇÕ´Ï´Ù.

X ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á¸é ¿ì¼± °ÅÀÇ ¸ðµç X À¯Æ¿¸®Æ¼ÀÇ ÀÇ¹Ì¿Í »ç¿ë¹ý, ±×¸®°í ¹Ù·Î ÀÌ ¸®¼Ò½º¿¡ ´ëÇÑ ¿¬½ÀÀ» ¸¹ÀÌ Çصξî¾ß ÇÕ´Ï´Ù.

3.2 ¸®¼Ò½º Name°ú Class

¿¹¸¦ µé¾î°¡¸ç ¼³¸íÇÏ´Â °ÍÀÌ ÁÁ°Ú±º¿ä. ¿©·¯ºÐÀÌ ÇöÀç X À©µµ¿¡¼­ ÀÌ ±ÛÀ» ÀÐ°í °è½Å´Ù°í °¡Á¤ÇÏ°Ú½À´Ï´Ù. ÀÚ, ¸í·ÉÇàÀ̵ç fvwm ¹öÆ°¹Ù¿¡¼­µç °£¿¡ Seyon À̶ó´Â Åë½Å ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸¼¼¿ä. ÇϳªÀÇ Å͹̳ΠâÀÌ ¶ß°í, ¶Ç Çϳª ÀÛÀº âÀÌ ¶å´Ï´Ù. ±× ÀÛÀº âÀÇ Á¦¸ñÀº "Seyon Command Center"ÀÔ´Ï´Ù. ¿©±â¼­ ´ÙÀÌ¾ó¸µ µîÀÇ ¿©·¯ °¡Áö ¼¼¿¬ °ü·Ã ¸í·ÉÀ» ³»¸®´Â »ç·ÉºÎÀÇ ¿ªÇÒÀ» Çس¾ ¼ö ÀÖ½À´Ï´Ù. Àß ¾Æ½Ã´Â »çÇ×ÀÏ °Ì´Ï´Ù.

ÅؽºÆ® ¹®¼­ÀÌ´Ù º¸´Ï ¼³¸íÇϱⰡ Á» Èûµé±â´Â ÇÏÁö¸¸ µÇ´Â ¸¸Å­ Çغ¸ÁÒ. ¿ì¼± ¼¼¿¬ »ç·ÉºÎ¸¦ ÀÚ¼¼È÷ º¸½Ã¸é ÀüüÀûÀ¸·Î 4°³ÀÇ ¿µ¿ªÀ¸·Î µÇ¾î ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­ºÎÅÍ Ã¹¹ø° ¿µ¿ªÀº DTR, DSR, RTS, CTS, RNG µî ¸ðµ© °ü·Ã »óȲÀ» º¸¿©ÁÖ´Â »óȲâÀÔ´Ï´Ù. µÎ¹ø° ¿µ¿ªÀº ¼¼¿¬ ÇÁ·Î±×·¥ÀÌ »ç¿ëÀÚ¿¡°Ô º¸³»´Â ¸Þ¼¼Áö¸¦ º¸¿©Áִ âÀÔ´Ï´Ù. ¼¼¹ø° ¿µ¿ªÀº »ç¿ëÀÚ Á¤ÀÇ ¹öÆ°µéÀÌ º¸¿©Áö´Â ¿µ¿ª ÀÔ´Ï´Ù. Athena ¹¹ ÀÌ·± ¹®ÀÚ¿­µéÀÌ º¸ÀÌ´Â ÇÑ ÁÙÀ» ¸»ÇÕ´Ï´Ù. ±× ´ÙÀ½ ¸¶Áö¸·À¸·Î About, Help, Set, Dial µîÀÇ ¹öÆ°µéÀÌ ¹è¿­µÇ¾î ÀÖ´Â Á¦ÀÏ Å« »ç°¢Çü ¿µ¿ªÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀúÇÑÅ׸¸ º¸À̳ª¿ä? »ç½Ç µÎ¹ø°¸¸ Á¦¿ÜÇÏ°í °°Àº »ö»óÀ¸·Î Ä¥ÇØÁ® ÀÖÀ¸´Ï ¾ð¶æ ÆľÇÇϱⰡ ½±Áö´Â ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ ¾ÕÀ¸·Î ºÐ¸íÇØÁú °Ì´Ï´Ù.

¿©±â¼­ ÀÛÀº ¹öÆ°µéÀ» ¿ÀºêÁ§Æ®, °´Ã¼(Object)¶ó°í ºÎ¸¨´Ï´Ù. Xt ÇÁ·Î±×·¡¹ÖÀ» ÇÏ½Ç ÁÙ ¾Æ½Ã´Â ºÐµéÀº ±Ý¹æ ÀÌÇØÇϽðÚÁÒ? ¸ð¸£½Ã´õ¶óµµ ÀÏ´Ü ÀúÀÇ ¼³¸íÀ» ³¡±îÁö µé¾îÁֽŴٸé ÀÌÇØÇϱ⠾î·ÆÁö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù. ³× ¹ø° ¿µ¿ªÀÇ Ã¹¹ø° About À̶ó°í ¾º¿©Á® ÀÖ´Â ¹öÆ° °´Ã¼¸¦ ÇÑ ¹ø »ìÆì º¸ÁÒ. ÀÌ·¯ÇÑ ¸ðµç °´Ã¼´Â ¼¼¿¬À̶ó´Â ÇÁ·Î±×·¥À» Muhammad¶ó´Â »ç¶÷ÀÌ ¸¸µé ¶§, °íÀ¯ÇÑ À̸§À» ÁÖ°Ô µË´Ï´Ù. ÀÌ AboutÀ̶ó°í ¾º¿©Á® ÀÖ´Â ¹öÆ°Àº ÇÁ·Î±×·¥ »ó¿¡¼­ aboutÀ̶ó´Â À̸§(Name)À» °¡Áö°í ÀÖ½À´Ï´Ù. ´ÙÀ½À¸·Î Help ¹öÆ°Àº help¶ó´Â À̸§À», Set ¹öÆ°Àº setÀ̶ó´Â À̸§À», µîµî Çؼ­ Shell ¹öÆ°Àº shellCommand¶ó´Â À̸§À» °¡Áö°í ÀÖ½À´Ï´Ù. ¹¹ À̸§Àº Á¤È®ÇÑ ±ÔÄ¢ÀÌ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó Muhammad¾¾ ¸¶À½´ë·Î Áö¾îÁØ °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ¹öÆ° °´Ã¼ÀÇ À̸§(Name)ÀÔ´Ï´Ù.

±×·±µ¥, ÀÚ¼¼È÷ º¼ ÇÊ¿äµµ ¾øÀÌ ±× ¹öÆ°µéÀº ±× À§¿¡ ¾º¿©ÀÖ´Â ±ÛÀÚ¸¸ ´Ù¸£°í, À§¿¡¼­ »ìÆ캸¾ÒµíÀÌ À̸§¸¸ ´Ù¸£Áö, º»ÁúÀûÀ¸·Î °°Àº ºÎ·ù¿¡ ¼ÓÇÑ ³à¼®µéÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸»Àº À¯½ÄÇÏ°Ô ±× ¹öÆ°µé ¸ðµÎ ÇϳªÀÇ Class¿¡ ¼ÓÇÑ´Ù°í ¸»ÇÕ´Ï´Ù. ¿ä ¹öÆ°µéÀÌ ¸ðµÎ ¼ÓÇÑ Class´Â Athena À§Á¬ set Áß¿¡¼­ Command À§Á¬¿¡ ÇØ´çÇÕ´Ï´Ù. Command¶ó°í ÇÏ´Â °ÍÀÌ ÀÌ ClassÀÇ À̸§ÀÔ´Ï´Ù.

Çò°¥¸®ÁÒ? ¼¼»ó ¸ðµç °Í¿¡´Â À̸§ÀÌ Àֱ⠸¶·ÃÀε¥... ¾ÕÀ¸·Î ±×³É À̸§ ¶Ç´Â °´Ã¼ À̸§À̶ó°í ÇÏ´Â °ÍÀº ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ ºÙ¿©Áö´Â °³º°ÀûÀÎ À̸§(Name)À» ¶æÇÕ´Ï´Ù. ±× ´ÙÀ½À¸·Î Class ¶Ç´Â Ŭ·¡½º ¸íÀº ±× Ŭ·¡½º Àüü¸¦ ºÎ¸£´Â ´ëÇ¥ÀûÀÎ À̸§ÀÔ´Ï´Ù. ¿ö³« Çò°¥¸®´Â ºÎºÐÀ̶ó X ÇÁ·Î±×·¡¸ÓµéÀº ±×³É À̸§Àº ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÏ°í Ŭ·¡½º ¸íÀº ´ë¹®ÀÚ·Î ½ÃÀÛÇÏ´Â °ü½ÀÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ±ÔÄ¢À» ¹«½ÃÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ¾øÀ» °Ì´Ï´Ù. Àڱ⠸ڴë·Î Çß´Ù°¡´Â X ÇÁ·Î±×·¡¸Ó ¼¼°è¿¡¼­ Ãß¹æ´çÇÏ°í ¸» °Ì´Ï´Ù. :)

3.3 °´Ã¼ÀÇ ¸®¼Ò½º

À§¿¡¼­ »ìÆ캻 ¹öÆ° °´Ã¼´Â ÇÁ·Î±×·¡¸Ó ¶Ç´Â »ç¿ëÀÚ°¡ ÀÚÀ¯·Ó°Ô Á¤ÇØÁÙ ¼ö ÀÖ´Â ¸î °¡Áö ¼Ó¼ºÀ» °®´Âµ¥ ¹Ù·Î ±×°ÍÀ» °´Ã¼ÀÇ ¸®¼Ò½º, ±×³É ÁÙ¿© ¸®¼Ò½º¶ó°í ºÎ¸¨´Ï´Ù. ¾ÕÀ¸·Î ¸®¼Ò½º¶ó°í ÇÏ¸é ¹Ù·Î °´Ã¼ÀÇ ¼ºÁúÀ» ÀǹÌÇÏ´Â ¸®¼Ò½º¸¦ ¸»ÇÕ´Ï´Ù.

¿¹¸¦ µé¾î ¼³¸íÇغ¸ÁÒ. ÀÚ, Áö±Ý ÇöÀç ¿­·Á ÀÖ´Â ¼¼¿¬À» ´ÝÀ¸½Ã°í ÇÑÅÒÀ̳ª X ÅÒ »ó¿¡¼­ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇغ¾½Ã´Ù.

 seyon -modem /dev/modem -xrm "*about.label: ABOUT"

-modem ¿É¼Ç µÚ¿¡ ¿©·¯ºÐÀÇ ¸ðµ©ÀÌ ´Þ¸° Æ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â È­ÀϸíÀ» ½áÁÖ½Ã¸é µÇ°í ±× ´ÙÀ½ Á¦°¡ ¼³¸íµå¸®°íÀÚ ÇÏ´Â Á¤¸»·Î Áß¿äÇÑ ¸í·ÉÇà ¿É¼ÇÀÌ ¿©±â¿¡ ÀÖ±º¿ä.

Áß¿ä! Áß¿ä! Áß¿ä! -xrm ¿É¼Ç

»ç¿ë¹ý: -xrm "¸®¼Ò½º Á¤ÀÇ ¹®ÀÚ¿­"

ÀÚ, ¾î¶»°Ô µÇ¾ú½À´Ï±î? AboutÀ̶ó°í ¾º¿©ÀÖ´ø °ÍÀÌ ABOUT·Î ¹Ù²î¾úÁÒ?

±× ´ÙÀ½¿¡´Â ´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù.

 seyon -modem /dev/modem -xrm "*about.foreground: red"

±ÛÀÚ»öÀÌ ¹Ù²î¾úÁö¿ä?

Commmand À§Á¬ Ŭ·¡½º¿¡ ¼ÓÇØ ÀÖ°í À̸§Àº aboutÀÎ ¹öÆ°ÀÇ ¶óº§(Label)°ú Àü°æ»öÀ» ÇÑ ¹ø ¹Ù²Ù¾îº¸¾Ò½À´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î Çؼ­ ¿ì¸®´Â ¿ì¸® °³¼º´ë·Î ¿øÇÏ´Â ¼¼¿¬ »ç·ÉºÎ¸¦ ¸¸µé¾î ³¾ ¼ö ÀÖ½À´Ï´Ù.

¾à°£ ¾î·Á¿öÁö´Â±º¿ä. ´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù.

 seyon -modem /dev/modem -xrm "*Command.foreground: Turquoise"

°á°ú¸¦ º¸¸é ¸ðµç ¹öÆ°ÀÇ Àü°æ»öÀÌ Turquoise»öÀ¸·Î º¯ÇÑ °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇÏ¸é ±× Å¬·¡½º¿¡ ¼ÓÇÏ´Â ¸ðµç °´Ã¼¿¡ ´ëÇÏ¿© ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù.

-xrm ¿É¼ÇÀ» ÀÌ·± ÀÏÀ» Çس¾ ¼ö ÀÖ´Â ³à¼®ÀÔ´Ï´Ù. "¸®¼Ò½º Á¤ÀÇ ¹®ÀÚ¿­"ÀÇ Çü½Ä¿¡ ´ëÇÏ¿© °£·«ÇÏ°Ô ¾Ë¾Æº¾½Ã´Ù.

 "À̸§.À̸§.À̸§: <¸®¼Ò½º°ª>"

        ¶Ç´Â

 (ApplicationClass|applicationName)*(ResourceClass|resourceName) : value

ÀÌ·¸°Ô ¾Ë¾ÆµÎ¾îµµ ÀÏ´ÜÀº ±¦Âú½À´Ï´Ù.

ÀÚ, ¿©±â¼­ À̸§Àº Ŭ·¡½º¸íÀÏ ¼öµµ ÀÖ°í °´Ã¼ÀÇ Æ¯º°ÇÑ À̸§ÀÌ µÉ ¼öµµ ÀÖ½À´Ï´Ù. ±×¸®°í À̸§À» ÁöÁ¤Çϴµ¥ ÀÖ¾î *³ª ? ¹®ÀÚ¿Í °°Àº ¿ÍÀϵå Ä«µåµµ »ç¿ë°¡´ÉÇÕ´Ï´Ù. À§ÀÇ ¿¹¿¡¼­ Ç×»óÀûÀ¸·Î * ¹®ÀÚ¸¦ »ç¿ëÇØ¿ÔÁö¿ä. À̸§°ú À̸§Àº ¸¶Ä§Ç¥(.)·Î ºÐ¸® ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ À̸§Àº ¸î ´Ü°è°í °è¼ÓµÉ ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­´Â 3°³¸¸ º¸¿´Áö¸¸ ¸î °³°¡ ¸¶Ä§Ç¥·Î ºÐ¸®µÉ Áö´Â ÇÁ·Î±×·¥¸¶´Ù ´Ù¸¨´Ï´Ù.

À§Á¬À̶ó´Â °´Ã¼µé °£¿¡´Â À§°è(hierachy)¶ó°í ÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. Á·º¸¶ó°í º¸¸é ÁÁ½À´Ï´Ù. ¼¼¿¬¿¡¼­´Â ´ÙÀ½°ú °°Àº °ü°è°¡ ¼º¸³ÇÕ´Ï´Ù. ¼¼¿¬ »ç·ÉºÎ´Â À§¿¡¼­ ¼­¼úÇÑ ÀÏÁ¤ ¿µ¿ª, Áï ¹öÆ°µéÀ» Æ÷ÇÔÇÒ ¾î¶² ¿µ¿ªÀ» °®½À´Ï´Ù. ±× ¿µ¿ªÀº ´Ù½Ã ¹öÆ°µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¹öÆ°À» ´©¸£¸é ¶Ç ´Ù¸¥ ¸Þ´º°¡ ¶á´ÙµçÁö ÇÏ´Â °ÍÀ¸·Î º¸¾Æ ¹öÆ°µé °¢°¢µµ ¹«¾ùÀΰ¡¸¦ °è¼Ó Æ÷ÇÔÇÏ°í ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

ÀÌ·¯ÇÑ ¸ðµç °´Ã¼µéÀº ¼¼¿¬À̶ó´Â Àüü ÇÁ·Î±×·¥¿¡ ¼ÓÇØ Àִµ¥, ¼¼¿¬ÀÇ ÇÁ·Î±×·¥ À̸§ÀÌ seyonÀÌ°í, ¼¼¿¬ÀÇ Å¬·¡½º¸íÀº SeyonÀÔ´Ï´Ù. ÀÌ°Ç Muhammad¾¾°¡ X ÇÁ·Î±×·¡¹Ö °ü½À¿¡ µû¶ó ºÙ¿©ÁØ À̸§ÀÔ´Ï´Ù. ¼¼¿¬¿¡ °ü·ÃµÈ ¸ðµç °´Ã¼¸¦ ÁöÁ¤ÇÒ ¶§´Â Ç×»ó "Seyon." ÀÌ·± ½ÄÀ¸·Î ½ÃÀÛÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ·± ½ÄÀ¸·Î ¸ðµÎ ½áÁÖ´Â °æ¿ì´Â µå¹°°í * ¹®ÀÚ µîÀ» ½á¼­ Ç¥ÇöÇÕ´Ï´Ù. *´Â ¸ðµç ¹®ÀÚ¸¦ ´ëÇ¥ÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» ¿°µÎ¿¡ µÎ°í ÀÌ ±ÛÀ» °è¼Ó Àо°¡½Ã±æ ¹Ù¶ø´Ï´Ù. ¸®¼Ò½º ¶ÇÇÑ ¸®¼Ò½º Ŭ·¡½º¸íµµ ÀÖ°í ¸®¼Ò½º ±×³É À̸§µµ ÀÖ½À´Ï´Ù.

¶óº§µµ ¹Ù²Ù°í »ö»óµµ ¹Ù²Ù½Ã·Á¸é -xrm ¿É¼ÇÀ» ¿©·¯ ¹ø ÁÖ½Ã¸é µË´Ï´Ù.

3.4 XlibÀÇ ¸®¼Ò½º ¸Å´ÏÁ®

-xrm ¿É¼ÇÀÌ ¾µ¸ð°¡ ÀÖ±â´Â Çϳª ±×°ÍÀ» ¿©·¯¹ø ¾²´Âµ¥´Â ÇÑ°è°¡ ÀÖÁÒ? Áß¿äÇÑ ¸î °³ÀÇ ¸®¼Ò½º¸¦ ¹Ù²Ù¾îÁÖ·Á°í ÇÒ ¶§ ¾²´Â Á¤µµÀÏ »ÓÀÔ´Ï´Ù. ÀÌ°Í ¸»°í ´Ù¸¥ ¸ÞÄ¿´ÏÁòÀÌ ÀÖ½À´Ï´Ù.

¼¼¿¬Àº ½ÇÇàµÇÀÚ¸¶ÀÚ /usr/lib/X11/app-defaults µð·ºÅ丮¿¡¼­ ÀÚ½ÅÀÇ Å¬·¡½º¸í¿¡ ÇØ´çÇÏ´Â È­Àϸí SeyonÀ» ã¾Æ¼­ ÀнÀ´Ï´Ù. ±× È­ÀÏ¿¡´Â ¼¼¿¬¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸µéÀÌ µé¾î ÀÖ½À´Ï´Ù. ¼¼¿¬ »ç·ÉºÎÀÇ ¸ðµç ¼ÂÆÃÀÌ ±× ¾È¿¡ µé¾îÀֱ⵵ ÇÏÁÒ. ±× µð·ºÅ丮´Â ·çÆ®±ÇÇÑÀ¸·Î µé¾î°¡¼Å¼­ Seyon È­ÀÏÀ» Write °¡´ÉÀ¸·Î ¼³Á¤ÇÑ ÈÄ ´Ù¸¥ À̸§À¸·Î Àá½Ã ¹Ù²Ù¾î º¾½Ã´Ù. ¼¼¿¬Àº ¾û¸ÁÀÌ µÇ°í ¸¿´Ï´Ù. ´ÙÀ½À¸·Î ¼¼¿¬Àº ¿©·¯ºÐÀÇ .Xdefaults ¼ÂÆÿ¡¼­ ¼¼¿¬¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ÀÖ³ª »ìÆ캾´Ï´Ù. ¸¶Áö¸·À¸·Î ¼¼¿¬Àº ¸í·ÉÇà¿¡¼­ -xrm ¿É¼ÇÀ» Àоî³À´Ï´Ù.

ÁÖÀÇ :.xinitrc ¿¡ xrdb -merge .Xdefaults ¿Í °°Àº ¹®ÀåÀÌ ÀÖ³ª »ìÆ캸½Ê½Ã¿ä. ¶Ç´Â userresources=$HOME/.XdefaultsÀΰ¡ È®ÀÎÇغ¸½Ê½Ã¿ä.

¸¸¾à ¸®¼Ò½º¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ¼­·Î Ãæµ¹ÇÏ´Â °æ¿ì¿¡´Â ¸í·ÉÇàÀÌ ÃÖ¿ì¼±, ±× ´ÙÀ½À¸·Î .Xdefaults, ±×¸®°í ³ª¼­ ¾îÇø®ÄÉÀÌ¼Ç µðÆúÆ® SeyonÀÌ µÚµû¸¨´Ï´Ù. ¸¶Âù°¡Áö·Î Ŭ·¡½º¸í¿¡ ´ëÇÑ ¼ÂÆÿ¡ ´ëÇÏ¿©, ƯÁ¤ °´Ã¼¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ¿ì¼±ÇÕ´Ï´Ù.

  -xrm "*Command.foreground: red"
  -xrm "*about.foregrond: blue"

ÀÌ·± ½ÄÀÇ ¼ÂÆÃÀÌ ÀÖ´Ù¸é, about ¹öÆ°Àº Command Ŭ·¡½º¿¡ ¼ÓÇϹǷΠred ¼Ó¼ºÀ» °¡Áö´Â °ÍÀÌ ¾Æ´Ï¶ó ´õ¿í ´õ Ưº°ÇÑ ¼ÂÆÃÀÎ blue¸¦ ¶ì°Ô µË´Ï´Ù. - ¹°·Ð ÀÌ·¸°Ô °£´ÜÈ÷ ¸»ÇÒ ¼ö´Â ¾øÁö¸¸, ´õ ÀÚ¼¼ÇÑ °ÍÀº °ü·Ã¼­ÀûÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù.

¸®½º½º¿¡ ´ëÇÑ ÀûÀýÇÑ ¼ÂÆÃÀ» ¼±ÅÃÇØÁÖ´Â °ÍÀÌ ¹Ù·Î ¿ì¸®¿¡°Ô´Â Æò¼Ò º¸ÀÌÁö ¾Ê°Ô ¿­½ÉÈ÷ ÀÏÇÏ°í ÀÖ´Â XlibÀÇ "¸®¼Ò½º ¸Å´ÏÁ®"ÀÔ´Ï´Ù.

ÀÚ, ·çÆ®±ÇÇÑÀ¸·Î /usr/lib/X11/app-defaults/SeyonÀ» ¼öÁ¤Çغ¾´Ï´Ù. ¿©±â¼­ ¿ì¸®´Â Á¤¸»·Î Àç¹ÌÀÖ´Â ÀÏÀ» ¸¹ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

3.5 ¾îÇø®ÄÉÀÌ¼Ç µðÆúÆ® È­ÀÏ ´Ù·ç±â

fvwm¿¡¼­´Â #·Î ½ÃÀÛÇÏ´Â ¹®ÀåÀÌ ÁÖ¼®¹®À̾úÁö¸¸, ¿©±â¼­´Â !·Î ½ÃÀÛÇÏ´Â ¹®ÀåÀÌ ÁÖ¼®¹®À¸·Î 󸮵˴ϴÙ. fvwm¿¡¼­ .fvwmrc È­ÀÏÀ» ´Ù·çµí ã±â ±â´ÉÀ» ÅëÇØ ¿øÇÏ´Â ¹®ÀåÀ» ã¾Æ¼­ ¼öÁ¤Çغ¾½Ã´Ù. Àüü¸¦ ¼³¸íµå¸± ¼ö´Â ¾ø°í Àç¹ÌÀÖ´Â °Í¸¸ °ñ¶ó¼­ ¼³¸íµå¸³´Ï´Ù.

 *.title: Seyon Command Center

¾î¶² Ŭ·¡½º, °´Ã¼µç °£¿¡ titleÀ̶ó°í ÇÏ´Â ¸®¼Ò½º¸¦ °¡Áø ³à¼®ÀÇ °ª¿¡´Ù Seyon Command Center¶ó´Â ¹®ÀÚ¿­À» ÇÒ´çÇÕ´Ï´Ù. ÀÌ ¹®ÀÚ¿­À» ¹Ù²Ù¾îÁÖ¸é ¼¼¿¬ »ç·ÉžÀÇ Å¸ÀÌƲ¹Ù Á¦¸ñÀÌ ¹Ù²ò´Ï´Ù.

 *.iconName: <¾ÆÀÌÄÜ À̸§>

¾ÆÀÌÄÜ »óÅ¿¡¼­ ³ªÅ¸³ª´Â À̸§À» ÁöÁ¤ÇØÁÝ´Ï´Ù. fvwmÀÇ IconTitle °°Àº ¼ÂÆÃÀ¸·Îµµ °¡´ÉÇÏÁÒ.

 *font: <ÆùÆ®>

*·Î ½ÃÀÛÇÏ´Ï ¸ðµç ¹®ÀÚ¿­À» ´ëÇ¥ÇÏ°í ³¡ÀÌ font·Î ³¡³ª´Â ¸ðµç ¸®¼Ò½º ¼ÂÆÿ¡ Àû¿ëµË´Ï´Ù. µû¶ó¼­ ¿©±â¼­ ÁÖ¾îÁö´Â <ÆùÆ®>´Â ¼¼¿¬ÀÌ ±âº»ÀûÀ¸·Î »ç¿ëÇÏ°Ô µË´Ï´Ù.

 *Cursor: <Ä¿¼­¸í>

±âº» ÁöÁ¤°ªÀº hand2·Î µÇ¾î ÀÖÁÒ? fvwm ¸¶¿ì½º Ä¿¼­ ¹Ù²Ù±â¿Í ¸¶Âù°¡ÁöÀÔ´Ï´Ù¸¸, ¿©±â¼­´Â ¼ýÀÚ°¡ ¾Æ´Ï¶ó ¹®ÀÚ¿­À» »ç¿ëÇÕ´Ï´Ù. /usr/include/X11/cursorfont.h È­ÀÏ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ¾Õ¿¡ ºÙÀº XC_´Â »©°í À̸§À» ½áÁÝ´Ï´Ù. °ËÀº ¼ÕÀÎ hand1À¸·Î ÇÑ ¹ø ¹Ù²ãº¸½Ã´Â °Íµµ...

 *ShapeStyle:   <¸ð¾ç>

¹öÆ°ÀÇ ¸ð¾çÀ» Á¤ÀÇÇØÁØ´Ù. <¸ð¾ç>¿¡ ¿Ã ¼ö ÀÖ´Â °ªÀº /usr/include/X11/XawÀÇ Command.h¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. °¡´ÉÇÑ °ªÀº Rectangle, RoundedRectangle, Oval, Ellipse ÀÌ·¸°Ô ³× °¡Áö°¡ ÀÖ½À´Ï´Ù.

ÇÑÂüÀ» ³»·Á°£ ÈÄ...

*Box·Î ½ÃÀÛÇÏ´Â ºÎºÐÀ» ã¾Æº¾½Ã´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ À§¿¡¼­ »ìÆ캸¾Ò´ø ¹öÆ°µéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â »ç°¢Çü ¿µ¿ªÀ» ¸»ÇÕ´Ï´Ù. ±âº»ÀûÀ¸·Î´Â ´ÙÀ½°ú °°Àº ÁÙÀÌ ¾øÁö¸¸ »ðÀÔÇغ¾½Ã´Ù.

 *Box.background:       <»ö»ó>

ÀÚ, ´ÜÁ¶·Ó±â¸¸ Çß´ø »ç°¢Çü ¿µ¿ªÀÇ »ö»óÀÌ ¹Ù²ò´Ï´Ù.

 *ok.lable: OK
 *cancel.lable: Cancel
 *done.label: Done
 *yes.label: Yes
 *no.lable: No
 *edit.label: Edit

ÀÌ·± ½ÄÀÇ ÁÙµéÀ» ¹ß°ßÇϼ̽À´Ï±î? ok, cancel, done, µîÀº ¹öÆ° °´Ã¼ÀÇ À̸§ÀÔ´Ï´Ù. ok ¹öÆ°ÀÇ label ¸®¼Ò½º°¡ OK·Î µÇ¾îÀÖÁÒ? ÀÌ ºÎºÐÀ» °íÄ¡¸é ¿µ¾î±ÇÀÌ ¾Æ´Ñ ³ª¶ó »ç¿ëÀÚ°¡ »ç¿ëÇϱâ Æí¸®ÇÏ°ÚÁö¿ä? ÇÁ¶û½º »ç¶÷À̶ó¸é *yes.labelÀ» Qui·Î, *no.labelÀ» NonÀ¸·Î ¹Ù²Ü °Ì´Ï´Ù. µ¶ÀÏ »ç¶÷À̶ó¸é *yes.labelÀ» Ya (¸Â³ª¿ä?) *no.labelÀ» NeinÀ¸·Î ¹Ù²Ü °Ì´Ï´Ù. ¿ì¸®´Â "¿¹", "¾Æ´Ï¿À"·Î ÇÏ¸é µË´Ï´Ù.

*aboutÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙµéÀº about ¹öÆ°¿¡ °üÇÑ °ÍÀÔ´Ï´Ù.

*setÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙµéÀ» ¹Ø¿¡ ÀÖÁÒ?

Set ¹öÆ°À» ´©¸£¸é º¸µå, Æи®Æ¼, Æ÷Æ® µî¿¡ ´ëÇÑ ¼ÂÆÃÀ» ÇÏ´Â »õ·Î¿î âÀÌ Çϳª »ý±é´Ï´Ù. ±×°ÍÀÇ À̸§ÀÌ uBoxÀÎ °Í °°½À´Ï´Ù.

 *set*uBox.Toggle.background: <»ö»ó>
 *set*uBox.Toggle.foreground: <»ö»ó>

Åä±Û¹öÆ°¿¡ ÇØ´çÇÏ´Â °ÍÀº Strip 8th, CTS/RTS ¼³Á¤ µîÀÔ´Ï´Ù. Àü°æ»ö/¹è°æ»öÀº ¼³Á¤µÇÁö ¾ÊÀº »óÅÂÀÇ »ö»óÀ̸ç, ¼³Á¤µÇ¸é Àü°æ»ö/¹è°æ»öÀÌ µÚ¹Ù²ò´Ï´Ù. ³ª¸ÓÁö ÁÙÀº ¸ðµÎ label¿¡ °üÇÑ °ÍÀ̹ǷΠ¼³¸íµå¸®Áö ¾Ê°Ú½À´Ï´Ù.

 *transfer*upload*font: <ÆùÆ®>

¾÷·ÎµåÇÒ ¶§ È­ÀϸíÀ» ÀԷ¹޴ â¿¡¼­ ¾²´Â ÆùÆ®°¡ ³Ê¹« ÀÛ´Ù°í »ý°¢ÇÏÁö ¾ÊÀ¸½Ê´Ï±î? <ÆùÆ®>¸¦ Å« °ÍÀ¸·Î ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù.

*edit*title: File Edit ¶ó´Â ÁÙ±îÁö ÀüÁøÇÕ´Ï´Ù. º¸Åë ¿¡µðÅÍ¿¡ »ç¿ëµÇ´Â ÆùÆ®°¡ ³Ê¹« ÀÛÁÒ? *edit*Text*font ¸¦ ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù. ±â¿Õ¿¡ ¹Ù²Û °Å À§·Î ¿Ã¶ó°¡¸é *help ¼ÂÆÃÀÌ Àִµ¥, *help*Text*font¶ó´Â ÁÙÀ» ³Ö¾î¼­ ÆùÆ®¸¦ ¹Ù²Ù¾î º¾½Ã´Ù.

 !
 ! Message box
 !

¿©±â±îÁö °¡º¾½Ã´Ù. ¸Þ½ÃÁö ¹Ú½ºÀÇ ¹è°æ»öÀ» ¹Ù²Ù¾î º¸ÁÒ.

 *messageBox*background: <»ö»ó>
 *messageBox*foreground: <»ö»ó>

 !
 ! Status box
 !

¸ðµ© °ü·Ã »óȲâÀÔ´Ï´Ù.

 *statusBox.background: <»ö»ó>
 *statusBox.foreground: <»ö»ó> µîµî
  
 !
 ! Quick Keys
 !

¿©±â¿¡´Â »ç¿ëÀÚ Á¤ÀÇ ¹öÆ°ÀÌ µé¾î°¡´Â âÀÔ´Ï´Ù.

 *quickKeyBox.Command.font: <»ö»ó>
 *quickKeyBox.background: <»ö»ó>

 *quickKey1.visible: < on ¶Ç´Â off >
 *quickKey2.visible: < on ¶Ç´Â off >
 ...

´ÜÃà ¹öưâ¿¡ ¾µ µ¥ ¾ø´Â ¹öÆ°µéÀÌ Ç¥½ÃµÇ¾î ÀÖ½À´Ï´Ù. º¸Åë ¾²Áöµµ ¾Ê°í ÀÖÁö¿ä. onÀº ±× ¹öÆ°À» º¸ÀÌ°Ô ÇÏ°í off´Â º¸ÀÌÁö ¾Ê°Ô ÇÕ´Ï´Ù.

 *quickKey1.action: <Çൿ>
 ...

 *quickKey1.label: <¹®ÀÚ¿­>
 ...

ÀÚ, À§¿¡¼­ <Çൿ>¿¡ µé¾î°¥ ¼ö ÀÖ´Â ¼¼¿¬ ³»ºÎÀÇ ÇÔ¼öµéÀº ¿©·¯ °¡Áö°¡ ÀÖ½À´Ï´Ù. ¿©±â¼­ ¼¼¿¬ÀÇ ³î¶ó¿î ±â´ÉÀÌ µ¸º¸ÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº ¼¼¿¬ ¸Þ´º¾óÀ» Âü°íÇϽðí¿ä. ¸¹ÀÌ ¾²ÀÌ´Â °Í Çϳª¸¸ ¼Ò°³ÇÕ´Ï´Ù. º¸Åë ¹öÆ° Çϳª·Î ZMODEM ¾÷·Îµå/´Ù¿î·Îµå ¹öÆ°À» Á¤ÀÇÇؼ­ ¾²´Â °Ì´Ï´Ù.

Transfer ¹öÆ°À» ´©¸£¸é ÇöÀç µî·ÏµÇ¾î ÀÖ´Â È­ÀÏ Àü¼Û Á¤ÀÇ°¡ ¸®½ºÆ®·Î ³ª¿É´Ï´Ù. Àú´Â ¼¼¿¬ÀÇ ³»ºÎ ÇÔ¼ö Áß FileTransfer()¸¦ »ç¿ëÇÏ°Ú½À´Ï´Ù.

 »ç¿ë Çü½Ä : FileTransfer( <Àü¼Û ÇÁ·ÎÅäÄÝ ¹øÈ£> [, <È­Àϸ®½ºÆ®> ] )

<Àü¼Û ÇÁ·ÎÅäÄÝ ¹øÈ£>°¡ ÀǹÌÇÏ´Â °ÍÀº À§ ¸®½ºÆ®¿¡ ³ª¿À´Â ¼ø¼­¸¦ ¸»ÇÕ´Ï´Ù. ¸Ç óÀ½ °ÍÀÌ 1ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. <È­Àϸ®½ºÆ®>´Â º¸Åë Àû¾îÁÖÁö ¾Ê½À´Ï´Ù. È­ÀÏÀ» ´Ù¿î¹Þ´Â °æ¿ì¿¡´Â ÇÊ¿ä¾ø°í, È­ÀÏ Àü¼ÛÀÇ °æ¿ì¿¡´Â È­ÀÏÀ̸§À» ÀԷ¹޵µ·Ï ÇÁ·ÎÅäÄÝÀÌ Àß Á¤ÀǵǾî ÀÖÀ» °Ì´Ï´Ù. Àú´Â XRZ 0.5¸¦ ¹Þ¾Æ¼­ ´Ù¿îÇÁ·Î±×·¥À¸·Î ¾²°í Àִµ¥¿ä, ±×°ÍÀ» G E T À̶ó´Â À̸§ÀÇ ´ÜÃà¹öÆ°À¸·Î Á¤ÀÇÇؼ­ ¾¹´Ï´Ù. ½Ã°£ÀÌ µÈ´Ù¸é XSZ¸¦ ¸¸µé°í´Â ½ÍÁö¸¸ ¼Ò½ººÐ¼®¸¸ Çسõ°í ¸ÅÀÏ ¹Ì·ç±â¸¸ Çϳ׿ä.

  • ¿¹
 *quickKey1.visible: on
 *quickKey1.lable: G  E  T
 *quickKey1.action: FileTransfer(1); Beep();
 *quickKey?.font: 8x16

Âü°í·Î ÀúÀÇ È­ÀÏ Àü¼Û Á¤ÀÇ ¸®½ºÆ® 1 ¹øÀº "Xrz3D" "$xrz" No ÀÔ´Ï´Ù.

¸¶Áö¸·À¸·Î Fun message¿¡ ´ëÇÏ¿© ¾Ë¾Æº¾½Ã´Ù.

 *funMessages: \
        "Hi there! Helloooooooooo!" \
        ...
        "I've fallen and I can't get up!"
¿©·¯ °³ÀÇ ¹®ÀÚ¿­À» Àû¾îÁִµ¥ ÁÙÀ» ¹Ù²Ü ¶§ \ ¹®ÀÚ¸¦ »ç¿ëÇÑ °Í¿¡ À¯ÀÇÇսôÙ.

3.6 »ç¿ëÀÚ ¸®¼Ò½º È­ÀÏ .Xdefaults

¾Õ¿¡¼­ ´Þ¸® ¼¼¿¬ÀÇ Å¬·¡½º¸í SeyonÀ» ¾Õ¿¡´Ù ºÙ¿©Áֽñ⠹ٶø´Ï´Ù. ÀúÀÇ ¿¹¸¦ º¸¿©µå¸®´Â °ÍÀ¸·Î ³¡À» ¸Î°Ú½À´Ï´Ù. ¼¼¿¬ ±× ÀÚü¿¡ ´ëÇÏ¿© ¼³¸íÀ» ÇÑ´Ù´Â °ÍÀÌ ¿Ø¸¸ÇÑ ºÐ·® °¡Áö°í´Â ¾öµÎµµ ¸ø³¾ ¸¸Å­ ¸¹¾Æ¼­ ... Á¦°¡ ¼¼¿¬±îÁö ´Ù·ê ¼ö´Â ¾øÀ» °Í °°½À´Ï´Ù. ´Ù¸¥ ÆÄ¿ö ¸®´ª¼­ºÐµé²²¼­ ÇØÁֽøé Á¦°Ôµµ µµ¿òÀÌ µÇ·Ã¸¸...

È­ÀÏ ³»¿ëÀ» °»½ÅÇϽŠÈÄ, ÅÒ »ó¿¡¼­ xrdb -merge .Xdefaults ÇϽøé X ¸¦ Á¾·áÇϰųª ÇÏÁö ¾Ê¾Æµµ °»½ÅµÈ ¸®¼Ò½º ¼ÂÆÃÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.

 
  ! --- Seyon ---
  Seyon.modems: /dev/modem
  Seyon.vt100.background: DarkBlue
  Seyon.vt100.foreground: white
  Seyon.*.pointerShape: pencil
  Seyon.dialDelay:      0
  Seyon.idleGuardInterval:      300
  Seyon.autoZmodem:     off
  Seyon.metaKeyTranslation:     off
  Seyon.captureFile:    cap
  Seyon.showFunMessages:        on
  Seyon.dialRepeat:     100
  Seyon.autoZmodemAction:       $xrz
  Seyon.modemHangupString:      ATH0^M
  Seyon.idleGuard:      on
  Seyon.hangupConfirm:  off
  Seyon.rtsctsFlowControl:      on
  Seyon.defaultBPS:     38400
  Seyon.zmodemAutoDownload:     off
  Seyon.zmodemAutoDownloadCommand:      $xrz

  ! --- ÀÌ ºÎºÐÀÌ ¸®¼Ò½º ¼ÂÆÃÀ» ´Ù·ç°í ÀÖ½À´Ï´Ù ---
  Seyon*title: Seyon Command Centre
  Seyon*iconName: My Seyon
  Seyon*Cursor: hand1
  Seyon*yes.label: Qui
  Seyon*no.label: Non
  Seyon*set*uBox.Toggle.background: Pink
  Seyon*set*uBox.Toggle.foreground: SteelBlue
  Seyon*transfer.label: Up/Dn
  Seyon*transfer*upload*title: Which File ?
  Seyon*transfer*upload*font: -adobe-courier-medium-r-normal--18-*-*-*-*-*-*-*
  Seyon*transfer*upload*dialog.lable: Enter FileName
  Seyon*exit.label: Quit
  Seyon*messageBox*foreground: purple4
  Seyon*messageBox*background: seashell1
  Seyon*statusBox.background: grey
  Seyon*quickKeyBox.Command.font: 9x15bold
  Seyon*quickKeyBox.background: steelblue
  Seyon*quickKey1.visible: on
  Seyon*quickKey2.visible: on
  Seyon*quickKey3.visible: off
  Seyon*quickKey4.visible: off
  Seyon*quickKey5.visible: off
  Seyon*quickKey1.action: FileTransfer(1); Beep();
  Seyon*quickKey2.action: FileTransfer(2); Beep();
  Seyon*quickKey?.font: 8x16
  Seyon*quickKey1.label: G  E  T
  Seyon*quickKey2.label: P  U  T
  Seyon*Command.background: PeachPuff
  Seyon*quickKey1.background: DeepPink
  Seyon*dial.background: blue
  Seyon*dial.foreground: snow
  Seyon*hangup.background: SeaGreen
  Seyon*hangup.foreground: snow
  Seyon*misc.background: Pink
  Seyon*cancel.background: DeepPink
  Seyon*dismiss.background: DeepPink
  Seyon*exit.background: grey
  Seyon*exit.foreground: black
  Seyon*directory*lBox.ok.background: blue
  Seyon*directory*lBox.ok.foreground: snow

! Âü°í·Î È­ÀÏ Àü¼Û Á¤ÀÇ 2¹øÀº ´Ù¿î·Îµå·Î¼­ "ZDown" "$sz -vv" y ÀÔ´Ï´Ù.

X À©µµ´Â »ç¿ëÀÚ¿¡°Ô ¹«ÇÑÇÑ ÀÚÀ¯¸¦ ÁÖ°í ÀÖ´Ù!

3.7 xterm ÀÇ ¸®¼Ò½º¿¡ °üÇÏ¿©

xtermÀÇ Å¬·¡½º¸íÀº XTermÀÔ´Ï´Ù.

man xterm ÇϽøé ÀÚ¼¼ÇÏ°Ô ¸®¼Ò½º ¸ñ·ÏÀÌ ³ª¿É´Ï´Ù. ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. Àú´Â ¸î °¡Áö¸¸ ´Ù·ç±â·Î ÇÏÁö¿ä.

 XTerm*cursorColor: <»ö»ó>
Ä¿¼­ÀÇ »ö»óÀ» ¹Ù²ß´Ï´Ù.

 XTerm*font:    <ÆùÆ®>
 XTerm*pointerShape: <Æ÷ÀÎÅ͸í>
 XTerm*scrollBar:       <on/off>     ½ºÅ©·Ñ¹Ù¸¦ Ç¥½ÃÇÒ °ÍÀΰ¡?
 XTerm*saveLines:       <¼öÄ¡°ª>     ¸î ÁÙÀ» ±â¾ïÇصΰí ÀÖÀ» °ÍÀΰ¡?

ÇÏ¿©Æ° ¾öû³ª°Ô ¸¹Àº ¸®¼Ò½ºµéÀÌ ÀÖ½À´Ï´Ù.

¿ì¸® ¸ðµÎ°¡ ¸¹ÀÌ ¾²´Â hantermÀº XtermÀ» ±â¹ÝÀ¸·Î ÇϽŠ°Í ¾Æ½ÃÁÒ? hantermÀÇ Å¬·¡½º¸íÀº HantermÀÔ´Ï´Ù. ÇÑÅÒ¿¡ ´ëÇÏ¿© ¸®¼Ò½º ¼ÂÆÃÀ» ÇϽ÷Á¸é XTerm ºÎºÐÀ» HantermÀ¸·Î ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù.

3.8 ¸ÖƼ ¸®¼Ò½º ¼ÂÆà °¡Áö±â

´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù.

 xterm-1.Font: 7x13bold
 xterm-2.Font: 6x10
 xterm-3.Font: fixed

xterm-1, xterm-2, xterm-3Àº Ŭ·¡½º¸íÀÌ ¾Æ´Ï¶ó ±×³É À̸§ÀÔ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ xtermÀ» ½ÇÇà½ÃÄÑ º¸¸é ¾î¶»°Ô µÉ±î¿ä?

 xterm -name "xterm-1"
 xterm -name "xterm-2"
 xterm -name "xterm-3"

¿¹»óÇϽŠ°á°ú°¡ ³ª¿Ô½À´Ï±î?

3.9 ±â Ÿ

¿©·¯ºÐÀÌ ¸¹ÀÌ »ç¿ëÇÏ´Â CD Ç÷¹À̾î·Î¼­ workmanÀÌ ÀÖ½À´Ï´Ù. Ŭ·¡½º¸íÀº WorkmanÀÔ´Ï´Ù. ´ëÇ¥ÀûÀÎ ¸®¼Ò½º´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 Workman.initialVolume: <¼öÄ¡>

Ãʱ⠺¼·ýÀ» Á¤ÇØÁØ´Ù. <¼öÄ¡>´Â 0ºÎÅÍ 100 »çÀÌ Ãʱ⠺¼·ýÀÌ ¸¾¿¡ µéÁö ¾ÊÀ¸¸é Á¤ÇØÁֽʽÿä.

 Workman.smallButtons:  <³í¸®°ª(true,false)>

ÀÛÀº ¹öÆ°À» »ç¿ëÇÒ °ÍÀΰ¡?

 Workman.autoPlay:      < never, normal, always >

always¸¦ ¼±ÅÃÇÏ¸é ¿öÅ©¸Ç ½ÇÇà½Ã ½Ãµð ¾È¿¡ µé¾îÀÖ´Â À½¾Ç½Ãµð¸¦ ¿¬ÁÖÇÕ´Ï´Ù. ÀÚµ¿À¸·Î CD¸¦ ¿¬ÁÖÇØ ÁشٵçÁö ÇÏ´Â ±â´ÉÀº ¹ú½áºÎÅÍ ÀÖ¾î¿Ô´Âµ¥, Áö±Ý¿¡¾ß »õ·Î¿î ±â´ÉÀÌ »ý±ä °Í ¸¶³É ¶°µé¾î´ë´Â °æ¿ì¸¦ º¸¸é ÇѽÉÇÕ´Ï´Ù. X À©µµ ½ÃÀ۽à Ç×»ó ±×·¸°Ô ÇϽ÷Á¸é fvwm ÃʱâÈ­ ÇÔ¼ö¿¡ workmanÀ» ½ÇÇà½ÃÄÑ Áֽʽÿä. ¹°·Ð autoPlay ¸®¼Ò½º¸¦ always·Î ¼³Á¤ÇϽðí¿ä. ±× ´ÙÀ½ Style ¿É¼ÇÀ¸·Î StartIconic ÇÏ½Ã¸é ¾ÆÀÌÄÜ »óÅ·Π½ÃÀÛÇÏ°ÚÁÒ?

±× ´ÙÀ½À¸·Î xcalc¸¦ ¿¹·Î µé¾î º¸ÁÒ. ¿ì¸® ¸ðµÎÀÇ xcalc´Â »ó´çÈ÷ ĢĢÇÑ °è»ê±â¿¡ ºÒ°úÇÕ´Ï´Ù.

Ŭ·¡½º¸íÀº XCalcÀÔ´Ï´Ù. ¹öÆ° Çϳª Çϳª¿¡ ´ëÇÏ¿© »ö»óÀ» ÀúÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

 XCalc.ti.Command.background:   <»ö»ó>
 XCalc.ti.Command.foreground:   <»ö»ó>

º¸ÅëÀÇ °æ¿ì xcalc´Â TI-30 °è»ê±â¸¦ ¿¡¹Ä·¹ÀÌÆ®ÇÏÁö¸¸ xcalc ½ÇÇà¿É¼Ç¿¡ -rpnÀ» ÁÖ¸é ¿·À¸·Î ±ä HP-10C °è»ê±âó·³ ÇൿÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡ À§ÀÇ ti¸¦ ¸ðµÎ hp·Î ¹Ù²Û ¼ÂÆÃÀ» ÇÊ¿äÇÕ´Ï´Ù.

TI °è»ê±âÀÇ ¹öÆ° Çϳª Çϳª¿¡ ´ëÇÑ ¼ÂÆÃÀº XCalc.hp.button4.background ÀÌ·±½ÄÀ¸·Î ÇØÁÝ´Ï´Ù. CE/C ¹öÆ°À̳ª AC ¹öÆ°Àº »ö»óÀ» ¹Ù²Ù¾îºÁµµ ÁÁ°ÚÁö¿ä? XCalc.ti.button4.background ±×¸®°í button5ÀÇ »ö»óÀ» ¹Ù²Ù½Ê½Ã¿ä.

4. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ±×·¡ÇÈ

¾ÆÁ÷ â¿¡ ´ëÇÏ¿© ÇÒ À̾߱âµéÀº ¸¹ÀÌ ³²¾Æ ÀÖÁö¸¸, ½ä··ÇÑ Ã¢¸¸ °¡Áö°í À̸® Àú¸® Àå³­Ä¡´Â °ÍÀº ±×¸¸µÎ°í ´çºÐ°£Àº GRAPHICS ¿¡ ´ëÇÏ¿© °øºÎÇغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

4.1 X À©µµ¿ì ±×·¡ÇÈÀÇ ±âº» °³³ä

¾îµð¿¡(Where) ±×¸± °ÍÀΰ¡?

¹¹, ³Ê¹« ´ç¿¬ÇÑ °Í ¾Æ´Ï°Ú¾î¿ä? â(Window) ¾È¿¡´Ù ±×¸²À» ±×¸®°ÚÁö¿ä. ÇÏÁö¸¸, ¿ÀÁ÷ ±×°Í¸¸Àº ¾Æ´Ï¶ø´Ï´Ù. â ¸»°íµµ ±×¸± ¼ö ÀÖ´Â °÷ÀÌ Àִµ¥, ±×°ÍÀ» Pixmap À̶ó°í ÇÕ´Ï´Ù. Áß¿äÇÑ ÀÚ·áÇü(Variable Type) Áß¿¡ Window¿Í Pixmap ÀÌ µÎ °¡Áö°¡ Àִµ¥, ÀÌ µÎ °³¸¦ ÇÕÃļ­ ÀÚ·áÇü DrawableÀ̶ó°í ÇÕ´Ï´Ù. Drawable? ÀÚ, ±×¸²À» ±×¸®´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â ¶æÀÌÁÒ? ¾îµð¼­ º» °Íµµ °°ÁÒ? ¹Ù·Î Àü¹ø °­ÀÇ XGetGeometry ÇÔ¼ö¿¡¼­ Àá±ñ ³ª¿Ô´ø ³à¼®ÀÔ´Ï´Ù. ´çºÐ°£ °è¼Ó â¿¡´Ù¸¸ ±×¸± °ÍÀÌ¿À´Ï, Pixmap¿¡ ´ëÇÑ ¼³¸íÀ» ´ÙÀ½À¸·Î ¹Ì·ì´Ï´Ù. ÀÌ·¸°Ô ¹Ì·ïµµ µÇ³Ä±¸¿ä? °ÆÁ¤ÇÏÁö ¸¶½Ê½Ã¿ä. Drawable ÀÚ·áÇüÀ̶ó°í µÇ¾î ÀÖ´Â °ÍÀº Window³ª Pixmap µÎ °¡Áö¿¡ ¶È°°ÀÌ Àû¿ëµÇ¹Ç·Î »õ·Ó°Ô ¹è¿ì½Ç ÇÊ¿ä°¡ ¾ø°í ÀÌÇØÇϽñ⵵ ½¬¿ï °Ì´Ï´Ù.

¾î¶² º×À» °¡Áö°í? ( Graphics Context )

Å« º×, ÀÛÀº º× ... »¡°£»ö, ³ë¶õ»ö, ÁÖȲ»ö ... ¹«¾ùÀΰ¡¸¦ ±×¸± ¶§ ÀÚ½ÅÀÇ ±¸¹Ì¿¡ ¸Â°Ô ´Ù¾çÇÑ µµ±¸¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ¾î¾ß ÇÏ°ÚÁÒ? X À©µµ¿ì ½Ã½ºÅÛÀº Graphics Context ù±ÛÀÚ¸¸ µû¼­ GC¶ó°í ÇÏ´Â ¾ÆÁÖ Æ¯º°ÇÑ ÀÚ¿ø(Resource)À» °¡Áö°í ÀÖ½À´Ï´Ù. ¿ä GC¶ó°í ÇÏ´Â °Í¿¡ °ú¿¬ ¾î¶»°Ô(How) ±×¸± °ÍÀΰ¡? ¶ó´Â ¹®Á¦¿¡ ´ëÇÑ Á¤º¸¸¦ ÀüÀûÀ¸·Î(!) °¡Áö°í ÀÖ½À´Ï´Ù. Ç×»ó ÀÚ¿øÀº ¼­¹ö°¡ µ¶ÀçÀûÀ¸·Î(!) °ü¸®¸¦ ÇÏ´Â ¸ð½ÀÀ» ¿©±â¼­µµ ¿³º¼ ¼ö ÀÖ±º¿ä. :)

¾î¶² °ÍÀ» ±×¸± ¼ö Àִ°¡? ( ±×·¡ÇÈ ³»¿ë )

±×·¡ÇÈ¿¡ ±âº»ÀÎ Á¡(Point), ¼±(Line)À» ±×¸± ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ Á¡, ÇϳªÀÇ ¼±À» ±×¸®¶ó°í ¼­¹ö¿¡°Ô ¿äûÇÏ´Â ÇÔ¼öµéÀÌ ´ç¿¬È÷ ±¸ºñµÇ¾î ÀÖ°í, ¿©±â¿¡ °³¹ßÀÚ Æí¸®¸¦ À§Çؼ­ ¿©·¯ °³ÀÇ Á¡, ¿©·¯ °³ÀÇ ¼±À» ±×¸®´Â ÇÔ¼ö, »ç°¢Çü, ¿øÈ£ µîµîÀ» ±×¸®µµ·Ï ¿äûÇÏ´Â ÇÔ¼ö°¡ ¶ÇÇÑ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. ¸¶Áö¸·À¸·Î ÅؽºÆ® ¹®ÀÚ¸¦ ±×·Á³¾ ¼ö ÀÖ´Â ÇÔ¼öµéÀÌ À־ ¿øÇÏ´Â ÆùÆ®¸¦ °¡Áö°í ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. X À©µµ¿ì´Â GUI üÁ¦À̹ǷΠ±ÛÀÚ ¶ÇÇÑ ¾²´Â °Ô ¾Æ´Ï¶ó ´Ù¸¥ µµÇü°ú ¸¶Âù°¡Áö·Î ±×¸®´Â °ÍÀÌÁÒ. Âü°í·Î ¿©·¯ºÐÀÌ ½½·¢À» ¼³Ä¡ÇÒ ¶§ PEX ¶óÀ̺귯¸®¸¦ ¼³Ä¡Çϼ̴ٸé 3Â÷¿ø ±×·¡ÇÈÀ» ¾ÆÁÖ ½±°Ô ±×¸± ¼ö ÀÖ½À´Ï´Ù. ³ªÁß¿¡ ±âȸ°¡ µÇ¸é ¾à°£ ¼³¸íÀ» µå¸± ¿¹Á¤ÀÔ´Ï´Ù¸¸...

±×·¡ÇÈÀÇ ±âº» ÀýÂ÷

¾î¶² ÇÁ·Î±×·¡¹ÖÀÌµç ¸¶Âù°¡ÁöÀÌ°ÚÁö¸¸, X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº ¾î¶² ÀÏÀ» ¼öÇàÇϵçÁö Á¤ÇØÁ® ÀÖ´Â ¸î ´Ü°èÀÇ ÀýÂ÷¸¦ µû¶ó¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀýÂ÷¸¦ ¸Ó¸® ¼Ó¿¡ Ç×»ó ±â¾ïÇÏ½Ç ¼ö ÀÖ´Â ºÐµéÀ̾߸»·Î X À©µµ¿ì ÇÁ·Î±×·¡¹Ö µµ»çµéÀÌ µÇ½Ã´Â °Ì´Ï´Ù.

<±âº» ÀýÂ÷>

  1. ¿ì¼± ±×¸± ´ë»óÀÌ ¹Ì¸® ÁغñµÇ¾î ÀÖ¾î¾ß ÇÏ°ÚÁÒ? ¿ì¸®´Â XCreateSimpleWindow ÇÔ¼ö¸¦ ÅëÇØ Ã¢À» ¸¸µé¾î ³õÀ¸¸é µË´Ï´Ù.
  2. Áß¿ä!!! ±× ´ÙÀ½¿¡´Â GC¶ó°í Çϴ Ưº°ÇÑ ÀÚ¿øÀ» ¼­¹ö¿¡°Ô ¸¸µé¾î ´Þ¶ó°í ¿äûÇÕ´Ï´Ù. ±×¸®°í ¿ì¸®´Â GCÀÇ ID¸¸ ¼­¹ö¿¡°Ô¼­ ¹ÝȯÀ» ¹Þ½À´Ï´Ù. ¿ì¸®°¡ GC ÀÚü³»¿ëÀ» ´Ù °¡Á®¿Ã ¼ö´Â ¾ø½À´Ï´Ù. ´ÜÁö! ±× ID¸¸ °¡Á®¿É´Ï´Ù.
  3. ±×¸®°í ½ÍÀº ½ºÅ¸ÀÏÀ» Á¤ÇÏ°í GCÀÇ Æ¯Á¤°ªÀ» ¹Ù²Ù¾î ´Þ¶ó°í ¿äûÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ¼±ÀÇ ±½±â, Á¡¼±ÀÌ³Ä ½Ç¼±À̳Ä, »ö»óÀº ¾î¶² °ÍÀ¸·Î ÇÏ´À³Ä µîµî
  4. ±×¸®°í ½ÍÀº µµÇüÀ» ¼±ÅÃÇؼ­ ¾Ë¸Â´Â ÇÔ¼ö¸¦ È£ÃâÇÏ¿© Á¡ÀÌµç ¼±ÀÌµç ¶Ç´Â »ç°¢ÇüÀ̵簡¿¡ ¾î¶² â¿¡ ¾î¶² GC¸¦ ÀÌ¿ëÇؼ­ ±×¸®¶ó°í ¼­¹ö¿¡°Ô ¿äûÇÕ´Ï´Ù.

Áö±ÝºÎÅÍ´Â ÀÌ ¼ø¼­ ±×´ë·Î ¼³¸íÀ» Çسª°¥ °ÍÀÔ´Ï´Ù. À§ ±âº»ÀýÂ÷¸¦ ²À ±â¾ïÇϼ¼¿ä.

¿ì¼± GC ¸¦ ¸¸µéÀÚ.

±âº» ÀýÂ÷ 1 ¿¡ ´ëÇؼ­´Â ¼³¸íµå¸®Áö ¾Ê½À´Ï´Ù. â ¸¸µå´Â °Å Áö±Ý±îÁö ÇØ¿ÔÀݾƿä?

 ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>

 GC XCreateGC ( Display *display,
                Drawable drw,
                unsigned long bitmask,
                XGCValues *values
              );

bitmask, XGCValues Çü º¯¼ö values¿¡ ´ëÇÑ ¼³¸í¸¸ÀÌ ÇÊ¿äÇÏ°Ú±º¿ä.

  • <XGCValues Çü º¯¼ö ±¸Á¶Ã¼¿¡ ´ëÇÑ ¼³¸í>
<X11/Xlib.h>¿¡ Á¤ÀǵǾî ÀÖ´Â XGCValues±¸Á¶Ã¼¿£ ´ÙÀ½°ú °°Àº ¸â¹öµéÀÌ ÀÖ½À´Ï´Ù.

--------------------------------------------------------------------
 #   ¸â ¹ö ¸í                   ºñÆ® ¸Å½ºÆ®             ±âº»°ª
--------------------------------------------------------------------
 1  int function                GCFunction              GXCopy
 2  unsigned long plane_mask    GCPlaneMask             ¸ðµÎ 1
 3  unsigned long foreground    GCForeground            0
 4  unsigned long background    GCBackground            1
 5  int line_width              GCLineWidth             0
 6  int line_style              GCLineStyle             LineSolid
 7  int cap_style               GCCapStyle              CapButt
 8  int join_style              GCJoinStyle             JoinMiter
 9  int fill_style              GCFillStyle             FillSolid
10  int fill_rule               GCFillRule              EvenOddRule
11  int arc_mode                GCArcMode               ArcPieSlice
12  Pixmap tile                 GCTile                  ?
13  Pixmap stipple              GCStipple               ?
14  int ts_x_origin             GCTileStipXOrigin       0
15  int ts_y_origin             GCTileStipYOrigin       0
16  Font font                   GCFont                  ?
17  int subwindow_mode          GCSubwindowMode         ClipByChildren
18  Bool graphics_exposures     GCGraphicsExposures     True
19  int clip_x_origin           GCClipXOrigin           0
20  int clip_y_origin           GCClipYOrigin           0
21  Pixmap clip_mask            GCClipMask              None
22  int dash_offset             GCDashOffset            0
23  char dashes                 GCDashList              4

ºñÆ® ¸Å½ºÅ© ¸ÅÅ©·Î¿Í ±âº»°ª¿¡¼­ÀÇ ¸ÅÅ©·Î´Â <X11/Xlib.h> È­ÀÏ¿¡¼­ ÀÚµ¿À¸·Î Æ÷ÇÔ(#include)ÇÏ´Â <X11/X.h> È­ÀÏÀÇ GRAPHICS DEFINITION ºÎºÐ¿¡ Á¤ÀǵǾî ÀÖÀ¸´Ï ±× ºÎºÐÀ» ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù. ? Ç¥ÇÑ ºÎºÐÀº ¾ÆÁ÷Àº ¾Ë ÇÊ¿ä°¡ ¾ø°Å³ª 16¹ø FontÀÇ °æ¿ì¿¡´Â ½Ã½ºÅÛ¸¶´Ù ´Ù¸¥ ´Ù¸¥ °ªÀ̹ǷΠÁ¤ÇØÁöÁö ¾ÊÀº °ªÀ̶ó´Â ¶æÀÔ´Ï´Ù.

À§ µµÇ¥¸¦ ÁÖÀDZí°Ô »ìÆ캸½Ê½Ã¿ä. ¸â¹ö¸í°ú ºñÆ® ¸Å½ºÅ©¸í »çÀÌ¿¡´Â ÇÑ ´«¿¡µµ ô ¾Ë¾Æº¼ ¼ö ÀÖ´Â ¸í¸í±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù. ºñÆ® ¸Å½º¸íÀº Ç×»ó GC·Î ½ÃÀÛÇÏ°í ¸â¹ö¸íÀÌ ¼Ò¹®ÀÚÀÎ °Í°ú ´Þ¸® Ç×»ó ´ë¹®ÀÚ, ±×¸®°í ´Ü¾î¸¶´Ù ´ë¹®ÀÚ¸¦ ¾¹´Ï´Ù. ¸â¹ö¸í¿¡ ÀÖ´Â ´ë½¬(-) ¹®ÀÚ´Â ¾ø¾Û´Ï´Ù. ¸â¹ö¸íÀ» ¼Ò¹®Àڷθ¸ ½è±â ¶§¹®¿¡ ´Ü¾î±¸º°À» À§ÇØ ´ë½¬°¡ µé¾î°£ °Í¿¡ ºÒ°úÇϴϱî¿ä. ÀÌ·¯ÇÑ ¸í¸í ¹æ½ÄÀº X Àü¹Ý¿¡ »ç¿ëµÇ°í ÀÖÀ¸´Ï ¼ÒȦÈ÷ ³Ñ±âÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.

ÇÁ·Î±×·¥ ³»¿¡¼­ º¸Åë ´ÙÀ½°ú °°Àº °úÁ¤À» ÅëÇØ GC¸¦ ¼­¹ö Ãø¿¡ »ý¼º,µî·Ï½ÃÅ°°í ID¸¦ ÀÔ¼öÇÕ´Ï´Ù.

 Display *display;      /* µð½ºÇ÷¹ÀÌ ¼­¹öÀÇ ID */
 Window window;         /* »ý¼ºµÉ âÀÇ ID */
 GC gc;                 /* ¿ì¸®°¡ »ç¿ëÇÒ º× */
 XGCValues gvalue;      /* º×ÀÇ ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¶§ ±× ¼Ó¼ºÀ» ÀúÀåÇØµÑ º¯¼ö */

 ...

 /* ¿ì¸®°¡ ¿øÇÏ´Â ±×·¡ÇÈ ¼Ó¼º¸¸À» ¼ÂÆÃÇÑ´Ù */
 gvalue.line_width = 20;
 gvalue.line_style = LineOnOffDash;
 gvalue.cap_style = CapRound;
 gvalue.join_style = JoinRound;         /* ÁÖÀÇ */

 gc = XCreateGC ( display, window, GCLineWidth | GCLineStyle | GCCapStyle,
                  &gvalue );

 /* ¿©±â¼­ ´«¿©°Ü º¼ °ÍÀº GCLineWidth | GCLineStyle | GCCapStyle ºÎºÐÀÌ´Ù.
    ¿ì¸®°¡ XGCValues Çü º¯¼ö gvalue¿¡ ¼ÂÆÃÇÑ ¼Ó¼ºÀÇ ¸Å½ºÅ©¸¦ OR Çü½ÄÀ¸·Î
    ÁöÁ¤ÇØÁÖ¾î¾ß ÇÑ´Ù.                                                    */

º×À» óÀ½ ¸¸µé ¶§ºÎÅÍ ¹Ì¸® ¸î °¡Áö ¼Ó¼ºÀ» ¸¸µé¾î ³õ°í ½ÃÀÛÇÏ´Â ÀüÇüÀûÀÎ ¹æ½Ä ÀÔ´Ï´Ù. ºñÆ® ¸Å½ºÅ© ¾´ ¹æ½ÄÀ» Á¤¸»·Î À¯½ÉÈ÷ »ìÆ캸½Ê½Ã¿ä. ±×·¯¸é ÇÑ °¡Áö »ç½ÇÀ» ´«Ä¡Ã¤½Ç ¼ö ÀÖ½À´Ï´Ù. /* ÁÖÀÇ */¶ó°í ÇÑ ÁÙ¿¡¼­ µÎ ÁÙÀÌ À̾îÁú ¶§ ¾î¶² ¸ð¾çÀ¸·Î À̾îÁúÁö¿¡ ´ëÇÏ¿© Á¤ÇØÁÖ¾úÁö¸¸ GC¸¦ ¸¸µé ¶§ ºñÆ® ¸Å½ºÅ©¿¡¼­ GCJoinStyle À» ³Ö¾îÁÖÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¼Ó¼ºÀÌ µÇÁö ¸øÇÕ´Ï´Ù. ¾î¶»°Ô º¸¸é ´ç¿¬ÇÏÁÒ? ÄÄÇ»ÅÍ°¡ ¹«½¼ ÀçÁÖ·Î ¿ì¸®°¡ ¹«½¼ °ªÀ» ¿øÇÏ´ÂÁö ¾Ë°Ú½À´Ï´Ù. ÀÌ·¯Àú·¯ÇÑ °ÍÀ» ÁöÁ¤ÇØ µÎ¾úÀ¸´Ï ±×°ÍÀ» ¼ÂÆÃÇ϶ó. ÀÌ·± ½ÄÀ¸·Î ÀÚ¼¼È÷ ¾Ë·ÁÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

GCÀÇ ½ºÅ¸ÀÏ ¼³Á¤Çϱâ

¸Å¹ø GC¸¦ ¸¸µé ¶§¸¸ ¼Ó¼ºÀ» Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ÀÌ¹Ì »¡°­ ¹°°¨À» Àû½Å º×À̶ó ÇÏ´õ¶óµµ ¹°¿¡ ¾Ä¾î³»°í ÆĶû ¹°°¨À» Àû½Ç ¼öµµ ÀÖ´Â °Í ¾Æ´Ï°Ú½À´Ï±î?

 ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>

 XChangeGC (    Display *display,
                GC gc,
                unsigned long mask,
                XGCValues *gvalues
           );

»ç¿ë¹ýÀº À§¿¡¼­¿Í °°½À´Ï´Ù. º×ÀÇ ¼Ó¼ºÀ» ¹Ù²Ù°í ½ÍÀ» ¶§´Â XGCValues Çü º¯¼öÀÇ ¸â¹ö¿¡ ÀûÀýÇÑ °ªÀ» ¼ÂÆÃÇÑ ÈÄ, ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é µË´Ï´Ù. ºñÆ®¸Å½ºÅ©¸¦ Àß ¾²¼Å¾ß°ÚÁÒ?

ÀÌÁ¦ ¹°°¨¿¡ Àû½Å º×À¸·Î ±×·Áº¾½Ã´Ù.

Á¡ ±×¸®´Â ÇÔ¼ö

 ÇÔ¼ö ¿øÇü : <X11/Xlib.h>

 XDrawPoint( Display *display, Drawable d, GC gc, int x, int y );
 XDrawPoints ( Display *display, Drawable d, GC gc, XPoint *points,
                int npoints, int mode );

 typedef struct {
        short x, y;
 } XPoint;
 /* Âü°í : XSegment, XRectangle, XArc */

XDrawPoints ÇÔ¼ö´Â µÚ¿¡ º¹¼öÇüÀÓÀ» ÀǹÌÇÏ´Â s°¡ ºÙÀº °Í¿¡ À¯ÀÇÇսôÙ. ¿©·¯ °³ÀÇ Á¡À» XPoint Çü ±¸Á¶Ã¼ ¹è¿­¿¡ ³Ö¾î¼­ ÇÑ ¹øÀÇ ÇÔ¼ö ºÎ¸£±â·Î ±×¸®°íÀÚ ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ¸ðµç ½ºÅ¸ÀÏ¿¡ ´ëÇÑ ¼ÂÆÃÀº Ç×»ó GC Çü º¯¼ö°¡ °¡¸®Å°´Â ¼­¹öÀÇ ¸Þ¸ð¸®¿¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇսôÙ. npoints º¯¼ö´Â Á¡ ¹è¿­ÀÇ °¹¼ö¸¦ ÁöÁ¤ÇØÁÝ´Ï´Ù. mode ¿¡´Â ´ÙÀ½ µÎ °¡Áö°¡ Àִµ¥ CoordModeOriginÀº ÁÖ¾îÁø ¸ðµç ÁÂÇ¥°¡ DrawableÀÇ ¿øÁ¡¿¡ ´ëÇÑ ÁÂÇ¥·Î ÁÖ¾îÁ³À½À» ÀǹÌÇϸç, CoorDModePrevious´Â ÃÖÃÊÀÇ Á¡¸¸ Drawable ¿øÁ¡¿¡ ´ëÇÑ ÁÂÇ¥ÀÌ¸ç ³ª¸ÓÁö´Â ¹Ù·Î Á÷ÀüÀÇ Á¡¿¡ ´ëÇÑ »ó´ë ÁÂÇ¥·Î Ç¥½ÃµÇ¾î ÀÖÀ½À» ³ªÅ¸³»ÁÝ´Ï´Ù.

Á÷¼± ±×¸®´Â ÇÔ¼ö

 ÇÔ¼ö ¿øÇü : <X11/Xlib.h>

 XDrawLine( Display *display, Drawable d, GC gc, int x1, int y1,
                                                int x2, int y2 );
 XDrawLines( Display *display, Drawable d, GC gc, XPoints *points,
                                int npoints, int mode );
 XDrawSegments( Display *display, Drawable d, GC gc, XSegment *segments,
                                                        int nsegments );

ù¹ø° ÇÔ¼ö´Â Drawable ³»¿¡¼­ ( x1, y1 )¿¡¼­ ( x2, y2 ) ÁÂÇ¥±îÁö ¼±À» ±ß´Â ¾ÆÁÖ ÀϹÝÀûÀÎ ÇÔ¼öÀÔ´Ï´Ù. µÎ¹ø° ÇÔ¼ö´Â ¿¬ÇÊ ¶¼Áö ¾Ê°í ±×¸®±â¸¦ ¸»ÇÕ´Ï´Ù. XPoint ±¸Á¶Ã¼ ¹è¿­ÀÇ Á¡µéÀÌ °è¼Ó À̾îÁö´Â ÇüÅ·Π±×·ÁÁø´Ù. ÁÂÇ¥¿¡ ´ëÇÑ Ç¥±â´Â mode °ªÀ¸·Î ÇÕ´Ï´Ù. Á¡ ±×¸®´Â ÇÔ¼ö XDrawPoints¿¡¼­¿Í °°½À´Ï´Ù. ¼¼¹ø° XDrawSegments´Â µÎ¹ø° ÇÔ¼ö¿Í ´Þ¸® ¿¬¼ÓµÈ ¹è¿­ÀÇ Á¡µéÀ» ÇÑ ½Ö ¾¿ ¹­¾î¼­ ¼±À» ¿©·¯ °³ ±×¸°´Ù. (x1,y1)¿¡¼­ (x2,y2)¿¡ ±ß°í, ´Ù½Ã (x3,y3)¿¡¼­ (x4,y4)¿¡ ±ß´Â ¹æ½ÄÀÔ´Ï´Ù.

¼± ½ºÅ¸ÀÏÀÌ ¸¹À¸¹Ç·Î Xlib¿¡ ´ëÇÑ ·¹ÆÛ·±½º PS È­ÀÏ µîÀ» ±¸ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Ã¥À» »çÁö ¾Ê¾Æµµ ¿Ïº®ÇÑ ¼³¸í¼­°¡ µÉ ¸¸Å­ Àß ¸¸µé¾îÁ® ÀÖ½À´Ï´Ù.

 Âü°í ÇÔ¼ö : XSetLineAttributes ()
             XSetDash ()

Á÷»ç°¢Çü ±×¸®´Â ÇÔ¼ö

 ÇÔ¼ö ¿øÇü : <X11/Xlib.h>

 XDrawRectangle ( Display *display, Drawable d, GC gc, int x, int y,
                        unsigned int width, unsigned int height );
 XDrawRectangles( Display *display, Drawable d, GC gc,
                        XRectangle rectangels[], int nrectangles );

³ª¸ÓÁö

±×·¡ÇÈ¿¡ °ü½ÉÀÌ ¸¹À¸½Å ºÐµéÀº ½º½º·Î ³ª¸ÓÁö ÇÔ¼öµéÀ» Á¶»çÇϽñ⠹ٶø´Ï´Ù. ÀÌ°Í¿¡ ¸¸Á·ÇϽÃÁö ¸øÇÏ´Â ºÐµéÀº 3D ±×·¡ÇÈ ¶óÀ̺귯¸®ÀÎ PEXlib ¿¡ ´ëÇÑ °øºÎ¸¦ ÇÏ½Ã¸é µË´Ï´Ù. ÀÌ°Í¿¡ ´ëÇÑ ³»¿ëÀº Xlib ÇÁ·Î±×·¡¹Ö ¼öÁØÀ» ³Ñ¾î¼­°í ±× ÀÚü·Îµµ ¹æ´ëÇϱ⠶§¹®¿¡ ¿©·¯ºÐÀÇ ÀÇÁö¿¡ ¸Ã±é´Ï´Ù.

À§¿¡¼­ ¼³¸íÇÑ ÇÔ¼öµéÀ» °¡Áö°í ´ÙÀ½¿¡´Â ½Ç½ÀÀ» Çغ¸±â·Î ÇսôÙ. ±×¸®°í °£·«ÇÏ°Ô ÆùÆ®¸¦ °¡Áö°í ¹®ÀÚ¿­ ³ªÅ¸³»±â¸¦ ´Ù·ç¾îº¸°Ú½À´Ï´Ù.

4.2 ±×·¡ÇÈÀÇ ¿¬½À

Xlib ±×·¡ÇÈÀº X ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ°¡ µÇ¾îÁÖ´Â ¾ÆÁÖ ±âº»ÀûÀÎ ±â´ÉÀÔ´Ï´Ù. X À©µµ¿ì´Â ¿ÂÅë ±×·¡ÇÈÀ¸·Î °¡µæ Â÷ ÀÖ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Á¡ ÇϳªºÎÅÍ ¸ðµç º¹ÀâÇÑ µµÇüÀº °á±¹ Xlib ÀÇ ÇÔ¼ö¸¦ ÅëÇؼ­ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù. Á¦ °èȹÀ¸·Î´Â ¾öû³­ ¼Óµµ·Î Xlib ÇÁ·Î±×·¡¹ÖÀ» ¸¶Ä¡°í ¾î¼­ »¡¸® ¿©·¯ºÐÀÌ Àç¹ÌÀÖ¾î ÇÒ Xt ÇÁ·Î±×·¡¹ÖÀ¸·Î ³Ñ¾î°¡°í ½ÍÀºµ¥¿ä, ¹Ù·Î ±× °÷¿¡¼­ À§Á¬À» »õ·Î ¸¸µç´Ùµç°¡ ÇÒ ¶§ ¾ÆÁÖ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù. Àú¸¦ µû¶ó ¿À½Ã¸é ¿©·¯ºÐ¸¸ÀÇ ¸ÚÁø À§Á¬À» ¸¸µé ¼ö ÀÖµµ·Ï ¾È³»Çص帮°Ú½À´Ï´Ù. ¶Ç ¸ð¸£ÁÒ. ¿©·¯ºÐ Áß¿¡¼­ Á¤¸»·Î »ó»ó·ÂÀÌ ¶Ù¾î³ª°í ¸ÚÁø À§Á¬ÀÌ ³ª¿À¸é FWF(Free Widget Foundation)ÀÇ À§Á¬¼Â¿¡ Æ÷ÇԵǾî Àü¼¼°èÀÇ ÇÁ·Î±×·¡¸Óµé¿¡°Ô ¾Ë·ÁÁú ¼öµµ ÀÖ½À´Ï´Ù. ¼Ò½º°¡ °ø°³µÇ¾î ÀÖÁö ¾Ê´Â ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â ºÒ°¡´ÉÇÑ ÀÏ ¾Æ´Ï°Ú½À´Ï±î?

´Ù½Ã ÇÑ ¹ø È®ÀÎÇÕ´Ï´Ù! Xlib ±×·¡ÇÈÀº Ç×»ó GC ¶ó°í ÇÏ´Â ¸®¼Ò½º¸¦ °¡Áö°í ÇÕ´Ï´Ù. ±× GC´Â ±×·¡ÇÈ¿¡ °üÇÑ ¿©·¯ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â ³à¼®Àä, ´ç¿¬È÷ ¼­¹ö Ãø¿¡´Ù GC »ý¼ºÀ» ÀÇ·ÚÇÏ°í ¿ì¸®´Â ±× GCÀÇ ID¸¸À» ¹Þ¾Æ¿É´Ï´Ù. ÀÌ°ÍÀº X À©µµ¿ìÀÇ ³×Æ®¿öÅ© ÁöÇâÀû Ư¼º¿¡¼­ ³ª¿À´Â °ÍÀ¸·Î¼­, ³×Æ®¿öÅ©¸¦ ÅëÇؼ­ ÃÖ¼ÒÀÇ Á¤º¸¸¦ ÀüÇϸ鼭µµ ¿øÇÏ´Â ±â´ÉÀ» ¾ò°íÀÚ Çϱ⠶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¸Å¹ø red ¶ó´Â »ö»óÀ¸·Î ¼±À» ±×À¸¶ó´Â 100¹øÀÇ ¸í·ÉÀÌ ÀÖ´Ù¸é, red·Î ±×¸®¶ó°í´Â ¸í·ÉÀÌ °è¼Ó ³×Æ®¿öÅ©¸¦ Ÿ°í ¼­¹ö·Î ÀüÇØÁ®¾ß ÇÒ °ÍÀÔ´Ï´Ù. ¿©·¯ °¡Áö ÁÖ¹®»çÇ×À» ¹Ì¸® µî·ÏÇسõ°í °£´ÜÈ÷ ±× ID¸¸À» Àü¼ÛÇÏ´Â ¹æ½ÄÀÌ ÈξÀ ³×Æ®¿öÅ©ÀÇ ·Îµå¸¦ ÁÙÀÌ´Â ¹æ¹ýÀÌ µÇ°ÚÁÒ? ¹°·Ð Á׾´Â °ÍÀº Ç×»ó ¼­¹öÀÔ´Ï´Ù. :)

ÀÌÁ¦ºÎÅÍ ±×·¡ÇÈÀ» ¿¬½ÀÇغ¾½Ã´Ù

  • ¿¹Á¦ 7
#include <X11/Xlib.h>

/* »ö»ó À̸§¿¡ ÇØ´çÇÏ´Â Çȼ¿°ª ¹ÝȯÇÏ´Â ÇÔ¼ö */
unsigned long UsrColorPixel( Display*, char* );
/* ¿äûÀ» Ç÷¯½¬ÇÏ°í ÁöÁ¤µÈ Ãʸ¸Å­ Áö¿¬½ÃÅ°´Â ÇÔ¼ö */
void    Pause( Display*, int );

static XPoint points[] = {{ 200, 50 },{ 100, 150 },{ 300, 150 },{ 200, 50 }};
static XSegment segs[] = {{ 10, 10, 390, 190 },{ 10, 190, 390, 10 }};
static char dash_list[] = { 20, 5, 10, 5 };

int main()
{
        Display *d;
        Window w; /* One TopLevel Window & Two Child Windows */
        GC gc;
        XGCValues gv;

        /* ¼­¹ö¿Í Á¢¼ÓÇϱ⠱׸®°í º¯¼öµéÀ» ÃʱâÈ­ */
        d = XOpenDisplay ( NULL );

        /* ÀÚ, ½ÃÀÛÇغ¼±î¿ä? */

        w = XCreateSimpleWindow ( d, DefaultRootWindow( d ),
                                  100, 100, 400, 200, 1,
                                  BlackPixel(d,0), WhitePixel(d,0) );
        XMapWindow( d, w );
        Pause( d, 2 );



/*
 *      [1] Á¡(Point)À» Âï¾îº¾´Ï´Ù. XDrawPoint(s) ÇÔ¼ö »ç¿ë
 */
        gv.foreground = UsrColorPixel( d, "red" );
        gc = XCreateGC( d, w, GCForeground, &gv );
        XDrawPoint ( d, w, gc, 200, 100 );
        Pause( d, 3 );

        gv.foreground = UsrColorPixel( d, "blue" );
        XChangeGC ( d, gc, GCForeground, &gv );
        XDrawPoints ( d, w, gc, points, 3, CoordModeOrigin );
        Pause( d, 3 );

/*
 *      °íÇػ󵵿¡¼­´Â ¹¹ °ÅÀÇ ¾Èº¸ÀÏ Á¤µµ·Î RED»öÀÇ ÀÛÀº Á¡ Çϳª,
 *      ±×¸®°í ³ª¼­ BLUE»öÀÇ Á¡ 3°³¸¦ Âï°í ÀÖ½À´Ï´Ù. Á¤¸»·Î ÁýÁßÇؼ­
 *      º¸¼Å¾ß ÇÒ °Ì´Ï´Ù. ¸ð´ÏÅÍ°¡ ´õ·¯¿ì¸é ¸ÕÁö¿Í ±¸º°ÀÌ ¾ÈµÉÁöµµ... :)
 */
        XClearWindow( d, w );
        {
            int i, j;
            for ( j = 0; j < 200 ; j++ )
                for ( i = 0; i < 400 ; i++ )
                {
                    XDrawPoint( d, w, gc, i, j );
                    XFlush ( d );
                }
        }
        Pause( d, 3 );

/*
 *      BLUE Á¡À¸·Î â Çϳª °¡µæÈ÷ Ä¥Çغ¾´Ï´Ù. XFlush ÇÔ¼ö¸¦ °íÀÇ·Î ½á¼­
 *      ±× °úÁ¤À» ¾Ë¾Æº¼ ¼ö ÀÖµµ·Ï ÇÏ¿´½À´Ï´Ù. »ý°¢º¸´Ù ºü¸£°Ô ÂïÈú °Ì´Ï´Ù.
 *      ¸®´ª½º´Â ¿ÏÀüÇÑ ÀǹÌÀÇ 32ºñÆ® OS À̴ϱî¿ä.
 */



/*
 *      [2] ¼±(Line)À» ±×·Áº¾´Ï´Ù.
 */

        XSetWindowBackground ( d, w, UsrColorPixel( d, "blue" ) );
        gv.foreground = WhitePixel( d, 0 );
        gv.background = UsrColorPixel( d, "red" );
        gv.line_width = 20;
        XChangeGC( d, gc, GCForeground|GCBackground|GCLineWidth, &gv );
        XDrawLine ( d, w, gc, 20, 20, 380, 180 ); /* CapButt */
        Pause ( d, 3 );

        gv.cap_style = CapRound;
        XChangeGC( d, gc, GCCapStyle, &gv );
        XClearWindow( d, w );
        XDrawLine ( d, w, gc, 380, 20, 20, 180 );
        Pause ( d, 3 );

        gv.cap_style = CapProjecting;
        XChangeGC( d, gc, GCCapStyle, &gv );
        XClearWindow( d, w );
        XDrawLine ( d, w, gc, 20, 20, 380, 180 );
        Pause ( d, 3 );

/*
 *      ¿©±â±îÁö´Â XDrawLine ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ĸ ½ºÅ¸ÀÏ(Cap)ÀÌ ¼­·Î
 *      ¾î¶»°Ô ´Ù¸¥Áö È®ÀÎÇØ º¸½Ê½Ã¿ä.  
 */

        XSetLineAttributes ( d, gc, 10, LineDoubleDash, CapRound, JoinRound );
        XSetDashes( d, gc, 0, dash_list, 4 );
        XClearWindow( d, w );
        XDrawSegments ( d, w, gc, segs, 2 );
        Pause ( d, 3 );

        XClearWindow ( d, w );
        XSetLineAttributes ( d, gc, 15, LineOnOffDash, CapButt, JoinBevel );
        XDrawLines( d, w, gc, points, 4, CoordModeOrigin );
        Pause ( d, 3 );

/*
 *      ¼±³¡Á¡ ½ºÅ¸ÀÏ¿¡´Â CapButt, CapRound, CapProjecting 3 °¡Áö°¡ ÀÖ½À´Ï´Ù.
 *      ¼±°ú ¼±ÀÌ ¸¸³ª´Â ¹æ½Ä¿¡µµ ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù. JoinMiter, JoinRound,
 *      ±×¸®°í JoinBevel ÀÌ ±×°ÍÀÌÁÒ.
 *      Áß¿äÇÑ °Í! ¼±ÀÇ ½ºÅ¸ÀÏ¿¡´Â ±×³É LineSolid, LineOnOffDash, LineDouble-
 *      Dash °¡ ÀÖ½À´Ï´Ù.
 *      XSetLineAttributes(), XSetDashes()´Â ¿¬±¸°úÁ¦ÀÔ´Ï´Ù.
 */




/*
 *      [3] ÀÌÁ¦ 2Â÷¿øÀ¸·Î °¡º¾½Ã´Ù. »ç°¢ÇüºÎÅÍ ½ÃÀÛ!
 */

        XClearWindow( d, w );
        XSetLineAttributes ( d, gc, 5, LineSolid, CapButt, JoinRound );
        XDrawRectangle( d, w, gc, 50 /* X */, 50 /* Y */,
                                300 /* width */, 100 /* height */ );
        Pause( d, 3 );

        {
            XRectangle rect[7];
            int i;

            for ( i = 0; i < 7 ; i ++ )
            {
                rect[i].x = 10 + i * 50; rect[i].y = 20;
                rect[i].width = 40 ; rect[i].height = 150;
            }
            XClearWindow( d, w );
            XSetLineAttributes(d,gc,1,LineDoubleDash,CapProjecting,JoinMiter);
            XDrawRectangles ( d, w, gc, rect, 7 );
            Pause ( d, 3 );
        } 

/*
 *      ÀÚ, XDrawRectangle(s)ÀÇ »ç¿ë¹ýÀ» ¾Æ¼Ì³ª¿ä? ±×·¸´Ù¸é ¿¬±¸°úÁ¦°¡ ÀÖ½º
 *      ´Ï´Ù. ÀÌµé ´ë½Å¿¡ XFillRectangle(s)¸¦ ½áº¸½Ê½Ã¿ä. ¾î¶² ÀÏÀÌ ÀϾ
 *      ´Ï±î?
 */



/*
 *      [4] µÕ±×·± °Íµµ ±×·Áº¾½Ã´Ù.
 */

        {
            int i, radi;
            XArc arc[2];

            XClearWindow ( d, w );
            XSetLineAttributes(d,gc,10,LineSolid,CapRound,JoinRound);
            for ( radi = 0 ; radi <= 360 ; radi += 90 )
            {
                XDrawArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 );
                Pause( d, 1 );
            }
            for ( i = 0 ; i < 2 ; i ++ ) {
                arc[i].x = 30 + 200 * i;
                arc[i].y = 30;
                arc[i].width = arc[i].height = 100;
                arc[i].angle1 = 0 * 64;
                arc[i].angle2 = 90 * ( i + 1 ) * 64;
            }
            XClearWindow ( d, w );
            XDrawArcs( d, w, gc, arc, 2 );
            Pause( d, 1 );
            XSetForeground( d, gc, UsrColorPixel(d,"yellow") );
            for ( i = 0 ; i < 2 ; i ++ ) {
                XClearWindow ( d, w );
                XSetArcMode ( d, gc, i == 0 ? ArcPieSlice : ArcChord );
                for ( radi = 0 ; radi <= 360 ; radi += 90 )
                {
                    XFillArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 );
                    Pause( d, 1 );
                }
                XClearWindow( d, w );
                XFillArcs( d, w, gc, arc, 2 );
                Pause( d, 1 );
            }
        }



        /* GC, â Æı« & ¼­¹ö¿ÍÀÇ Á¢¼Ó ÇØÁ¦ */
        XFreeGC( d, gc );
        XUnmapWindow( d, w );
        XDestroyWindow( d, w );

        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 );

        return ( c0.pixel );
}

void Pause( Display *d, int secs )
{
        XFlush ( d );
        sleep( secs );
}

ÄÄÆÄÀÏÀº -lX11 ¿É¼ÇÀ» Áּż­ Xlib ¿Í ¸µÅ©½ÃÄÑ ÁÖ½Ã¸é µË´Ï´Ù.

ÃÖ´ëÇÑ Xlib ±×·¡ÇÈ ÇÔ¼öµéÀÇ ±â´ÉÀ» º¸ÀÌ·Á°í ³ë·ÂÇß½À´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ º¸¿©µå¸° °Í¸¸À¸·Î´Â ¸¹ÀÌ ºÎÁ·ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÀÚÀ¯·Î¿î ´Ù°¢ÇüÀ» ±×¸®¸é¼­ »ö»óÀ» Ä¥ÇÒ ¼ö ÀÖ´Â XFillPolygon()°ú °°ÀÌ À¯¿ëÇÑ ÇÔ¼ö´Â ¼³¸íµå¸®Áö ¾Ê¾Ò½À´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº ¿©·¯ºÐÀÇ Å½±¸¿¡ ´Þ·Á ÀÖ½À´Ï´Ù.

´ÙÀ½ ¹ø¿¡´Â ÆùÆ® Ãâ·ÂÇÏ´Â ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸±â·Î ÇսôÙ. ¿µ¹®ÀÚ Ãâ·Â°ú ´ç¿¬È÷ ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¾ê±â¸¦ Çغ¸µµ·Ï ÇÏÁÒ. ÆùÆ® °­ÀǸ¦ ¸¶Ä¡¸é ÀÌÁ¦ X À©µµ¿ì´Ù¿î ÇÁ·Î±×·¥À» © ¼ö ÀÖ´Â "À̺¥Æ®"¸¦ ´Ù·ê ¼ö ÀÖ°Ô µÇ°Ú±º¿ä. Xlib µµ ¾ó¸¶ ³²Áö ¾Ê¾Ò½À´Ï´Ù. Èû³»¼¼¿ä. :)

5. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÆùÆ®

Xlib ¿Í ÇÔ²² ÇÏ´Â X ÇÁ·Î±×·¡¹ÖÀÌ Àç¹ÌÀÖÀ¸½Å°¡¿ä? Xlib Àº ¾ÆÁÖ Àú¼ö¼øÀÇ ÇÔ¼ö ¸ðÀ½ÀÔ´Ï´Ù. µû¶ó¼­ ÀÌ°Í ÀÚü¸¸À¸·Î´Â ÇÁ·Î±×·¥À» Â¥³»±â°¡ »ó´çÈ÷ Èûµì´Ï´Ù. ½ÇÁ¦ ¾îÇà °³¹ß¿¡ À־´Â ¹Ù·Î À§ »óÀ§ ¼öÁØÀÎ Toolkit ¼öÁØ¿¡¼­ ÀÌ·ç¾îÁöÁö¿ä. ¶Ç´Â ¸¹Àº »ç¶÷µéÀÌ »ç¿ëÇÏ°í ÀÖ´Â ½ÇÁúÀûÀΠǥÁØ ¸ðƼÇÁ(Motif)°¡ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ Á¦°¡ °­Á¶ÇÏ°í ½ÍÀº °ÍÀº Toolkit°ú ¸ðƼÇÁ¸¸À¸·Î´Â ¾î¶² ÁÁÀº ÇÁ·Î±×·¥µµ ¸¸µé ¼ö°¡ ¾ø½À´Ï´Ù. Xlib °¡ Àú¼öÁØÀÌÁö¸¸ ±×°ÍÀº ´Ù½Ã ¸»ÇÏ¸é °­·ÂÇÏ´Ù´Â ¸»µµ µË´Ï´Ù. ÀÌ µÑÀÌ °áÇÕÇؾ߸¸ ¼º´ÉÁÁÀº ÇÁ·Î±×·¥ÀÌ ³ª¿Â´Ù°í È®½ÅÇÕ´Ï´Ù.

¾ÆÁ÷µµ ÇؾßÇÒ ¾ê±âµéÀÌ ¸¹Áö¸¸, ¾ÕÀ¸·Î ³²Àº °Íµé¿¡ ´ëÇؼ­ °£·«ÇÏ°Ô ¸»¾¸µå¸®°í ¿À´ÃÀÇ °­ÀǸ¦ ½ÃÀÛÇغ¼±î ÇÕ´Ï´Ù. ¿À´ÃÀÇ ÆùÆ® Ãâ·Â °­ÀÇ¿¡ ÀÌ¾î °¡Àå Áß¿äÇÏ´Ù°í »ý°¢µÇ´Â À̺¥Æ® 󸮹®Á¦ ( ¸¶¿ì½º À̺¥Æ®, Å°º¸µå À̺¥Æ® )°¡ ³²¾Æ ÀÖ½À´Ï´Ù. X À©µµÀÇ Ä÷¯ ½Ã½ºÅÛ¿¡ ´ëÇؼ­´Â Xt ( X Toolkit ) ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡¼­ ¼³¸íµå¸®°Ú½À´Ï´Ù. ³Ê¹« ¿À·§µ¿¾È Xlib ÇÁ·Î±×·¡¹Ö¿¡ ¸Ó¹«¸£¸é Èï¹Ì¸¦ Àұ⠽±±â ¶§¹®ÀÔ´Ï´Ù.

5.1 ÆùÆ® Ãâ·Â¿¡ ´ëÇÏ¿© ...

¾î¶°ÇÑ ÅؽºÆ®(Text)¸¦ Ãâ·ÂÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ 3 °¡Áö °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

  1. ¿ì¼± ¿øÇÏ´Â ÆùÆ®¸¦ °ñ¶ó¼­ ¼­¹ö´õ·¯ ±× ÆùÆ®¸¦ ÀûÀçÇ϶ó°í ¿äûÇÑ´Ù. ±×·¯¸é ¼­¹ö´Â ¿ª½Ã ÆùÆ®¿¡ ´ëÇÑ ID¸¸À» µ¹·ÁÁØ´Ù. ¸¸¾à ¿äûÇÑ ÆùÆ®°¡ ¾ø´Ù¸é ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
  2. ÆùÆ®µµ °á±¹¿£ "±×¸®´Â °Í"ÀÌ´Ù. µû¶ó¼­ ±×·¡ÇÈ ÄÁÅؽºÆ® GC°¡ ÀÌ¹Ì ÀÖ¾î¾ß ÇÑ´Ù. ÀÏ´Ü ¸¸µé¾î ³õÀº GC¿¡´Ù°¡ ÆùÆ® ID¸¦ ÁöÁ¤ÇØÁØ´Ù.
  3. ÀÌÁ¦´Â ÀûÀýÇÑ ÇÔ¼ö¸¦ ÅëÇؼ­ Ãâ·ÂÇÑ´Ù. ÀÌ ¶§ ¿ì¸®´Â 2]¹ø °úÁ¤¿¡¼­ ÀÌ¹Ì ÆùÆ® ID Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â GC ¸¸À» »ç¿ëÇÏ¸é µÈ´Ù. 1¹ÙÀÌÆ®°è ¶óƾ°è ¹®ÀÚ´Â XDrawString ÇÔ¼ö¸¦, ¿ì¸®³ª¶ó¿Í °°Àº 2¹ÙÀÌÆ®°è ¹®ÀÚ´Â XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Ãâ·ÂÇÑ´Ù.

  °£·«ÇÑ ÇÔ¼öÀÇ »ç¿ë µµÇ¥¸¦ ±×·Áº¸¸é,

 [1] XLoadFont() -->  [2] XSetFont()  -->  [3] XDrawString[16]()

5.2 X À©µµ¿ìÀÇ ÆùÆ® ½Ã½ºÅÛÀ» ¾Ë¾Æº¾½Ã´Ù.

º»ÀÎÀº X À©µµ¿ì °ü¸®ÀÚ fvwm °­ÀǸ¦ Çϸ鼭 ÆùÆ®¼³Á¤ ºÎºÐ¿¡¼­ ¾ÆÁÖ °£·«ÇÏ°Ô X À©µµ¿ìÀÇ ÆùƮü°è, XLFD¶ó´Â ¸í¸í±ÔÄ¢¿¡ ´ëÇؼ­ ³íÇß´Ù. fvwm °­ÀÇ¿¡¼­´Â öÀúÇÏ°Ô À¯Àú(user) ÀÔÀå¿¡¼­ ½±°Ô ±â¼úÇÏ·Á°í ÇßÀ¸³ª, ÀÌÁ¦ ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á°í ÇϽô ¿©·¯ºÐ¿¡°Ô´Â ´õ¿í ´õ Àü¹®ÀûÀÎ Áö½ÄÀÌ ÇÊ¿äÇϸ®¶ó º¾´Ï´Ù.

Åë»ó X À©µµ¿ìÀÇ ÆùÆ®´Â /usr/lib/X11/fonts ¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. ±× ÇϺΠµð·ºÅ丮¸¦ º¸½Ã¸é 100dpi, 75dpi, Speedo, Type1, misc µîÀÇ µð·ºÅ丮¸¦ ãÀ¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× µð·ºÅ丮¿¡ µé¾î°¡º¸½Ã¸é È­ÀϸíÀÌ .pcf.Z ·Î ³¡³ª´Â ¾öû³ª°Ô ¸¹Àº È­ÀϵéÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. Z ´Â compress·Î ¾ÐÃàµÇ¾úÀ½À» ³ªÅ¸³» ÁÖ´Â °ÍÀ¸·Î¼­ X À©µµ¿ì ½Ã½ºÅÛÀº ÆùÆ®¿¡ ´ëÇÑ ¾ÐÃàÀ» Áö¿øÇÕ´Ï´Ù. ¿©·¯ºÐµµ ¾Æ½Ã°ÚÁö¸¸, ÆùÆ®°¡ Â÷ÁöÇÏ´Â µð½ºÅ© ¿ë·®Àº ¾î¸Ó¾î¸¶ ÇÕ´Ï´Ù. ƯÈ÷ M$ À©µµ¿ì °è¿­¿¡¼­ ¾²ÀÌ´ø ¿Ï¼ºÇü ÀúÀå ¹æ½ÄÀÇ ÆùÆ®µéÀº È­ÀÏ Çϳª°¡ 1¸Þ°¡¸¦ ³Ñ¾î°¡´Â °ÍÀÌ Çã´ÙÇßÁö¿ä. ±ú²ýÇÑ ¹®¼­¿¡ ´ëÇÑ ¿å½ÉÀº ´Ù¾çÇÑ ÆùÆ®¿¡ ´ëÇÑ ¿ä±¸·Î À̾îÁ³±¸¿ä. ¾ÐÃà ÆùÆ®¿¡ ´ëÇÑ Áö¿øÀº Á¤¸»·Î ÇÊ¿äÇÑ °ÍÀÓÀ» ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× ´ÙÀ½ fonts.dir, fonts.alias¿Í °°Àº Áß¿äÇÑ È­ÀÏÀ» ¸¸³ª½Ç ¼ö ÀÖ½À´Ï´Ù.

fonts.dir

ÀÌ È­ÀÏÀº ÇöÀç µð·ºÅ丮¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â ÆùÆ® È­ÀÏ¿¡ ´ëÇÑ XLFD Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù. »õ·Î¿î ÆùÆ®¸¦ ¼³Ä¡ÇÏ°í ³ª¼­´Â mkfontdir ¸í·ÉÀ» ½á¼­ fonts.dir È­ÀÏÀ» °»½ÅÇÕ´Ï´Ù.

fonts.alias

XLFD ½ÄÀÇ ¸í¸í¹æ½ÄÀ¸·Î ÆùÆ® À̸§À» ½áÁشٴ °ÍÀº »ó´çÇÑ °í¿ªÀÌ ¾Æ´Ò ¼ö ¾ø½À´Ï´Ù. ±×·¡¼­ alias º°¸íÀ» »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î¼­ ¿ì¸®°¡ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ°í ÀÖ´Â fixed ¶ó´Â À̸§ÀÇ ÆùÆ®´Â °¢°¢ÀÇ ½Ã½ºÅÛ¸¶´Ù ½ÇÁ¦·Î´Â ´Ù¸¥ ÆùÆ®¸¦ ÁöĪÇÏ°í ÀÖÀ» ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ alias´Â ÆùÆ®À̸§À» ¿Ü¿ì±â ÁÁ°Ô »ç¿ëÀÚ°¡ Á¤ÀÇÇؼ­ ¾µ ¼ö ÀÖµµ·Ï ÇØÁشٴ ¸éµµ °¡Áö°í ÀÖ°í, ƯÁ¤ ÆùÆ®À̸§ÀÌ ¸ðµç ½Ã½ºÅÛ¿¡ Ç×»ó ÀÖ´Â °Íó·³ ÇÒ ¼öµµ Àִٴµ¥ ±× ÀÇÀÇ°¡ ÀÖ½À´Ï´Ù. ¹Ù·Î À§¿¡¼­ ¿¹¸¦ µç fixed¶ó´Â À̸§ÀÇ ÆùÆ®ÀÌ ÁÁÀº ¿¹ÀÔ´Ï´Ù. Âü°í·Î fixed ¶ó´Â ÆùÆ® alias °¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é ´ëºÎºÐÀÇ °æ¿ì X ÀÚü°¡ ¶ß´Ù°¡ ¸» °Ì´Ï´Ù. ÀÌ È­ÀÏÀº ÀÚµ¿À¸·Î »ý¼ºµÇ´Â °ÍÀÌ ¾Æ´Ï´Ï ²À ¹é¾÷À» ÇØµÎ°í ¼öÁ¤ÇϽñ⠹ٶø´Ï´Ù.

fonts.scale

¿©·¯ºÐÀÌ Speedo³ª Type1 µð·ºÅ丮·Î °¡º¸½Ã¸é fonts.scaleÀ̶ó´Â È­ÀÏÀ» ãÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù. ÆùÆ® È­Àϸí°ú ±×¿¡ ´ëÇÑ XLFD ¹æ½ÄÀÇ Ç¥±â°¡ ¾º¿©Á® ÀÖ½À´Ï´Ù. ÀÌ µÎ °¡Áö Ư¼öÇÑ ÆùÆ®¿¡ ´ëÇؼ­´Â Á¶±Ý ÀÖ´Ù°¡ ¼³¸íµå¸®±â·Î ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì fonts.dir È­ÀÏ°ú ³»¿ëÀÌ °°À» °Ì´Ï´Ù.

5.3 X Logical Font Descriptio : XLFD ¿¡ ´ëÇÏ¿©

X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â ÆùÆ®°¡ °®°í ÀÖ´Â ¼ºÁúÀ» Áö½ÃÇϱâ À§ÇÏ¿© 14°³ÀÇ Çʵå·Î ÀÌ·ç¾îÁø ±â¼ú¹æ½ÄÀ» ¾¹´Ï´Ù. ¹Ù·Î ÀÌ°ÍÀ» XLFD¶ó°í ÇÏÁö¿ä. ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù.

  -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1

14°³ÀÇ Çʵå´Â ¸ðµÎ - ¹®ÀÚ·Î ºÐ¸®µÇ¾î ÀÖ½À´Ï´Ù. °¢°¢ÀÇ Àǹ̿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ ·Ï ÇÒ±î¿ä?

Á¦ÀÛÀÚ Çʵå ( Foundry Field )

º¸Åë ¸Ç ¾Õ¿¡ ¿À´Â ÀÌ Çʵå´Â * ¹®ÀÚ¸¦ ½á¼­ ¾î¶² °÷¿¡¼­ ¸¸µé¾ú´ÂÁö »ó°üÇÏÁö ¾Ê´Â °æ¿ì°¡ ¸¹½À´Ï´Ù. º¸Åë Adobe ȸ»ç°¡ ¸¸µç ÆùÆ®ÀÇ °æ¿ì¿¡´Â adobe¶ó´Â ¹®ÀÚ°¡ µé¾î°¡ ÀÖÁö¿ä. ÀÌ ¹Û¿¡µµ bitstream, b&h, schumacher, sun, kaist, hanyang, misc µîÀÇ ¹®ÀÚ¿­ÀÌ µé¾î°¡ ÀÖ´Â °ÍÀ» Á¾Á¾ º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù.

Æйи® Çʵå ( Family Field )

ÀÌ ³à¼®ÀÌ ±× ÆùÆ®ÀÇ ÀüüÀûÀÎ ¸ð¾çÀ» °áÁ¤ÇÕ´Ï´Ù. ¿ì¸®°¡ ¸¹ÀÌ µé¾îº» Helvetica, Times Roman, Courier µîµîÀÌ ±×°ÍÀÔ´Ï´Ù. ¿ì¸® ÆùÆ®ÀÎ °æ¿ì¿¡´Â myeongjo, gothic µîÀÌ ¹Ù·Î ±×°ÍÀÌÁÒ.

¹«°Ô Çʵå(?) ( Weight Field )

medium, bold, demibold µîÀÇ °ªÀ» °¡Áý´Ï´Ù. ¾î¶² ÀǹÌÀÎÁö ¾Æ½Ç °Ì´Ï´Ù.

°æ»çµµ Çʵå(?) ( Slant Field )

È°ÀÚÀÇ °æ»ç¿¡ ´ëÇÑ Áö½ÃÀÚÀÔ´Ï´Ù. r Àº ¿ì¸®°¡ ¾Ë°í ÀÖ´Â Á¤»óÀûÀÎ ·Î¸¸Ã¼, i´Â ÀÌÅŸ¯Ã¼¸¦ ¸»Çϸç, o ´Â ¹«¾ùÀϱî¿ä? Oblique ¶ó°í Çؼ­ À̰͵µ °æ»ç¹®ÀÚüÀε¥, ¹¹¶ó°í ¼³¸íµå·Á¾ß ÇÒÁö... ÀÌ°Í ¸»°íµµ ri, ro µîÀÇ °ªÀÌ Àִµ¥ °¢°¢ reverse italic, reverse oblique ÀÇ Àǹ̸¦ °®½À´Ï´Ù.

Æø Çʵå ( Setwidth Name Field )

º¸ÅëÀÇ °æ¿ì ¸ðµÎ normal·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ¿Ü¿¡ condensed, narrow µîÀÇ °ªÀ» °¡Áý´Ï´Ù.

ºÎ°¡Àû ½ºÅ¸ÀÏ Çʵå(?) ( Additional Style Field )

¼¼¸®ÇÁ(Serif)¿Í »ê¼¼¸®ÇÁ(Sans Serif)ÀÇ Â÷ÀÌ °°ÀÌ ºÎ°¡Àû ½ºÅ¸ÀÏÀÇ Â÷À̸¦ ³ªÅ¸³» ÁÖ´Â ÇʵåÀÔ´Ï´Ù. ¼¼¸®ÇÁ´Â º¸Åë ¿ì¸®°¡ º¸´Â ·Î¸¶ÀÚ È°Àڷμ­ I, M °ú °°Àº ±ÛÀÚ À§ ¾Æ·¡¿¡ ÀÖ´Â °¡´Ã°í ªÀº ¼±À» ¸»ÇÕ´Ï´Ù. ¹ºÁö °¨ÀÌ ¿À½Ê´Ï±î? I ÀÚ À§ ¾Æ·¡¿¡ ÀÖ´Â ¿·À¸·Î °¡´Â ¼± º¸À̽ÃÁÒ? ¿©·¯ºÐÀÌ ÇÑÅÒÀ» ¾²½Ã°í ¶ÇÇÑ ±âº» ÆùÆ® (-kaist-*-johab-* ...)¸¦ ¾²½Å´Ù¸é Áö±Ý ´çÀå È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ¼¼¸®ÇÁ ¹®ÀÚ¶õ ¹Ù·Î ±×·¯ÇÑ Àå½ÄÀ» °®´Â ¹®ÀÚ¸¦ ¸»ÇÕ´Ï´Ù. »ê¼¼¸®ÇÁ´Â ±×·¯ÇÑ Àå½ÄÀÌ ¾ø´Â ¹®ÀÚ¸¦ ¸»ÇÕ´Ï´Ù. Sans ¶ó°í ÇÏ´Â °ÍÀÌ ¿µ¾î °í¾î·Î Without À̶ó´Â ÀǹÌÀ̱⠶§¹®ÀÔ´Ï´Ù. Sans Serif ¶Ç´Â Sanserif ¶ó°í ÇÕ´Ï´Ù. º¸Åë nil ÀÇ °ª, ¾Æ¹« °ªµµ ¾ø´Â °æ¿ì°¡ Çã´ÙÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ ÆùÆ®¸íÀ» »ìÆ캸½Ã¸é Ç×»ó 6¹ø° Çʵ尡 ¾Æ¹« °ªµµ ¾øÀÌ -- ÀÌ·± ½ÄÀ¸·Î 󸮵Ǿî ÀÖ´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù.

È°ÀÚ Å©±â Çʵå ( Pixel Size Field )

¾ÆÁÖ ¸¹ÀÌ »ç¿ëÇÏ´Â Çʵå·Î¼­ È°ÀÚÀÇ Å©±â¸¦ ³ªÅ¸³»´Â ÇʵåÀÔ´Ï´Ù. ¿ì¸®°¡ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â ¿µ¿ªÀº ¾Æ¸¶µµ 10   20 »çÀÌ°¡ ¾Æ´Ò±î »ý°¢ÇÕ´Ï´Ù. Scalable ÆùÆ®¿¡´Â ÇØ´ç»çÇ×ÀÌ ¾ø½À´Ï´Ù. ÀÚÀ¯·Ó°Ô ÁöÁ¤ÇØ Áֽʽÿä. ±× ÀÌ¿ÜÀÇ ºñÆ®¸Ê ÆùÆ®µéÀº ƯÁ¤ Å©±âÀÇ È°Àڵ鸸ÀÌ Á¸ÀçÇÕ´Ï´Ù.

Çʵå ( Point Size Field )

´ÜµµÁ÷ÀÔÀûÀ¸·Î ¸ð¸¨´Ï´Ù! :)

X ¹æÇâ ÇØ»óµµ Çʵå ( X Resolution Field )
Y ¹æÇâ ÇØ»óµµ Çʵå ( Y Resolution Field )

°¢°¢ X, Y ¹æÇâÀÇ Çػ󵵸¦ ³ªÅ¸³À´Ï´Ù. ¿©·¯ºÐÀÌ 75 dpi, 100 dpi ÆùÆ®¸¦ ¼³Ä¡ ÇÏ¼Ì´Ù¸é ±× µð·ºÅ丮¿¡ °¡¼­ È®ÀÎÇغ¸½Ê½Ã¿ä. 75, 100 µîÀÇ ¼ýÀÚ°¡ ¾º¿©Á® ÀÖ½À´Ï´Ù. Scalable¿¡¼­´Â 0 ÀÔ´Ï´Ù.

°ø°£ Çʵå ( Space Field )

¿µ¹®ÀÚ¿¡¼­ È°ÀÚ I¿Í MÀ» »ý°¢ÇØ º¾½Ã´Ù. µÎ ¹®ÀÚÀÇ ÆøÀÌ ´Ù¸£ÁÒ? I Àڴ ȦÂßÇÑ ¹®ÀÚÀÌ°í M ÀÚ´Â ¶×¶×ÇÑ ¹®ÀÚÀε¥, ÄÄÇ»ÅÍ¿¡¼­´Â µÎ È°ÀÚ¸¦ ¶È°°Àº »ç°¢ÇüÀÇ ¿µ¿ª¿¡ ³Ö¾î »ý°¢ÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù. ±×³É Ãâ·ÂÇϱâ ÆíÇϴϱî¿ä. ±×·¯ÇÑ ÀϹÝÀûÀÎ °æ¿ì¸¦ m , Monospace ¶ó°í Çϸç, I¿Í M ÀÚ¿Í °°ÀÌ Æø¿¡ µû¶ó °£°ÝÀ» Á¶È­·Ó°Ô Á¤·ÄÇØÁÖ´Â °ÍÀ» p , Proportional ºñ·Ê¹®ÀÚ¶ó°í ÇÕ´Ï´Ù. ÃâÆǹ° ±×¸®°í ¼öÁØ ³ôÀº ¿¡µðÅÍÀÇ °æ¿ì p È°ÀÚ¸¦ ¾²°ÚÁö¿ä? c ´Â m °ú µ¿ÀÏÇÑ ÀǹÌÀÔ´Ï´Ù. ¿ì¸®°¡ ¾²°íÀÚ ÇÏ´Â È°ÀÚ´Â ´ëºÎºÐ m ÀÔ´Ï´Ù. °è»êÀÌ °£ÆíÇϴϱî¿ä.

Æò±Õ Æø Çʵå ( Average Width Field )

±ÛÀÚ ±×´ë·Î ÀÔ´Ï´Ù. Æò±ÕÀ̶ó°í ÇÑ ÀÌÀ¯´Â À§¿¡¼­ ¸»¾¸µå¸®´Â °Í¿¡ ÀÇÇÏ¸é ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. Çѱۿ¡´Â Àû¿ë»çÇ× ¾ø´Â °Í °°½À´Ï´Ù.

µî·Ï Çʵå ( Registry Field )

µî·Ï ÇʵåÀÔ´Ï´Ù. ¿©±â¿¡ µé¾î°¡´Â °ª ¸î °¡Áö¸¦ ¼Ò°³ÇÔÀ¸·Î½á ¼³¸íÀ» ´ë½Å ÇÏ°Ú½À´Ï´Ù. adobe, dec, iso646.1991, ¿ì¸®°¡ ¾ÆÁÖ ÀÚÁÖ º¸´Â iso8859, johab, johabs, ksc5601.1987 µîÀÌ ±×°ÍÀÔ´Ï´Ù. Áï ¹®ÀÚ ¼¼Æ®¸¦ ÀǹÌÇÏ´Â °Í °°ÁÒ? johab(s)Àº Á¶ÇÕÇü ¹æ½ÄÀÇ ÀÚ¼Ò ÆùÆ®À̸ç, ksc5601.1987Àº ¿Ï¼ºÇü ¹æ½ÄÀÇ ±ÛÀÚ ÆùÆ®ÀÔ´Ï´Ù. ÀϹÝÀûÀÎ ¿µ¹®ÀÚ´Â iso8859ÀÔ´Ï´Ù.

ÀÎÄÚµù Çʵå ( Encoding Field )

ÈÞ, ¸¶Áö¸· ÇʵåÀ̱º¿ä. 0, 1, 8, irv µîÀÇ °ªµéÀÌ µé¾î°¡ ÀÖ½À´Ï´Ù. Àß ¸ð¸£´Â ÇʵåÀÔ´Ï´Ù. 13¹ø° Çʵå¿Í ¿¬°üÇÏ¿© »ý°¢ÇϽøé ÁÁ½À´Ï´Ù. º¸Åë iso8859-1, ksc5601.1987-0, iso646.1991-irv °ú °°Àº ²ôÆ®¸Ó¸® ±ÛÀÚµéÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù.

5.4 ¿µ¹® ÅؽºÆ® Ãâ·Â ¿¬½À

Ãâ·Â ¿¹¸¦ »ìÆ캸±â·Î ÇսôÙ.

  • ¿¹Á¦
 #include <stdio.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>

 int main()
 {
        Display         *dpy;
        Window          w;
        Font            f;
        GC              gc;
        XSetWindowAttributes xswa;

        xswa.override_redirect = True;
        dpy = XOpenDisplay ( NULL);
        w   = XCreateSimpleWindow( dpy, RootWindow( dpy, 0 ), 50, 50,
                                        400, 300, 5, BlackPixel( dpy, 0 ),
                                                WhitePixel( dpy, 0 ) );
        XChangeWindowAttributes ( dpy, w, CWOverrideRedirect, &xswa );

        XMapWindow ( dpy, w );

        /* ----------------- ¿©±â¼­ºÎÅÍ°¡ º»°ÝÀûÀ¸·Î Áß¿äÇÑ ºÎºÐ ----- */
        gc = XCreateGC( dpy, w, 0L, ( XGCValues * ) NULL );     /* [1] */
        f  = XLoadFont( dpy, "fixed" );                         /* [2] */
        XSetFont ( dpy, gc, f );                                /* [3] */

        /* ÆùÆ® µî·ÏÀÌ µÈ GC ¸¦ °¡Áö°í Àü°æ»öÀ¸·Î ¹®ÀÚ¿­ Ãâ·Â */
        XDrawString( dpy, w, gc, 100, 130, 
                        "Hello, Linuxers! Never Seen :)", 16 ); /* [4] */ 
        /* ----------------------------------------------------------- */

        XFlush( dpy );
        getchar();

        /* µÞó¸® */
        XUnloadFont( dpy, f );
        XFreeGC( dpy, gc );
        XDestroyWindow( dpy, w );
        XCloseDisplay( dpy );
 }

ÄÄÆÄÀÏ ¹æ¹ýÀº

     gcc -o drawstring drawstring.c -L/usr/X11/lib -lX11

¼Ò½º ¿¹Á¦°¡ Á» ÁÁÁö ¾Ê´õ¶óµµ ÀÌÇØÇϽñ⠹ٶø´Ï´Ù. :) ÀÌ¹Ì Àü¿¡ ¼³¸íµå¸° ºÎºÐÀº »©°í º»°ÝÀûÀ¸·Î ´Ù¸¥ ºÎºÐ¸¸ ¼³¸íµå¸®°Ú½À´Ï´Ù.

ÀÚ, ÆùÆ®µµ °á±¹Àº Á¡À» Âï¾î¼­ â¿¡´Ù ±×¸®´Â °ÍÀ̹ǷΠGC ¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. ¿ì¼±Àº GC ¸¦ Çϳª ¸¸µé¾î¾ß°ÚÁÒ?

  gc = XCreateGC( dpy, w, 0L, ( XGCValues* ) NULL );

±×¸®°í À§¿¡¼­ °­Á¶Çß´ø ÆùÆ® ÀûÀç¿Í »ç¿ëÀÇ Áß°£ °úÁ¤À» ¸Ó¸® ¼Ó¿¡ ¶°¿Ã¸®½Ê½Ã¿ä.

ÆùÆ® ÀûÀç ( Font Loading )

 ÇÔ¼ö ¿øÇü :

 Font XLoadFont( Display *dpy, char *font_name );

font_name ¹®ÀÚ¿­Àº ¹Ù·Î À§¿¡¼­ ±æ°Ô ¼³¸íµå·È´ø XLFD ½ÄÀÇ ¿ÏÀüÇÑ ÆùÆ®À̸§ ¶Ç´Â ÆùÆ® º°¸í(alias)¸¦ ÁöÁ¤ÇØÁÖ½Ã¸é µË´Ï´Ù. ¼º°øÇϸé Font Çü º¯¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù. ½ÇÆÐÇÏ¸é ¹°·Ð NULL ÀÌ°ÚÁö¿ä?

À§¿¡¼­´Â fixed ¶ó´Â º°¸íÀ» °¡Áø X À©µµ¿ìÀÇ °¡Àå ±âº»ÀûÀÎ ÆùÆ®¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ±× ÆùÆ®°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é X À©µµ¿ì ÀÚü°¡ ¾Æ¸¶ ½ÃÀÛÇÏÁö ¾Ê¾ÒÀ»°ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ¾Æ½Ã´Â ÆùÆ® À̸§ ¶Ç´Â Á÷Á¢ /usr/X11/lib/fonts µð·ºÅ丮¿¡ °¡¼Å¼­ °¢ µð·ºÅ丮ÀÇ fonts.dir ¿¡ ³ª¿ÍÀÖ´Â °ÍµéÀ» ½ÃÇèÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù.

ÇÑ ¹ø ¸ÚÁø ¾Æµµºñ»çÀÇ ÆùÆ®¸¦ »ç¿ëÇغ¼±î¿ä? ±×·³ fixed ¶ó°í ¾²½Å ºÎºÐÀ» ¹Ù²ã º¸½Ê½Ã¿ä.

  -adobe-courier-medium-o-normal--25-180-100-100-m-150-iso8859-1

±×¸®°í ´Ù½Ã ÄÄÆÄÀÏ...

±×·±µ¥ ¸¸¾à¿¡ ¿©·¯ºÐ²²¼­ ÁöÁ¤ÇØÁֽŠÆùÆ®¸¦ X ¼­¹ö( Á¤È®È÷´Â ÆùÆ®¿¡ °üÇÏ¿©´Â X ÆùÆ® ¼­¹ö xfs ÀÇ ´ã´ç )°¡ ãÁö ¸øÇÒ ¶§, ¶Ç´Â Áö¿øÇÏÁö ¾Ê´Â °æ¿ì ¿¡·¯°¡ ¹ß»ýÇϸç Font Çü ¹Ýȯ°ª¿¡ ¾î¶² °ªÀÌ ¿Ã Áö´Â Á¤È®È÷ ¸ð¸¨´Ï´Ù.

±×¸®°í stderr ¿¡ ´ÙÀ½°ú °°Àº ¸Þ¼¼Áö°¡ Ãâ·ÂµË´Ï´Ù.

X Error of failed request: BadName(named color or font does not exist)
  Major opcode of failed request:  45 (X_OpenFont)
  Serial number of failed request:  9
  Current serial number in output stream:  15

ÆùÆ® ÀûÀç¿Í °üÇÑ ÇÑ ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö¿¡¼­ XLoadFont ÇÔ¼ö¸¦ ¾²Áö´Â ¾Ê´Â °Í °°½À´Ï´Ù. ´ë½Å XLoadQueryFont ¶ó°í ÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇÏÁö¿ä. :) ÀÚ... ±×·±µ¥ ¿ä°Ç ¿©·¯ºÐ²² °úÁ¦·Î ³²°Ü¾ß ÇÏ°Ú±º¿ä. ¹Ù·Î ´ÙÀ½¿¡ ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù. °úÁ¦´Â XLoadQueryFont, ÀÌ¿Í °ü·ÃÇÑ XFontStruct ÀÇ ±¸Á¶ Á¶»çÀÔ´Ï´Ù. ¸ÇÆäÀÌÁö¿¡ ³Ê¹«µµ Á¤È®È÷ ³ª¿Í ÀÖÀ¸´Ï±ñ °ÆÁ¤ÇÏÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.

ÆùÆ®¸¦ GC ¿¡ µî·Ï

 ÇÔ¼ö ¿øÇü :

 XSetFont( Display *dpy, GC gc, Font font );

ÆùÆ® ID °ªÀ» GC Á¤º¸¿¡ ¼ö·ÏÇϵµ·Ï ¿äûÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾ÕÀ¸·Î Ãâ·ÂµÇ´Â ÅؽºÆ®´Â GC ¿¡ ÁöÁ¤µÇ¾î ÀÖ´Â Àü°æ»öÀ¸·Î Ç¥½ÃµÇ°Ô µË´Ï´Ù.

±×·¯°í º¸´Ï GC ¶ó°í ÇÏ´Â °ÍÀº ±×·¡ÇÈ¿¡ °üÇÑ ¸ðµç Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â ³à¼®À̶ó°í ÇÒ ¼ö°¡ Àֳ׿ä. ´Ù½Ã ÇÑ ¹ø ±â¾ïÇսôÙ! X À©µµ¿ì ±×·¡ÇÈ¿¡ À־ Áß¿äÇÑ ¿ä GC ¸¦.... :)

½ÇÁ¦ ÅؽºÆ® Ãâ·Â

 ÇÔ¼ö ¿øÇü :

 XDrawString(display, d, gc, x, y, string, length)
              Display *display;
              Drawable d;
              GC gc;
              int x, y;
              char *string;
              int length;

Drawable Àº Window Çü º¯¼ö³ª Pixmap Çü º¯¼öÀ» ¸»ÇÏÁÒ? ÀÚ, ⠾ȿ¡¼­ÀÇ ÁÂÇ¥°ªÀ» ÁÖ½Ã°í ¹®ÀÚ¿­ string À» ³Ñ°Ü ÁÝ´Ï´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ÀØÁö ¸¶¼Å¾ß ÇÒ°ÍÀº ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ ¾ó¸¶ÀÎÁö¸¦ length ¿¡ ÀúÀåÇؼ­ ³Ö¾îÁÖ¼Å¾ß µÈ´Ù´Â »ç½ÇÀÔ´Ï´Ù.

¿©·¯ºÐ, À§ ¿¹Á¦ ÇÁ·Î±×·¥ ¼Ò½º¿Í ½ÇÇàÅ°½Å È­¸é¿¡ Ãâ·ÂµÈ °á°ú¿¡¼­ ¹º°¡ ÀÌ»óÇÑ Á¡À» ¹ß°ßÇÏÁö ¾ÊÀ¸¼Ì½À´Ï±î? :>>

¿¹. ±×·¸½À´Ï´Ù. "Hello, Linuxers! Never Seen :)" ¶ó°í ¹®ÀÚ¿­À» ÁÖ±ä ÇßÁö¸¸ µÞºÎºÐ Áï, 'Never Seen :)' À̶ó°í ÇÏ´Â ºÎºÐÀº ½ÇÁ¦ Ãâ·ÂÀÌ µÇÁú ¾Ê½À´Ï´Ù.

µÞó¸®

¼¼»ó¸¸»ç ½ÃÀÛµµ Áß¿äÇÏ°í °úÁ¤µµ Áß¿äÇÏÁö¸¸ À¯Á¾ÀÇ ¹Ì¸¦ °ÅµÎ´Â °Íµµ Áß¿äÇÏ´Ù°í »ý°¢ÇÕ´Ï´Ù. /* µÞó¸® */¶ó°í ÁÖ¼®À» ´Ü ºÎºÐ¿¡¼­´Â XUnloadFont() À» »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. ±× µÚÀÇ ¸ðµç °úÁ¤µµ ¸¶Âù°¡ÁöÀÌÁö¸¸ ÇÁ·Î±×·¥ Á¾·á ÈÄ ÀÚµ¿À¸·Î ÀÌ·ç¾îÁö´Â °úÁ¤À̱ä ÇÕ´Ï´Ù. ÇÏÁö¸¸, ¿©·¯ºÐ²²¼­ ¹º°¡ »ó¿ë ÇÁ·Î±×·¥À̳ª ¹º°¡ ±×·²µíÇÑ ÇÁ·Î±×·¥À» ¸¸µå½Ã·Á°í ÇÏ½Å´Ù¸é ²À µÞ󸮸¦ ÀßÇØÁֽʽÿä.

6. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÇѱÛÆùÆ®

ÀÚ, º¹½ÀÇغ¼±î¿ä? X À©µµ¿ì¿¡¼­ ÇϳªÀÇ ¹®ÀÚ ¶Ç´Â ¹®ÀÚ¿­À» Ãâ·ÂÇϱâ À§Çؼ­´Â ¸î °¡Áö °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

  1. ÀÚ½ÅÀÌ ¿øÇÏ´Â ÆùÆ®¸í( XLFD ¹æ½ÄÀÌµç º°¸íÀÌµç °£¿¡... )À» ¾Ë°í XLoadFont ÇÔ¼ö·Î X À©µµ¿ìÀÇ ÆùÆ®¼­¹ö(xfs)·ÎºÎÅÍ Font ID¸¦ ¹Þ¾Æ¿É´Ï´Ù.
  2. ±× ID ¸¦ °¡Áö°í ±×·¡ÇÈ ÄÜÅؽºÆ®(GC)¿¡ µî·ÏÇÕ´Ï´Ù.
  3. ÀÌÁ¦ ¸¶Áö¸·À¸·Î XDrawString ÇÔ¼ö¸¦ ½á¼­ ¿øÇϴ âÀÇ ¿øÇÏ´Â À§Ä¡¿¡´Ù ¹®ÀÚ¿­À» »Ñ·ÁÁÝ´Ï´Ù.

¾ÆÁÖ °£´ÜÇÑ °úÁ¤ÀÌÁÒ? ¿À´ÃÀº ÀÌ°ÍÀ» ½ÉÈ­ÇнÀÇÏ°Ú½À´Ï´Ù. ±×¸®°í ÇÑ±Û Ãâ·Â¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁÒ.

6.1 ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¸î °¡Áö À̾߱â

½ÃÀÛÇÏ´Â Áö·çÇÑ À̾߱â

ÄÄÇ»Å͸¦ ¾²¸é¼­ ¿ì¸®¸¦ °¡Àå ¸¹ÀÌ ±«·ÓÈ÷´Â ¹®Á¦ Áß¿¡ Çϳª°¡ ¹Ù·Î ÇÑ±Û ¹®Á¦ ÀÔ´Ï´Ù. À߸øµÈ Á¤Ä¡·Î ÀÎÇØ ¿ì¸® ÇÑ±Û ÄÚµå´Â Á¶ÇÕÇü/¿Ï¼ºÇü ÀÌÁ¦´Â ¾ó¸¶Àü °øÁøû¿¡¼­ ¸¸µç °ÅÀÇ À¯¸í¹«½ÇÇÑ KSC5700 ÄÚµå, M$ µîÀÌ ÁÖÃàÀÌ µÇ¾î ÃßÁøÇÏ°í ÀÖ´Â À¯´ÏÄÚµå, M$ »ç¿¡¼­ Çѱ¹ÀεéÀ» ¿ì·ÕÇÏ´Â µíÀÌ ¹öÁ£ÀÌ ¸¸µé¾î ³õ°í À©µµ±× 95¿Í À©µµ±× NT ¿¡¼­ ¾²°í ÀÖ´Â È®Àå¿Ï¼ºÇü( ¶Ç´Â ÅëÇտϼºÇü, À̸§ÀÌ ¾îÂî µÇ¾úµç ½Çü´Â °°À½ )ÀÌ ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ÇѱÛÀÌ °ÅÀÇ ¸ö»ìÀ» ¾Î°í ÀÖ´Ù°í Çصµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ÄÄÇ»ÅÍÀÇ ÃÊâ±â( ÇöÀçÀÇ ÇÑÄÄ»ç »çÀå ÀÌÂùÁø¾¾°¡ ±× À¯¸íÇÑ ¾Æ·¡ÇѱÛÀ» ¸¸µé´ø ½ÃÀý ÀÌÀü )¿¡ °¢ ȸ»ç¿¡¼­ ¿Õ¼ºÇÏ°Ô º¸¿©ÁÖ¾ú´ø ÇѱÛÈ­ÀÇ ¿­±â´Â Á¤¸»·Î ¶ß°Å¿ü½À´Ï´Ù. ±×¾ß ¹°·Ð ´ç¿¬È÷ Á¶ÇÕÇüÀ̾úÁö¿ä. ÇÏÁö¸¸ Á¤ºÎ¿Í ¸î¸î °üº¯ Á¤ºÎÀÇ ÇϼöÀÎ °üº¯ ÇÐÀÚµé ´öºÐ¿¡ ¿Ï¼ºÇüÀ̶ó´Â ±«¹°ÀÌ Åº»ýÇÏ¿´°í, ±× ÀÌÈÄ ÇѱÛÈ­ÀÇ ¿­±â´Â Âù¹°À» µÚÁý¾î ½è½À´Ï´Ù. °Ô´Ù°¡ ÇѱÛÀº ¾î´À»õ ±â¾÷ÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ ÆȾƸԱâ À§ÇÑ ¹«±â°¡ µÇ¾î¹ö¸®°í ¸»¾Ò½À´Ï´Ù. ÇѱÛÈ­ ±â¼úÀº ±â¾÷ÀÇ µ¶Á¡ÀûÀÎ ¶óÀ̼¾½º³ª ´Ù¸§ ¾ø¾îÁ³°í M$ »çÀÇ °æ¿ì¿¡´Â ´õ´õ¿í ÇѱÛÀ» º¼¸ð·Î »ï°í ÀÖÁö¿ä.

¸®´ª¼­µé¿¡°Ô ÇѱÛÈ­ ±â¼úÀ» °¡Á®´Ù Á٠ȸ»ç´Â ¾ø½À´Ï´Ù! ¹Ù·Î ¿ì¸®µéÀÇ ÈûÀ¸·Î ÀÌ·èÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ¸®´ª¼­µéÀº ³²µéÀÌ ÇØÁÖ±æ ¹Ù¶óÁöµµ ¾Ê½À´Ï´Ù. ¹Ù·Î ÀÌÁ¦ºÎÅÍ ¿ì¸® ½º½º·ÎÀÇ ÈûÀ¸·Î ¾Æ¸§´Ù¿î ÇѱÛÀ» ±¸ÇöÇØ ³ª°©½Ã´Ù. ÇѱÛÀ» º¼¸ð·Î Àâ°í ¼ÒºñÀÚ¸¦ ¿ì·ÕÇÏ´Â ±â¾÷µé¿¡°Ô º»¶§¸¦ º¸¿©Áà¾ß ÇÒ ½Ã°£À̶ó°í »ý°¢ÇÕ´Ï´Ù.

ÇÑ±Û Ãâ·Â! ¹«¾ùÀÌ ´Ù¸¥°¡?

¸ðµç ¹®Á¦´Â ¹Ù·Î ¿µ¹® ·Î¸¶ÀÚ´Â 1 ¹ÙÀÌÆ®·Î Ç¥ÇöÇÏ°íµµ ³²´Â ¹Ý¸é, Çѱ¹¾î, Áß±¹¾î ÀϺ»¾î¿Í °°Àº µ¿¾ç±Ç ¾ð¾îµéÀº 2 ¹ÙÀÌÆ® ÀÌ»óÀ» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­ 1 ¹ÙÀÌÆ® ·Î¸¶ÀÚ¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö¿Í´Â ´Ù¸¥ ¹æ½ÄÀÇ ÇÔ¼ö¸¦ »ç¿ëÇϸç, ¹®ÀÚ¿­¿¡ ´ëÇÑ ¾à°£ÀÇ °¡°ø°úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

  • XDrawString ÇÔ¼ö ´ë½Å¿¡ XDrawString16 À̶ó´Â ÇÔ¼ö »ç¿ë
  • º¸ÅëÀÇ ¹®ÀÚ¿­À» ±×´ë·Î »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, XChar2b ¶ó´Â ±¸Á¶Ã¼ ÀÚ·áÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. µû¶ó¼­ º¸Åë ¹®ÀÚ¿­ --> XChar2bÇü ¹è¿­·Î ¹Ù²ãÁÖ´Â Áö·çÇÑ °úÁ¤ÀÌ ÇÊ¿ä.
  • ¿µ¹®°ú ÇѱÛÀ» °°ÀÌ Ãâ·ÂÇØ¾ß ÇϹǷΠ¿µ¹®Àº XDrawString À¸·Î, ÇѱÛÀº XDrawString16 ÇÔ¼ö¸¦ µû·Î ¾¹´Ï´Ù. ±×·¸´Ù¸é ¿ì¸®´Â º¸ÅëÀÇ C ¹®ÀÚ¿­¿¡¼­ ¿µ¹®Àº ¿µ¹®´ë·Î, ÇѱÛÀº Çѱ۴ë·Î ÃßÃâÇس»´Â ±×·± ÀÛ¾÷ÀÌ ÇÊ¿ä.

±× ¿Ü¿¡ ÆùÆ®¸¦ Àоî¿À´Â °Í, GC¿¡ µî·ÏÇÏ´Â °Í°ú °°Àº °úÁ¤Àº Â÷ÀÌ ¾ø½À´Ï´Ù. ´ÜÁö Á¶°ÇÀÌ Çϳª ÀÖ´Ù¸é X ÆùÆ®¼­¹ö(xfs, X À©µµ¿ì¸¦ ½ÃÀÛÇÏ¸é ¿ì¸® ¸ð¸£°Ô ¶° ÀÖ½À´Ï´Ù ±×·¯´Ï °ÆÁ¤ÇÏ½Ç ÇÊ¿ä¾øÀ½ )°¡ 2 ¹ÙÀÌÆ® Ãâ·ÂÀ» Áö¿øÇÏ´À³ÄÀÇ ¹®Á¦Àε¥, ¿äÁò¿¡ 2 ¹Ù ÀÌÆ® Áö¿øÇÏÁö ¾Ê´Â X ¼­¹öµµ ÀÖ³ª¿ä? :)

X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇÃÀ» °³¹ßÇÏ´Â ¹æ¹ý

X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â ¹æ¹ýÀº Å©°Ô 2 °¡Áö°¡ ÀÖ½À´Ï´Ù.

  • °¡Àå ±ÍÂúÀº ¹æ¹ý, ±×¸®°í °¡Àå ¶È¶ÈÄ¡ ¸øÇÑ ¹æ¹ý, ÇÏÁö¸¸ °ÅÀÇ ´ëºÎºÐÀÇ ÇÑ±Û ¾îÇõéÀÌ Ã¤¿ëÇÏ°í ÀÖ´Â ¹æ½Ä, À߸¸ ÇÏ¸é °¡Àå ¿Ïº®ÇÑ ÇÑ±Û ±¸Çö ¹æ¹ý : ¹Ù·Î °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. º¸Åë À¯¸íÇÑ ¿µ¹® ÇÁ·Î±×·¥ÀÇ ¼Ò½º¿¡¼­ ÀÔ·Â/Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ÇØÅ·ÇÏ´Â ¹æ½Ä¿¡¼­ ¸¹ÀÌ ¾ºÀÌ°í ÀÖ½À´Ï´Ù. ¿¹) ÇÑÅÒ, ÇÑEmacs, ÇÑ±Û fvwm 2.* µî Àý´ë ´Ù¼öÀÇ ÇÁ·Î±×·¥µé
  • ¸¹Àº ÇÁ·Î±×·¡¸ÓÀÇ °øµ¿³ë·ÂÀÌ ÇÊ¿äÇÑ ¹æ¹ý, º¸Åë ¿ì¸®°¡ À©µµ±× 3.1 °ú °°Àº °÷¿¡¼­ ÈçÈ÷ º¸´Â ¹æ¹ý : Áï! X À©µµ¿ì¿¡¼­ÀÇ Çϳª·Î ÅëÀÏµÈ ÀÔ·Â/Ãâ·Â ¹æ½ÄÀ» ( Input/Output Method ) ¸¸µé¾î ³õ°í ±× ±â´ÉÀ» ¾îÇõ鿡¼­ »ç¿ëÇÏ´Â ¹æ½Ä. Áï, ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏÁö ¾Ê°í, ÀÔÃâ·Â¿¡ ´ëÇÑ ±âº»ÀûÀÎ ±ÔÄ¢¸¸ ÁöÄÑÁÖ¸é µÇ´Â ¹æ½ÄÀÔ´Ï´Ù. ¾ÈŸ±õ°Ôµµ »ó¿ë X À©µµ¿ì¿¡¼­´Â ÀÌ·± ÇÑ±Û ±â´ÉÀ» ±â¼úÁøµé¿¡ ÀÇÇØ ¸¸µé¾ú´ÂÁö ¸ð¸£Áö¸¸ ¿ì¸®°¡ ¾²°í ÀÖ´Â XFree86 ¿¡´Â ¾ÆÁ÷ ÀÌ·± ±â´ÉÀÌ ¾ø½À´Ï´Ù. ÀÌ°ÍÀº Àü¹® ¿ë¾î·Î ¸»ÇÏÀÚ¸é X À©µµ¿ìÀÇ Internationalization ±â´É Áï I18N °ú L10NÀ» ÀÌ¿ëÇÑ´Ù°í ¸»ÇÕ´Ï´Ù. ( Âü°í·Î I18N Àº Internationalization À̶ó´Â ´Ü¾î¿¡¼­ óÀ½ I ¿Í ¸Ç³¡ N »çÀÌ¿¡ 18 °³ÀÇ ¿µ¹®ÀÚ°¡ µé¾îÀֱ⠶§¹®¿¡ ±×·¸°Ô ¸í¸íÇÑ °ÍÀÌ°í, L10NÀº Localization À̶ó´Â ±ÛÀÚ¿¡¼­ À¯·¡ÇÕ´Ï´Ù ) ¿©·¯ºÐÀÌ IBM AIX °°Àº °ÍÀ» ½áº¸¼Ì´ÂÁö ¸ð¸£°Ú±º¿ä. ÀÌ ¹æ¹ýÀº °øÅëµÈ ¾î¶² ÀÏ¿¡ °ü¼ºÀ» Áشٴ ÀÕÁ¡ÀÌ ÀÖÁö¸¸ ÀÚÄ© À߸ø ¸¸µé¸é °ÅÀÇ ¾ûÅ͸® ÇѱÛÀÌ µÇ°í ¸¿´Ï´Ù:) ÇöÀç X11 R6 ¿¡¼­´Â ÃæºÐÇÑ °³¹ßȯ°æÀÌ ÁÖ¾îÁ® ÀÖ½À´Ï´Ù. ´ÜÁö... ¿¹) ?

ÀÌ¿Ü¿¡µµ ¿ì¸®°¡ À©µµ±×¿¡¼­ ÁÖ·Î »ç¿ëÇÏ¿´´ø ÇѸÞÇѱÛó·³ HanX ¶ó°í ÇÏ´Â °ÍÀ» ÀÌ¿ëÇؼ­ ÇѱÛÀ» º¼ ¼ö ÀÖµµ·Ï(Ãâ·Â¸¸) ÇÏ´Â ¹æ½Äµµ ÀÖ½À´Ï´Ù.

¿ì¸®°¡ ÀÍÇô¾ß ÇÒ °ÍÀº ÀüÀÚ/ÈÄÀÚÀÇ °³¹ß ¸ðµÎ¿¡ °øÅëµÇ´Â °¡Àå ±âº»ÀûÀÎ ÇѱÛÃâ·Â ¹æ¹ýÀÔ´Ï´Ù. ÇöÀç Àú´Â ÈÄÀÚÀÇ °³¹ß¿¡ ³ë·Â ÁßÀÔ´Ï´Ù. ¾î¼­ »¡¸® XFree86 ¿¡µµ »ó¿ë ¸øÁö ¾ÊÀº ÇÑ±Û ½Ã½ºÅÛÀ» žÀçÇÏ¿© ÇÁ·Î±×·¥ °³¹ß¿¡¼­ ÇÑ±Û Ã³¸®¿¡ ÇÒ¾ÖÇÏ´Â ½Ã°£°ú ³ë·ÂÀ» ¾Æ³¥ ¼ö ÀÖµµ·Ï ÇؾßÇÑ´Ù°í ¹Ï½À´Ï´Ù.

6.2 ÇÑ±Û Ãâ·Â °úÁ¤

¹«¾ùÀÌ ¶Ç ¹®Á¦Àΰ¡?

ÇöÀç X À©µµ¿ì¿¡¼­ »ç¿ëµÇ´Â ÇÑ±Û ÆùÆ®ÀÇ Á¾·ù´Â Å©°Ô 3 °¡Áö¶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. 1 ¹ø°·Î´Â ¿©·¯ºÐÀÌ ¾Ö¿ëÇϽô ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÔ´Ï´Ù. 2 ¹ø°´Â ´ë¿ìÆùÆ®, ÇѾçÆùÆ® µîÀÇ ¿Ï¼ºÇü ÆùÆ®ÀÔ´Ï´Ù. 3 ¹ø°´Â °°Àº ¿Ï¼ºÇü ÆùÆ®À̸鼭µµ ¾ÕÀÇ µÎ °³¿Í´Â ¾ÆÁÖ »ç¼ÒÇÏ°Ô ´Ù¸¥ 󸮰úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â »ïº¸ ÆùÆ®°¡ ÀÖ½À´Ï´Ù.

ÀÌ·¸°Ô ´Ù¾çÇÑ ÆùÆ® Çü½ÄÀÇ Á¸Àç´Â ´Ù¾çÇÑ ÆùÆ® Ãâ·Â ¿¹ºñÀÛ¾÷ÀÌ ÇÊ¿äÇÔÀ» ÀÇ¹Ì ÇÕ´Ï´Ù.

Àú´Â ÀÏ´Ü ¿©±â¼­ Á¦ÀÏ °£´ÜÇÑ 2 ¹ø° °æ¿ì¸¸ ¼³¸íµå¸®±â·Î ÇÏ°Ú½À´Ï´Ù. ¹Ì·ÁÇÑ ÆùÆ®ÀÎ 1 ¹ø° ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÑ ¹øÀÇ °­ÀǸ¦ ÇÒ¾ÖÇØ¾ß ÇÒ ¸¸Å­ ¸¹Àº À̾߱Ⱑ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù. ( »ç½ÇÀº »ïº¸ ÆùÆ®°¡ ´õ ½±Áö¸¸¼­µµ ±¸ÇÒ ¼ö°¡ ¾øÀ¸´Ï... )

ÀÚ, ±×·¯¸é ¿©·¯ºÐÀÌ ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÏ°í ½ÃÀÛÇÏ°Ú½À´Ï´Ù

 ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h> ¿¡ ¼±¾ð

  XDrawString16(display, d, gc, x, y, string, length)
             Display *display;
             Drawable d;
             GC gc;
             int x, y;
             XChar2b *string;
             int length;

¿ì¸®´Â ÇÑ±Û ÆùÆ®¸¦ °¡Áö°í ÇѱÛÀ» Ãâ·ÂÇϱâ À§Çؼ­ XDrawString À̶ó´Â 1 ¹ÙÀÌÆ® ¾ð¾î±Ç ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ³¡¿¡ 16À̶ó´Â ¼ýÀÚ°¡ ºÙÀº ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±×¸®°í À¯½ÉÈ÷ »ìÆ캸¸é XDrawString ¿¡¼­´Â char * ÇüÀ̾ú´ø ºÎºÐÀÌ ¿©±â¼­´Â XChar2b * ÇüÀ¸·Î ¹Ù²î¾î ÀÖÁÒ. ¿ì¸®´Â ¿©±â¼­ »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ­ ¶ÇÇÑ ¾Ë¾ÆºÁ¾ß ÇÕ´Ï´Ù. :<

  typedef struct {         /* normal 16 bit characters are two bytes */
            unsigned char byte1;
            unsigned char byte2;
   } XChar2b;

¿ì¸® ¸»¿¡ ´ëÇÑ Ç¥ÇöÀº ÇöÀç 2 ¹ÙÀÌÆ® Ç¥Çö¹ýÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÀ¸¸é Ç¥ÁØÀûÀ̶ó°íµµ ¸»ÇÒ ¼ö ÀÖÀ» °Í °°½À´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ "ÇÑ" À̶ó´Â ¹®ÀÚ´Â ¿µ¹® 2 ¹ÙÀÌÆ®·Î µÇ¾î ÀÖ°í ±×°Í°ú ÀÏ´ëÀÏ ´ëÀÀÇÏ´Â °ÍÀÌ ¹Ù·Î XChar2b Çü º¯¼öÀÔ´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â char * Çü ¹è¿­À» XChar2b * Çü ¹è¿­·Î º¯È¯½ÃÄÑ Áֱ⸸ ÇÏ¸é µË´Ï´Ù. ±Ùµ¥ ¿ì¸®°¡ ¸¹ÀÌ °¡Áö°í ÀÖ´Â ÇѾçÆùÆ®³ª ´ë¿ìÆùÆ®ÀÇ °æ¿ì, ¸»ÀÌ ½±Áö ±×·¸°Ô´Â µÇÁø ¾Ê½À´Ï´Ù.

´ÙÀ½°ú °°Àº ¿¬»êÀÌ ÀÌ·ç¾îÁ®¾ß ÇÕ´Ï´Ù. ÀÏ´Ü 'ÇÑ'À̶ó°í ÇÏ´Â 2 ¹ÙÀÌÆ® ÇÑ±Û ÇÑ ±ÛÀÚ°¡ ÀÖ´Ù°í Ä¡¸é...

   char *Han = "ÇÑ";
   XChar2b HanX;

   HanX.byte1 = *(Han)   - 0x80;        /* ÁÖÀÇ! 0x80 °ªÀ» »©ÁÖ°í ÀÖ´Ù */
   HanX.byte2 = *(Han+1) - 0x80;

º¸½Ã´Ù½ÃÇÇ ±×³É ÇÑ±Û 2 ¹ÙÀÌÆ®¿Í XChar2b Çü ±¸Á¶Ã¼ ¸â¹ö °£ÀÇ °£´ÜÇÑ ÀÏ´ëÀÏ ´ëÀÀÀÌ ¾Æ´Ï¶ó, 0x80 °ªÀ» »©ÁÖ¾î¾ß ÇÑ´Ù´Â ÀÚÀßÇÑ Áß°£ °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ( Âü°í·Î »ïº¸ ÆùÆ®´Â 0x80 °ªÀº °ªÀ» »©ÁÖÁö ¾Ê°í ±×³É ÀÏ´ëÀÏ ´ëÀÀ½Ãŵ´Ï´Ù. )

ÀÌÁ¦ Á» °¨ÀÌ ¿À¼Ì½À´Ï±î? ¾Ë°í ³ª´Ï ±²ÀåÈ÷ ½±Áö ¾Ê³ª¿ä? :)

#include <X11/Xlib.h>
#include <stdio.h>

int main()
{
        Display *dpy;
        int screen;
        Window w;
        Font hanFont, engFont;
        GC gc;
        XChar2b HStrBuf[256];
        int n;

        dpy = XOpenDisplay( NULL );

        screen = DefaultScreen( dpy );
        w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 400, 300, 2, 
                        BlackPixel( dpy, screen ), WhitePixel( dpy, screen ));
        XMapWindow( dpy, w );
        XFlush(dpy);

        sleep(4);       /* ¿Ö ³Ö¾úÀ»±î¿ä? */

        gc = XCreateGC ( dpy, w, 0L, (XGCValues *) NULL );
        hanFont = XLoadFont ( dpy, 
                        "-daewoo-mincho-*-r-normal--16-*-*-*-c-*-*-*" );

        engFont = XLoadFont ( dpy, "fixed" );

        XSetFont( dpy, gc, hanFont );
        n = convert_ks_to_display("¾È³çÇϼ¼¿ä¸®´ª¼­", HStrBuf, 10);
        XDrawString16(dpy, w, gc, 100, 100, HStrBuf, n);

        XSetFont( dpy, gc, engFont );
        XDrawString(dpy, w, gc, 100, 150, "Welcome to Linux!", 17 );

        XFlush(dpy);
        getchar();
}

/* ÇÑÅÒ ¼Ò½º¿¡¼­ Àοë */

int convert_ks_to_display(char *str, XChar2b *buf, int n)
{
  int i, j;

  for (i = 0, j = 0; i < n;) {
    buf[j].byte1 = str[i] - 0x80;
    buf[j].byte2 = str[i+1] - 0x80;
    i += 2, j++;
  }
  return j;
}

ÄÄÆÄÀÏ ¹æ¹ýÀº ¶È°°½À´Ï´Ù. ÀÌ»ó ¾øÀÌ ½ÇÇàµÇ·Á¸é ¿©·¯ºÐÀº /usr/X11R6/lib/fonts µð·ºÅ丮ÀÇ ÇϺΠµð·ºÅ丮 misc µð·ºÅ丮¿¡ ´ë¿ì ÆùÆ®°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. È­ÀϸíÀº hanglm16.pcf.Z ÀÔ´Ï´Ù. fonts.dir È­ÀÏÀ» »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. ÇöÀç °¡Áö°í °è½Ã´Â ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ ¾Æ¹«°Å³ª Àû¾îÁÖ½Ã¸é µË´Ï´Ù. Àü¿¡ ¼³¸íµå·È´ø XLFD ¹æ½ÄÀÇ Ç¥±â ¶Ç´Â ÀÚÁÖ ¾²´Â ÆùÆ®¸í¿¡ ´ëÇÏ¿© fonts.alias ¿¡´Ù º°¸íÀ» Á¤ÇØÁÖ½Ã°í ±× º°¸íÀ» »ç¿ëÇϽõçÁö ¸¶À½´ë·Î ÇÏ½Ã¸é µË´Ï´Ù. Âü°í·Î À§¿¡¼­ »ç¿ëÇÑ ¿µ¹® ÆùÆ®¸í fixed ´Â »ç½Ç º°¸í¿¡ ÇØ´çµË´Ï´Ù. fonts.alias ¸Ç ¾Õ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

¾ÆÁ÷µµ ³²Àº ¹®Á¦°¡ ÀÖ´Ù!

Çѱ۷ΠÃâ·ÂÀ» Çغ¸½Ã´Ï ¾î¶°¼¼¿ä? Á¦°¡ óÀ½À¸·Î ÇÑÅÒ ¼Ò½º¸¦ º¸°í µ¶ÇÐÇϸ鼭 º°°Í ¾Æ´ÏÁö¸¸¼­µµ ÇѱÛÀÌ Ãâ·ÂµÇ´Ï Âü ±âºÐÀÌ ÁÁ´õ±º¿ä. ±Ùµ¥ ¹®Á¦´Â ±×·¸°Ô °£´ÜÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¹«¾ùÀ̳ı¸¿ä?

À§ÀÇ ¼Ò½º¸¦ Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. Àß º¸½Ã¸é ÇѱÛÀº Çѱ۴ë·Î µû·Î, ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀϱî¿ä? ¿¹! ±×·¸½À´Ï´Ù. ¿ì¸®´Â ¾ÈŸ±õ°Ôµµ Çѱ۰ú ¿µ¹®À» È¥¿ëÇؼ­ ¾²´Â ½Ã´ë¿¡ »ì°í ÀÖ½À´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â Á¾Á¾ »ç¿ëÀڷκÎÅÍ ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­À» ¹Þ°Ô µË´Ï´Ù.

 char *MixedString = "ÀúÀÇ ÄÚ³Ý ÁÖ¼Ò´Â freeyong@soback.kornet.nm.kr ÀÔ´Ï´Ù";

¹«¾ùÀÌ ¹®Á¦ÀÌ°Ú½À´Ï±î?

XDrawString ÇÔ¼ö´Â ¿À·ÎÁö 1 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ÀÌ¿¡ ºñÇÏ¿© XDrawString16 ÇÔ¼ö´Â ¹Ý´ë·Î 2 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ±×·¸´Ù¸é À§¿Í °°ÀÌ Çѱ۰ú ¿µ¹®ÀÌ ¼¯¿© ÀÖ´Â °æ¿ì¿¡´Â ¹®ÀÚ¿­À» ÁÖ¿í °Ë»öÇϸ鼭 Çѱ۰ú ¿µ¹®À» µû·Î Ãâ·ÂÇØÁÖ¾î¾ß ÇÑ´Ù´Â °á·ÐÀÌ ³ª¿É´Ï´Ù. :<

ÀÌ ºÎºÐÀÌ ¾à°£ÀÇ ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿µ¹®°ú ÇѱÛÀÇ Á¶È­¸¦ ¸ÂÃß´Â °ÍÀÌ ÇöÀç·Î¼­´Â ¾ÆÁÖ Áß¿äÇÕ´Ï´Ù. ¾îÂî ÇÏ´Ùº¸´Ï ¿ì¸®³ª¶óµµ ¿µ¾î¹®È­±ÇÀÌ µÇ¹ö¸° µíÇÑ ¾¹¾µÇÑ ±âºÐÀ» ¹ö¸± ¼ö°¡ ¾ø³×¿ä. ƯÈ÷ ÄÄÇ»ÅÍ ºÐ¾ß¿¡ À־ Çѱ۸¸ ÀßµÇ°í ¿µ¹®Àº ´ë½Å¿¡ ²ÎÀÌ µÇ¹ö¸°´Ù¸é ¾Æ¹«µµ ±×°Å ¾²Áö ¾Ê½À´Ï´Ù.

µû¶ó¼­ ¿©·¯ºÐÀº ÆùÆ® ·Îµù/ÆùÆ®¸¦ GC ¿¡ µî·Ï/ÆùÆ® Ãâ·Â ÀÌ·¸°Ô °£´ÜÇÑ °úÁ¤À» ³Ñ ¾î¼­¼­ ÆùÆ®¿¡ ´ëÇØ¿© ÀÚÀ¯ÀÚÀç·Î ó¸®ÇÏ½Ç ¼ö ÀÖ´Â ´É·ÂÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

Çѱ۰ú ¿µ¹®À» ±¸º°Çؼ­ Âï±â

¿©±â¼­ºÎÅÍ´Â Á» ¾î·Á¿öÁö±â ½ÃÀÛÇÕ´Ï´Ù. Á¦°¡ ¿©±â¿¡ Àû¾î³õÀº ÇÔ¼ö´Â ÇÑÅÒ ¼Ò½º¿¡¼­ ÇѱÛó¸® ºÎºÐÀ» º¸°í °í´ë·Î ÀúÀÇ ÇÑ±Û fvwm 2.0.42ÀÇ ÇÑ±Û Ã³¸®·çƾÀ¸·Î º¹»çÇÏ°í ¾à°£À» ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ¸ðµç ºÎºÐÀ» ÀÌÇØÇÏ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×¸®°í ¾î´À Á¤µµ ½Ç·ÂÀÌ µÇ½Ã´Â ºÐµéÀº ÀÌ¹Ì ´Ù ¾Ë°í °è½Ã´Â ³»¿ëÀ̶ó°í ¹Ï½À´Ï´Ù. ¿©·¯ºÐÀÌ ÁÖ¸ñÇÏ¼Å¾ß ÇÒ ºÎºÐÀº ¼Ò½º ¾È¿¡¼­ ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù.

void HanXDrawString(Display *d, Drawable w, GC gc, XFontStruct *hfont,
        XFontStruct *efont, int x, int hy, int ey,
        char *str, int len, int hcode, int ftype )
{
  int n;
  char *p;
  XChar2b buf[256];

/*

  ÀÌ ÇÔ¼ö´Â º¸ÅëÀÇ ¾Æ½ºÅ° ¿µ¹®ÀÚ¿Í ÇѱÛÀÌ È¥ÇյǾî ÀÖ´Â ¹®ÀÚ¿­À» ¹Þ½À´Ï´Ù. 
  ¿©±â¼­´Â str À̶ó´Â º¯¼öÀÔ´Ï´Ù.
  
*/ 

  while (len > 0) {
    if (*str & 0x80) {
    /*
        ¹Ù·Î 0x80 °ú AND ¿¬»êÀ» ÇÔÀ¸·Î½á ¹ÙÀÌÆ®ÀÇ 8 ¹ø° ºñÆ®°¡ 1 ·Î µÇ¾î ÀÖ´Â
        °¡¸¦ È®ÀÎÇÕ´Ï´Ù. ±×·¡¼­ ÂüÀÌ¸é ±× ¹ÙÀÌÆ®¿Í ´ÙÀ½ ¹ÙÀÌÆ® µÎ °³´Â ÇѱÛÀ»
        ±¸¼ºÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
    */
    
      for (p = str; len > 0 && (*p & 0x80); p += 2, len -= 2)
        ;

    /*    
       ¿©±â¿¡ for ( ) ; ¶ó°í ÇÏ´Â Àç¹ÌÀÖ´Â ¹®ÀåÀÌ ÀÖ½À´Ï´Ù. ÇöÀç ÇѱÛÀÌ Ã³À½À¸
       ·Î ³ªÅ¸³­ À§Ä¡ºÎÅÍ ¾îµð±îÁö ÇѱÛÀÌ Áö¼ÓµÇ´Â°¡¸¦ üũÇؼ­ ÇÑ±Û ¹®ÀÚ¿­¸¸
       Ãß·Á³»¾î ó¸®ÇÏ°íÀÚ ÇÏ´Â °Ì´Ï´Ù.
    */

      n = HanXCharConvert(str,buf,p-str, hcode, ftype );
      XSetFont( d, gc, hfont->fid );
      XDrawString16(d,w,gc,x,hy,buf,n);
      /* ¹Ù·Î ¿©±â¼­ XDrawString16 ÇÔ¼ö¸¦ ½á¼­ Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù */
      x += XTextWidth16(hfont,buf,n);
      /* XTextWidth16 À̶ó´Â ÇÔ¼ö´Â ´«¿©°Ü º¸¼Å¾ß°ÚÁÒ? */
    }
    else {
    /* ¿µ¹®ÀÏ ¶§ ó¸®ÇÏ´Â ·çƾÀÔ´Ï´Ù */
      for (p = str; len > 0 && !(*p & 0x80); p++, len--)
        ;
      /* ¸¶Âù°¡Áö·Î °è¼ÓÀûÀ¸·Î ASCII ¹®ÀÚ¸¸ ³ª¿Ã ¶§±îÁö Æ÷ÀÎÅÍ À̵¿ */
      XSetFont( d, gc, efont->fid );
      XDrawString(d,w,gc,x,ey,str,p-str);
      x += XTextWidth(efont,str,p-str);
    }
    str = p;
  }
  XSetFont( d, gc, efont->fid );
}

/*
   À§¿¡¼­ ¾µ µ¥ ¾øÀÌ °è¼Ó XSetFont ¸¦ ¾²´Â ÀÌÀ¯´Â ÇϳªÀÇ GC ¿¡´Ù°¡ ÇÑ ¹øÀº
   ÇÑ±Û ÆùÆ®¸¦ µî·ÏÇß´Ù°¡, ¶Ç ÇÑ ¹øÀº ¿µ¹® ÆùÆ®¸¦ µî·ÏÇÏ´Â ÀÛ¾÷À» Çϱ⠶§¹®
   ÀÔ´Ï´Ù.
*/

ÀÚ, ¼³¸íÀ» µå¸®ÁÒ. À§¿¡¼­ »ç¿ëÇÑ Å×Å©´ÐÀº ÇÑ±Û ÇÁ·Î±×·¡¹ÖÀ» ÇϽ÷Á´Â ºÐµéÀº ¾ÆÁÖ ±âº»ÀûÀ¸·Î ÀÍÈ÷¼Ì¾î¾ß ÇÏ´Â ³»¿ëÀÔ´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ´Â 2 ¹ÙÀÌÆ®À̸ç, ù¹ø° ¹ÙÀÌÆ®ÀÇ MSB ´Â 1 ·Î ¼ÂÆõȴٴ »ç½ÇÀÌÁÒ. ±×·¡¼­ ÇѱÛÀÎÁö ¾Æ´ÑÁö¸¦ üũÇÏ´Â °¡Àå ±âº»ÀûÀ̸鼭µµ À¯ÀÏÇÑ ¹æ¹ýÀº ¹Ù·Î ºñÆ®¸Å½ºÅ© ¿¬»êÀ» Çغ¸´Â °Ì´Ï´Ù. 0x80 À̴ϱñ ÀÌÁø¼ö·Î´Â 1000 0000 ÀÔ´Ï´Ù. ÀÌ ¼ýÀÚ¿Í & ¿¬»êÀ» ÇÏ¸é µÑ ´Ù 1 ÀÎ °æ¿ì¸¸ ÂüÀÌ µÇ¹Ç·Î °ú¿¬ MSB °¡ 1 Àΰ¡ ¾Æ´Ñ°¡¸¦ ½Äº°Çس¾ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.

ÀÚ¼¼ÇÑ ³»¿ëÀº C ¾ð¾îÃ¥À» º¸½Ã°í ºñÆ®¸Å½ºÅ© ¿¬»êÀ» °øºÎÇϽñ⠹ٶø´Ï´Ù. Á¦°¡ ±ÇÇÏ°í ½ÍÀº Ã¥Àº Ä¿´Ï°Ç & ¸®Ä¡ÀÇ "C Programming Language" ÀÔ´Ï´Ù. Ä¿´Ï°Ç°ú ¸®Ä¡°¡ ¾î¶² »ç¶÷ÀÎÁö´Â ¾Æ½ÃÁÒ? :) ¸ð¸£½Ã¸é ²À ¾Ë¾Æº¸¼¼¿ä. ±âÃÊ »ó½Ä¿¡ ÇØ´çÇϴϱñ¿ä :)

ÆùÆ®¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸ ¾Ë¾Æ³»±â

ÇÑ±Û Ãâ·Â ¹ú½áºÎÅÍ ÀÌ·¸°Ô ¾î·Æ±º¿ä. ( ±Ùµ¥ ÇÑ±Û ÀÔ·ÂÀº ´õ¿í ´õ Ȳ´çÇÒ °Ì´Ï´Ù )

ÀÌÁ¦ºÎÅÍ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ëÀº ¿ì¸®°¡ óÇÒ ¼ö ÀÖ´Â ¾î¶² °æ¿ì¿¡¶óµµ ÀÚÀ¯ÀÚÀç·Î ÆùÆ®¸¦ ó¸®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. XDrawString À̳ª XDrawString16 À̶ó´Â ÇÔ¼ö´Â ¿ì¸®°¡ Á¤ÇØÁÖÁö ¾Ê¾Æµµ ÆùÆ® °íÀ¯ÀÇ Æ¯¼º¿¡ µû¶ó ¹®ÀÚ¿­À» ¿¹»Ú°Ô ÇÑ ÁÙ·Î ³ªÅ¸³»ÁÝ´Ï´Ù. ÇÏÁö¸¸ µÎ ÁÙ ÀÌ»óÀÌ µÇ´Â ¹®ÀÚ¿­Àº? ÁÙ°£°ÝÀ» ¾î¶»°Ô ÇÒ±î¿ä? Ãâ·ÂµÈ ¹®ÀÚ¿­Àº µµ´ëü ¾ó¸¶ÀÇ ÆøÀ» °¡Áö°í ÀÖ´ÂÁö... µîµî ¹®ÀÚ¿­À» ¿©·¯ºÐ ¸¶À½²¯ Ãâ·ÂÇϱâ À§Çؼ­´Â ÆùÆ®¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ Á¤º¸ ¶Ç´Â ÇÊ¿ä¿¡ µû¶ó ÇÑ ±ÛÀÚ ÇÑ ±ÛÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»¾ß ÇÕ´Ï´Ù.

±Ùµ¥ ÆùÆ®¿¡ ´ëÇÑ Á¤º¸´Â ¾îµð¿¡ ÀÖ´Ù°í ÇßÁÒ? ¿¹. ¸Â½À´Ï´Ù. ±×°ÍÀº X ¼­¹ö¿¡ ÀÖ½À´Ï´Ù. ¿ì¸®´Â º¸Åë °¡Àå °£´ÜÇÑ ÇüÅ·μ­ XLoadFont ÇÔ¼ö¸¦ ½á¼­ ÆùÆ® ID ¸¦ ¾ò¾î¿É´Ï´Ù.

°¡Àå °£´ÜÇÑ ¹æ¹ý

       XQueryTextExtents16(display, font_ID, string, nchars,
       direction_return, font_ascent_return,
                               font_descent_return, overall_return)
             Display *display;
             XID font_ID;
             XChar2b *string;
             int nchars;
             int *direction_return;
             int *font_ascent_return, *font_descent_return;
             XCharStruct *overall_return;

¿ì¸®°¡ »ç¿ëÇÏ°íÀÚ ÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î XQueryTextExtents16 À̶ó´Â ¾ÆÁÖ ±ä À̸§À» °¡Áø ÇÔ¼öÀÔ´Ï´Ù. ¿ì¸® ºñ¿µ¾î ¹®È­±Ç »ç¶÷µé¿¡°Ô´Â ÈûµéÁö ¸ô¶óµµ ±×µé¿¡°Ô´Â ½¬¿î ÇÔ¼ö¸íÀÌ°ÚÁÒ? X ·Î ½ÃÀÛÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î Xlib ÇÔ¼öÀÓÀ» ÀǹÌÇÏ´Â °ÍÀÌ°í Query Á¶»çÇÏ´Ù, TextExtents ´Â ÅؽºÆ®ÀÇ ¿µ¿ª ¹üÀ§, µÚ¿¡ 16 À» ºÙÀÎ °ÍÀº 1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ°¡ ¾Æ´Ï¶ó 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚÀÓÀ» ³ªÅ¸³»ÁÖ°í ÀÖ½À´Ï´Ù. ÀÏ´Ü À§¿¡¼­ ÆùÆ® ID º¯¼öÇüÀÌ XID ÀÎ °ÍÀº ¿©·¯ºÐÀÌ »ý°¢ÇØ º¸½Ê½Ã¿ä. 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿­À̹ǷΠXChar2b Çü ¹è¿­À» »ç¿ëÇÏ¿´°í nchars ´Â ±× ¹è¿­ÀÇ Å©±â¸¦ ¾Ë·ÁÁÝ´Ï´Ù ÀÌÁ¦ºÎÅÍ 4 °³ÀÇ Æ÷ÀÎÅÍ Àü´Þº¯¼öµéÀÌ ÀÖ±º¿ä. ¿©·¯ºÐÀÌ »ý°¢Çϱ⿡ ¿Ö ÀÌ ³à¼®µéÀº Æ÷ÀÎÅÍ·Î ÁÖ¾îÁ³À»±î¿ä? ¸Â½À´Ï´Ù. ÀÌ º¯¼öµé¿¡´Ù°¡ ¿ì¸®°¡ ¿øÇÏ´Â Á¤º¸¸¦ ¾ò¾î ¿À·Á°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

direction_return Àº FontLeftToRight, FontRightToLeft ¶ó´Â Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù ¿µ¾î¸¦ Á»¸¸ ÀÐÀ¸½Ç ¼ö ÀÖ´Ù¸é ¹«½¼ ¶æÀÎÁö ¾Æ½Ç °Ì´Ï´Ù. º¸ÅëÀÇ °æ¿ì FontLeftToRight ÀÌ°ÚÁÒ? ¹®ÀÚ¿­ÀÇ Ãâ·ÂÀÌ Á --< ¿ì Àΰ¡? ¾Æ´Ï¸é ±× ¹Ý´ëÀΰ¡ ÀÔ´Ï´Ù.

font_ascent_return°ú font_descent_return ¿¡ ´ëÇÑ À̾߱â´Â ÇÑ±Û ¹®ÀÚ¿Í´Â ´Ù¸¥ ¿µ¹® ¹®ÀÚ¸¸ÀÇ Æ¯¼º¿¡ ´ëÇؼ­ ¾Ë¾Æ¾ß ¾ê±â°¡ µÉ °Í °°±º¿ä. ¿ì¸® ¹®ÀÚ´Â ÀÌ·¯ÇÑ °³³äÀÌ ¾ø´Ù°í³ª ÇÒ±î¿ä? ¿µ¹®ÀÚ y ¸¦ ¿¹·Î µé¾îº¾½Ã´Ù. º¸Åë ¿ì¸®°¡ ÁßÇб³ óÀ½ µé¾î°¡¼­( À¹! ¿äÁòÀº ÃʵîÇб³¿¡¼­ºÎÅÍ Çϳª¿ä? ) ¿µ¾î ½Ã°£¿¡ ÇÏ´Â ÀÏÀº ¾ËÆĺª ¾²±â¿´½À´Ï´Ù. ÀÏ´Ü ¹®¹æ±¸¿¡ °¡¼­ µû·Î Á¦ÀÛµÈ ¿µ¾î ³ëÆ®¸¦ ÇÑ ±Ç »ð´Ï´Ù. °øÃ¥À» ÆîÄ¡¸é ¸¶Ä¡ ¿À¼±Áöó·³ ÁÙÀÌ ÁÖ¿íÁÖ¿í ±×¾îÁ® ÀÖ°í, ÀÚ¼¼È÷ º¸½Ã¸é ÆĶõÁÙ ¸»°í »¡°£ÁÙÀÌ ±×¾îÁ® ÀÖ´ø °ÍÀÌ ±â¾ï³ª½Ê´Ï±î? ±× »¡°£ÁÙÀº baseline À̶ó°í ÇÕ´Ï´Ù. a b c ¿Í °°Àº ¹®ÀÚ´Â ¸ðµÎ ±× »¡°£ÁÙ À§¿¡ ¾º¿©Áý´Ï´Ù. ÇÏÁö¸¸ g j y °°Àº ¹®ÀÚµéÀº »¡°£ÁÙ ¾Æ·¡·Î ³»·Á°¡´Â ºÎºÐÀÌ ÀÖÁö¿ä? ÀÌÁ¦ °¨ÀÌ ¿À¼ÌÀ» °Ì´Ï´Ù. font_ascent_return ( ascentÀÇ ÀÇ¹Ì¿Í descentÀÇ Àǹ̸¦ »çÀüÀ» ã¾Æº¸½Ã¸é ¾ÆÁÖ ¸íÈ®ÇØÁý´Ï´Ù )´Â ±× »¡°£ baseline À§·Î ¸î Çȼ¿¸¸Å­ ¿Ã¶ó°¡ Àִ°¡? ±×¸®°í font_descent_returnÀº baseline ¾Æ·¡·Î ¾ó¸¶¸¸Å­Àΰ¡¸¦ ³ªÅ¸³»ÁÝ´Ï´Ù. ¿ì¸® Çѱ۰ú´Â ÀüÇô °ü·ÃÀÌ ¾ø´Ù°í ÇÒ ¼ö ÀÖÁÒ. :) ÇÏÁö¸¸! ±×·¸Áöµµ ¾Ê½À´Ï´Ù. ¿ì¸®°¡ Çѱ۰ú ¿µ¹®À» È¥¿ëÇÒ ¶§ ¿ì¸® ÇѱÛÀº ¿µ¹®°ú Á¶È­¸¦ ÀÌ·ç±â À§Çؼ­ Ç×»ó baseline À§¿¡ ¾º¿©Á®¾ß ÇÏ°ÚÁÒ? ¾û¶×ÇÏ°Ô y ÀÚÀÇ ¹ØºÎºÐ°ú ÆòÇàÇÏ°Ô ¾º¿©Áö¸é ¿µ º¸±â ½È¾îÁý´Ï´Ù.

overall_returnÀº ±ÛÀÚ ±×´ë·Î Àü¹ÝÀûÀÎ Á¤º¸¸¦ °¡Á®´Ù ÁÝ´Ï´Ù. »õ·Î¿î ÀÚ·áÇüÀ̱º¿ä. XCharStruct ¶ó´Â.... ÀÌ ÀÚ·áÇüÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁ® ÀÖ´ÂÁö´Â Xlib.h Çì´õ È­ÀÏ¿¡¼­ ã¾Æº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

/*
 * per character font metric information.
 */
typedef struct {
    short       lbearing;       /* origin to left edge of raster */
    short       rbearing;       /* origin to right edge of raster */
    short       width;          /* advance to next char's origin */
    short       ascent;         /* baseline to top edge of raster */
    short       descent;        /* baseline to bottom edge of raster */
    unsigned short attributes;  /* per char flags (not predefined) */
} XCharStruct;

ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °ú¿¬ Áö±Ý Ãâ·ÂÇÏ·Á°í ÇÏ´Â ¹®ÀÚ¿­ÀÌ ¾î´À ¸¸Å­ÀÇ ¿µ¿ªÀ» Â÷ÁöÇÒ °ÍÀΰ¡¸¦ °¡´ÆÇÏ´Â °ÍÀÔ´Ï´Ù. ¹®ÀÚ¿­ÀÇ ³ôÀÌ(height)´Â ´ÙÀ½°ú °°½À´Ï´Ù.

        ascent ¸Ø¹ö + descent ¸â¹ö

À§·Î ¾ó¸¶¸¸Å­À̸ç, ¾Æ·¡·Î ¾ó¸¶¸¸Å­ÀÎÁö¸¦ ´õÇÏ¸é µË´Ï´Ù. ÇѱÛÀº descent = 0 :) ±×·¡µµ ÀÏ°ü¼ºÀ» À§Çؼ­ Ç×»ó ÀÌ·¸°Ô ½áÁֽʽÿä.

´ÙÀ½À¸·Î ¹®ÀÚ¿­ÀÇ Æø(width)Àº ¾î¶»°Ô °è»êÇÒ±î¿ä?

        rbearing ¸â¹ö - lbearing ¸â¹ö   ¶Ç´Â ±×³É width ¸â¹ö¸¦ »ç¿ë

1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿¡ ´ëÇؼ­´Â XQueryTextExtents ¸¦ ¾¹´Ï´Ù.

´õ ÁÁÀº ¹æ¹ý

À§ÀÇ ¹æ¹ýÀº ¾î¶² Á¤º¸¸¦ ¾Ë°íÀÚ ÇÒ ¶§ Ç×»ó X ¼­¹ö¿¡°Ô ¿äûÀ» ÇØ¾ß ÇϹǷΠ³×Æ®¿öÅ© ·Îµå°¡ ¸¹ÀÌ °Å¸®°Ô µÇ¸ç, ÇÁ·Î±×·¥ÀÌ ´À·ÁÁö´Â ÁÖ¹üÀÌ µË´Ï´Ù. ±×·¡¼­ ÇÁ·Î±×·¥´Ù¿î ÇÁ·Î±×·¥À» Â¥´Â °æ¿ì¿¡´Â ´ëºÎºÐ XLoadFont ·Î ÆùÆ®·ÎµùÇÏ°í, XQueryTextExtents(16) °°Àº ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù.

XLoadFont ´ë½Å¿¡ XLoadQuerFont ÇÔ¼ö¸¦ ¾¹½Ã´Ù.

XLoadQueryFont ´Â ÆùÆ®¸¦ ·ÎµùÇϸ鼭 Query ÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù.

        XFontStruct *XLoadQueryFont(display, name)
                     Display *display;
                     char *name;

XLoadFont¿¡¼­Ã³·³ ÆùÆ®¸íÀ» Àü´ÞÇØÁÖ´Â °ÍÀº °°Áö¸¸, º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¹ÝȯµÇ´Â °ªÀÌ Font ÇüÀÌ ¾Æ´Ï¶ó XFontStruct ¶ó´Â ÀÚ·áÇüÀÔ´Ï´Ù.

typedef struct   
  XExtData    *ext_data;      /* hook for extension to hang data */
  Font        fid;            /* Font id for this font */ /* ÁÖ¸ñ! */
  unsigned    direction;      /* hint about direction the font is painted */
  unsigned    min_char_or_byte2;/* first character */
  unsigned    max_char_or_byte2;/* last character */
  unsigned    min_byte1;      /* first row that exists */
  unsigned    max_byte1;      /* last row that exists */
  Bool        all_chars_exist;/* flag if all characters have non-zero size*/
  unsigned    default_char;   /* char to print for undefined character */
  int         n_properties;   /* how many properties there are */
  XFontProp   *properties;    /* pointer to array of additional properties*/
  XCharStruct min_bounds;     /* minimum bounds over all existing char*/
  XCharStruct max_bounds;     /* maximum bounds over all existing char*/
  XCharStruct *per_char;      /* first_char to last_char information */
  int         ascent;         /* log. extent above baseline for spacing */
  int         descent;        /* log. descent below baseline for spacing */
} XFontStruct;

ÀÚ·áÇüÀÌ ²Ï º¹ÀâÇÑ Æí¿¡ ¼ÓÇϴ±º¿ä. :) ÁÖ¸ñÇÏ½Ç °ÍÀº ÆùÆ® ID °¡ XFontStruct ÀÚ·áÇüÀÇ fid ¸â¹ö¿¡ ÀúÀåµÇ¾î ÀÖ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ÆùÆ® ID ¸¦ ¾²°í ½ÍÀ¸½Ç ¶§´Â fid ¸â¹ö°ªÀ» »ç¿ëÇϼ¼¿ä.

XSetFont ÇÔ¼ö¸¦ »ç¿ëÇÏ½Ç ¶§´Â ¹Ù·Î ÆùÆ® ID ¸¦ »ç¿ëÇϼž߰ÚÁÒ?

ÀÏ´Ü ±¸Á¶Ã¼¿¡´Ù°¡ ¸ù¶¥ ÆùÆ® °ü·Ã Á¤º¸¸¦ °¡Á®¿ÔÀ¸¹Ç·Î ÀÌÁ¦´Â ¾î¶² Á¤º¸¸¦ ¾Ë¾Æ ³»±â À§ÇØ X ¼­¹ö¿Í Åë½ÅÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

¿©·¯ºÐÀÌ XFontStruct ±¸Á¶Ã¼¸¦ °¡Áö°í °è½Ã¸é ´ÙÀ½°ú °°Àº ÇÔ¼öµéÀ» ÅëÇؼ­ ¿©·¯°¡Áö Á¤º¸¸¦ ij³»½Ç ¼ö ÀÖ½À´Ï´Ù.

  • XTextWidth16
           int XTextWidth(font_struct, string, count)
                 XFontStruct *font_struct;
                 char *string;
                 int count;
    
           int XTextWidth16(font_struct, string, count)
                 XFontStruct *font_struct;
                 XChar2b *string;
                 int count;
    
    ÁÖ¾îÁø ¹®ÀÚ¿­( string )ÀÌ Â÷ÁöÇÒ Çȼ¿ ÆøÀ» ¾Ë¾Æ³À´Ï´Ù.
  • XTextExtents16
           XTextExtents(font_struct, string, nchars, direction_return, 
                         font_ascent_return,
                         font_descent_return, overall_return)
                 XFontStruct *font_struct;
                 char *string;
                 int nchars;
                 int *direction_return;
                 int *font_ascent_return, *font_descent_return;
                 XCharStruct *overall_return;
    
           XTextExtents16(font_struct, string, nchars, direction_return, 
                           font_ascent_return,
                           font_descent_return, overall_return)
                 XFontStruct *font_struct;
                 XChar2b *string;
                 int nchars;
                 int *direction_return;
                 int *font_ascent_return, *font_descent_return;
                 XCharStruct *overall_return;
    
    ³»¿ëÀº XQueryTextExtents16 °ú °°½À´Ï´Ù.

¿À´ÃÀÇ ¼³¸íÀº ¿©±â¼­ ¸¶Ä¡±â·Î ÇÏ°Ú½À´Ï´Ù. »ç½Ç ÆùÆ®¿¡ ´ëÇÑ ¼³¸íÀº ±×¸²À» º¸¿© µå¸®¸é¼­ ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù´Â »ý°¢ÀÌ µå´Â±º¿ä. ¼­Á¡¿¡ °¡º¸½Ã¸é ¸¹Àº Âü°í ¼­ÀûÀÌ ÀÖÀ¸¹Ç·Î ±×³É ½½Â½ ÆùÆ® Property ¿¡ °üÇÑ ºÎºÐÀ» Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù.

±×¸®°í ÇÑ±Û ÇÁ¸°ÆÃÀ» À§Çؼ­´Â ÇÑÅÒ ¼Ò½ºÀÇ hangul.c ºÎºÐÀ» Àß ÈȾ½Ã±â ¹Ù¶ø´Ï´Ù. ¶Ç´Â ÇÑ±Û fvwm 2.0.42 ¼Ò½º¿¡¼­ libs µð·ºÅ丮¿¡ °¡º¸½Ã¸é HangulSupport.c ¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±×°ÍÀ» »ìÆ캸½Ã´øÁö¿ä...

7. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : À̺¥Æ®Ã³¸®

Áö±Ý±îÁö´Â ±× ÀÚü·Î´Â ½ÇÁúÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé±â¿¡´Â ºÒ°¡´ÉÇÑ °¡Àå ±âº»ÀûÀÎ °³³äµé¸¸À» ÀÍÇô¿ÔÁö¸¸, ÀÌÁ¦ºÎÅÍ´Â Á» ´Þ¶óÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀº ÀÌÁ¦ º»°ÝÀûÀÎ ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡½Ç Áغñ°¡ µÇ¾ú½À´Ï´Ù.

¿À´Ã ¹è¿ï ³»¿ëÀº "GUI ÇÁ·Î±×·¡¹Ö"¿¡¼­ °¡Àå ÇÙ½ÉÀûÀÎ °³³äÀÎ "À̺¥Æ® event"¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ÀÌ¹Ì À©µµ±× ÇÁ·Î±×·¡¹Ö °°Àº °ÍÀ» Çغ» ÀûÀÌ ÀÖ´Â ºÐµéÀº, ±×¸®°í ƯÈ÷ ¿¾³¯ µµ±× ½ÃÀýºÎÅÍ C ·Î ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀº Áö±ÝºÎÅÍ ¸»¾¸µå¸®´Â ¸î °¡Áö ¾ê±â¿¡ ´ëÇÏ¿© ±Ý¹æ ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀüÇô ¸ð¸£½Ã´Â Ãʺ¸ºÐÀÇ °æ¿ì¿¡´Â ÀÏ´Ü ¸ðµç °ÍÀ» ÀÌÇØÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ´ÜÁö À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº ¸ðµÎµé "À̺¥Æ®" ó¸® ¹æ½ÄÀÇ µ¶Æ¯ÇÑ ÇÁ·Î±×·¡¹Ö ½ºÅ¸ÀÏÀ» °®´Â´Ù´Â ¹®±¸ Çϳª¸¸ ±â¾ïÇØ Áֽñ⠹ٶø´Ï´Ù.

7.1 À̺¥Æ® ó¸® ¹æ½Ä°ú ¼øÂ÷ÀûÀΠó¸® ¹æ½Ä Â÷ÀÌÁ¡

¿ì¼± ¼øÂ÷ÀûÀΠó¸® ¹æ½Ä¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

C ¸¦ º¸Åë ÀýÂ÷¾ð¾î¶ó°í ºÎ¸¨´Ï´Ù. ¸ðµç ÀÏ¿¡´Â ¼ø¼­°¡ ÀÖ´Ù! °¡Àå Àΰ£ÀûÀÎ »ç°í ¹æ½ÄÀ» ¸ðµ¨·Î ÇÏ°í ÀÖ°í °á±¹ ¾î¶² ¾ð¾îµç °£¿¡ Àΰ£ÀÇ ³í¸®´Â Ç×»ó ¿øÀÎ --< °á°úÀÇ ¼ø¼­¸¦ °¡Áö°í »ý°¢ÇÏ´Â ¹æ½ÄÀÇ º¯È­, öÇÐÀÇ º¯È­¾øÀÌ´Â ¾ÕÀ¸·Îµµ Ç×»ó ³²¾ÆÀÖÀ» °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ Áö±Ý ÇÏ°í ÀÖ´Â ¸ðµç ÀÏÀÌ ´Ù ÀýÂ÷¸¦ °®½À´Ï´Ù. ±×¸®°í ±×°ÍÀº Ç×»ó ¸ðµç ÇÁ·Î±×·¡¹ÖÀÇ ±âº»ÀÌ¸ç ³ªÁß¿¡ À̺¥Æ® ó¸® ¹æ½ÄÀ̶ó ÇÒ Áö¶óµµ ½ºÄÉÀÏÀ» ÀÛ°Ô º¸¸é °á±¹¿¡´Â Àڱ׸¶ÇÑ ¼øÂ÷ ó¸® ¹æ½ÄµéÀÇ °áÇÕÀ̶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

º¸Åë ¼Ð ½ºÅ©¸³Æ®¿Í °°ÀÌ ´Ü ÇÑ ¹øÀÇ ÀÔ·ÂÀ» ¹Þ°í ´Ü ÇÑ ¹øÀÇ Ã³¸®·Î ³¡³ª´Â ÇÁ·Î±×·¥µéÀÌ ÀüÇüÀûÀÎ ¿¹ÀÔ´Ï´Ù.

±×¿¡ ¹ÝÇؼ­ À̺¥Æ® ó¸® ¹æ½ÄÀº "¼ö¸¹Àº ¹öÆ°, ¾ðÁ¦ Ŭ¸¯ÇÒ Áö ¸ð¸£´Â º¯´öÀåÀÌ ¸¶¿ì½º"¶ó´Â °ÍÀ» Ư¡À¸·Î ÇÕ´Ï´Ù. À©µµ¿ì ½Ã½ºÅÛÀÌ µÇ¸é¼­ºÎÅÍ ÇÁ·Î±×·¡¸ÓµéÀº Á¤¸»·Î ¸¹Àº °í¹ÎÀ» Çϱ⠽ÃÀÛÇßÁö¿ä. µµ´ëü ¼ø¼­¶ó´Â °ÍÀ» ¹ß°ßÇϱⰡ Èûµé´Ù´Â °ÍÀÌ ¹®Á¦ÀÔ´Ï´Ù. ¾î¶² ¹öÆ°À» ´©¸¥ ´ÙÀ½ ¾î¶² ¹öÆ°À» ´©¸¦ °ÍÀÎÁö´Â ¿¹ÃøÇÒ ¼ö°¡ ¾ø ½À´Ï´Ù. ¼øÁøÇÑ »ç¿ëÀÚ´Â ¾Æ¹«·¸°Ô ¸¶À½³»Å°´Â ´ë·Î ¹öÆ°À» ´­·¯´ð´Ï´Ù. µµ´ëü ¸¶¿ì½º°¡ ¾îµð·Î ¿òÁ÷ÀÏ Áöµµ ¿¹°ßÇÒ ¼ö°¡ ¾ø½À´Ï´Ù.

ÀÏÀÌ ÀÌ·¯Çϱ⠶§¹®¿¡ X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀº ¾ÆÁÖ ÆÇÀÌÇÏ°Ô ´Ù¸¥ ¾î¶² ÀÏÁ¤ ÇÑ ÆÐÅÏÀ» °®½À´Ï´Ù. »ç½Ç ³ªÁß¿¡ º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ À̺¥Æ® 󸮹æ½ÄÀ̶ó´Â °Íµµ ¾ÆÁÖ ½±½À´Ï´Ù. ±×¸®°í ´ëÇü ÇÁ·Î±×·¥À» ¸¸µé ¶§ ÁÁÁö¿ä. ±×¸®°í À̺¥Æ® 󸮹æ½ÄÀº ±× ¹«¾ùº¸´Ùµµ C++ °ú °°Àº ¿ÀºêÁ§Æ® ¿À¸®¿£Æ¼µðµå ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í Á¦ÀÏ Àß ¸Â½À´Ï´Ù. ÇÏÁö¸¸ X À©µµ¿ì´Â ¾ÆÁ÷ C ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î µÇ¾î ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ C++ ·Î Â¥µµ »ó°ü¾ø°í ¾î¶»°Ô º¸¸é C++ ·Î Â¥´Â °ÍÀÌ ´õ¿í ¾Ë¸Â´ÂÁöµµ ¸ð¸¨´Ï´Ù. ½ÇÁ¦ X ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é OOP ºñ½ÁÇÑ ½ºÅ¸ÀÏÀ» ¸¹ÀÌ »ç¿ëÇϴϱî¿ä.

À̺¥Æ® ó¸® ¹æ½ÄÀÇ ÇÁ·Î±×·¡¹ÖÀº º¸Åë ÀÌ·± ½ÄÀ¸·Î »ý°¢ÇÕ´Ï´Ù.

¹öÆ°À» ¸î °³ ¸¸µç´Ù. °¢ ¹öÆ°ÀÌ ´­·ÁÁö¸é ¼öÇàµÉ µ¶Æ¯ÇÑ ÇÔ¼öµéÀ» ÁöÁ¤ÇØÁØ´Ù. ±×¸®°í ³ª¼­ ¿ì¸®´Â ¹öÆ°ÀÌ ´­·ÁÁö±â¸¸À» ±â´Ù¸°´Ù. ±×¸®°í ¹öÆ°ÀÌ ´­·ÁÁú ¶§¸¶´Ù ¿¹¸¦ µé¾î 1 ¹ø ¹öÆ°Àº ¿øÀ», 2 ¹ø ¹öÆ°Àº »ç°¢ÇüÀ», ±×¸®°í 3 ¹ø ¹öÆ°Àº Á÷¼±À» ±×¸®µµ·Ï ÇÑ´Ù. Áï ¾î¶² °´Ã¼¸¦ ¸ÕÀú ¸¸µé°í ³ª¼­ ±×°Í¿¡´Ù°¡ ƯÁ¤ ±â´ÉÀ» ºÎ¿©ÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. ÀÌ·± ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀ̱⠶§¹®¿¡ ºñÁÖ¾ó C ´Ï ºñÁÖ¾ó º£À̽ÄÀÌ´Ï ÇÏ´Â °ÍÀÌ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù. ±â¾ïÇϽʽÿä. ¸ÕÀú ¾î¶² ¹öÆ°À» ¸¸µì´Ï´Ù. ±×¸®°í ±× ¹öÆ°¿¡´Ù°¡ ¿øÇÏ´Â ±â´ÉÀ» Çϳª¾¿ ºÎ¿©ÇÕ´Ï´Ù. ´­·ÁÁö¸é ½ÇÇàÀ» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î "Exit" ¹öÆ°À» ¸¸µé¸é ¿ì¸®´Â ÇÁ·Î±×·¥À» Á¾·áÇÏ¸é µË´Ï´Ù.

7.2 º¹ÀâÇÑ ÀÏÀº X ¼­¹ö°¡ ó¸®ÇÕ´Ï´Ù. ¿ì¸®´Â ´ÜÁö...

ÀÚ½ÅÀÌ ÇÁ·Î±×·¡¹ÖÇÏ´Â Ç÷§Æ÷¿ÈÀ» ¹Ï´Â ÀÏÀº ÂüÀ¸·Î Áß¿äÇÕ´Ï´Ù. À©µµ±×95 ÇÁ·Î±×·¡¸ÓµéÀº À©µµ±×95¸¦ ¹Ï°í, X ÇÁ·Î±×·¡¸ÓµéÀº X À©µµ¿ì¸¦ ¹Ï½À´Ï´Ù. ÀüÀÚ´Â M$°¡ ¼¼°è ½ÃÀå¿¡¼­ À̱ä´Ù´Â °ÍÀ» ¹Ï°í ÈÄÀÚÀº X À©µµ¿ì ±× ÀÚüÀÇ ´É·Â°ú °¡´É¼ºÀ» ¹Ï½À´Ï´Ù. À©µµ±×95 ÀÚü¸¦ ¹ÏÁö´Â ¾Ê°ÚÁö¿ä? :)

X À©µµ¿ì°¡ ¶ßÁö ¸¶ÀÚ Á¤½Å¾øÀÌ µ¹¾Æ´Ù´Ï´Â ¸¶¿ì½º, ¶Ç´Â ¾ðÁ¦ ŸÀÌÇ뵃 Áö ¸ð¸£´Â Å°º¸µå, ÀÌ ¸ðµç °Í¿¡ ´ëÇؼ­ ¿©·¯ºÐÀº °ÆÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ¸¶¿ì½º°¡ ¾îµð·Î ¿ò Á÷ÀÌ°í ÀÖ´ÂÁö ±×¸®°í Å°º¸µå ÀÔ·ÂÀ» ¹ÞÀ¸¸é ¾î¶»°Ô ÇÒ °ÍÀÎÁö¿¡ ´ëÇؼ­´Â X ¼­¹ö°¡ ´ã´çÇÕ´Ï´Ù. ±×´Â ¸¶Ä¡ ¿©·¯ºÐ¿¡°Ô Ä«µå Æи¦ µ¹¸®´Â µô·¯¿Íµµ °°½À´Ï´Ù. ¿©·¯ºÐÀÌ ¸¸µç ÇÁ·Î±×·¥Àº ÇÔ²² ½ÇÇàµÇ°í ÀÖ´Â ±× ¸¹Àº âµé°ú °øÁ¸ÇÕ´Ï´Ù. µµ´ëü ¾î´À â¿¡¼­ ¸¶¿ì½º Ŭ¸¯ÀÌ ¹ú¾îÁ³´ÂÁö¿¡ ´ëÇؼ­ °ÆÁ¤ÇÒ ÇÊ¿ä¾ø½À´Ï´Ù. ¿©·¯ºÐÀÇ Ã¢¿¡¼­ Ŭ¸¯ÀÌ ÀÌ·ç¾îÁö¸é X ¼­¹ö°¡ ¾Ë¾Æ¼­ ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥¿¡°Ô "À̺¥Æ®"¸¦ º¸³À´Ï´Ù.

½ÉÁö¾î ³ª´Â Å°º¸µå ÀÔ·ÂÀº ÇÊ¿ä¾ø´Ù. ´ÜÁö ¸¶¿ì½º¸¸À¸·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À̹ǷΠ"Å°º¸µå ÀÔ·ÂÀ̶ó´Â À̺¥Æ®"´Â Å뺸ÇÏÁö ¸»¾Æ´Þ¶ó! °í ¿äûÇϸé X ¼­¹ö´Â ¾Ë¾Æ¼­ Å°º¸µå ÀÔ·ÂÀº ¿©·¯ºÐ¿¡°Ô ÁÖÁö ¾Ê½À´Ï´Ù.

¿©·¯ºÐÀº while ¹®Àå Çϳª¸¦ °¡Áö°í ¹«ÇÑ·çÇÁ¸¦ µ¹¸é¼­ ¸¸¾à À̺¥Æ®°¡ »ý±ä´Ù¸é ±×°ÍÀÌ ¸¶¿ì½º Ŭ¸¯ÀÎÁö ¾Æ´Ï¸é Å°º¸µå ÀÔ·ÂÀÎÁö, ¸¶¿ì½º Ŭ¸¯ÀÌ¸é ¸î ¹ø° ¸¶¿ì½º ¹öÆ°ÀÎÁö ¸î °³¸¦ µ¿½Ã¿¡ ´­·¶´ÂÁö µîÀ» È®ÀÎÇÏ°í ¾Ë¸Â´Â ÇൿÀ» ÃëÇØÁÖ¸é µË´Ï´Ù. °³³ä»ó ÇÁ·Î±×·¡¹ÖÀº ½±½À´Ï´Ù. ¿©·¯ºÐ ÇÁ·Î±×·¥ÀÇ ¼º°øÀº ¿À·ÎÁö ¿©·¯ºÐÀÇ Ã¢Á¶·Â¿¡ ´Þ¸° °ÍÀÌÁö »ç½Ç À©µµ±×95ÀÎÁö X À©µµ¿ìÀÎÁö´Â »ó°ü¾ø½À´Ï´Ù. ½ÉÁö¾î ²À X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» C ¾ð¾î·Î Ç϶õ ¹ýµµ ¾ø½À´Ï´Ù. Tcl/Tk ¿Í °°Àº ¸ÚÁø ½ºÅ©¸³Æà ¾ð¾îµéµµ ¸¹°í ±× °­·ÂÇÔÀ» ÀÔÁõ¹Þ°í ÀÖ½À´Ï´Ù. ´ÜÁö C ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÑ´Ù´Â °ÍÀº ¿©·¯ºÐ¿¡°Ô ¾ÆÁÖ ÅºÅºÇÑ ±âÃʸ¦ ¸¶·ÃÇØÁÖ°í ´Ù¸¥ ¾î¶² ÇÁ·Î±×·¡¹Öµµ ½±°Ô ÇÒ ¼ö ÀÖ´Â ÀڽۨÀ» Áشٴ °ÍÀ» ¸»¾¸µå¸®°í ½Í½À´Ï´Ù.

7.3 ÀϹÝÀûÀÎ ÄÚµå ÇüŸ¦ º¸°í ´«¿¡ ÀÍÈü½Ã´Ù.

ÀÌ ¼Ò½º´Â ¿Ïº®ÇÑ ¼Ò½º°¡ ¾Æ´Ï¶ó ±×³É °³³äÀûÀÎ ¼Ò½ºÀÏ »ÓÀÔ´Ï´Ù.

 Display display;

 XEvent xe;                             /* À̺¥Æ® ó¸® ±¸Á¶Ã¼ */
 Window window1;


 /* X ¼­¹ö¶û Á¢¼ÓÀ» ÇÕ´Ï´Ù. XOpenDisplay ÇÔ¼ö »ç¿ë */

 /* °£´ÜÇÑ Ã¢ Çϳª¸¦ ¸¸µé¾îµÓ´Ï´Ù. */

 /* ¿øÇÏ´Â À̺¥Æ®¸¸À» ¼­¹ö¿¡°Ô µî·ÏÇÕ´Ï´Ù */
 XSelectInput( display, window1, StructureNotifyMask | ExposureMask 
                                | ButtonPressMask );

 XMapWindow( display, window1 );

 /* ¿©±â¼­ºÎÅÍ º»°ÝÀûÀÎ ÇÁ·Î±×·¥ÀÇ ·ÎÁ÷ÀÌ Àü°³µË´Ï´Ù */

 while(1)       /* WHILE ¹®ÀÇ ½ÃÀÛ */
 {
        /* À̺¥Æ®°¡ »ý±â±â¸¦ ±â´Ù¸®°í ÀÖ½À´Ï´Ù */
        XNextEvent( display, &xe );

        /* À̺¥Æ®°¡ »ý±â¸é ´ÙÀ½ ÁÙÀ» ½ÇÇàÇÕ´Ï´Ù. À̺¥Æ®°¡ ¾î¶² Á¾·ùÀÇ À̺¥
           Æ®ÀÎÁö¸¦ ½Äº°Çس»°í ±×¿¡ ¾Ë¸Â´Â ÇൿÀ» ÇÕ´Ï´Ù                   */

        switch ( xe.type )      {

            case Expose:
                 printf("Expose À̺¥Æ® ¹ß»ý\n");
                 break;

            case ButtonPress:
                 printf("¹öÆ°ÀÌ ´­·ÁÁ³½À´Ï´Ù.\n");
                 break;

            case ConfigureNotify:
                 printf("âÀÇ »óÅ°¡ ¹Ù²î¾ú½À´Ï´Ù.\n");
                 break

            case ClientMessage:
                 printf("´Ù¸¥ Ŭ¶óÀ̾ðÆ®°¡ ¸Þ¼¼Áö¸¦ º¸³»¿Ô½À´Ï´Ù\n");
                 break;

            default:
                 printf("¹ß»ýÇÑ À̺¥Æ®¸¦ ¹«½ÃÇÕ´Ï´Ù\n");
                 break;
        }
 }              /* WHILE ¹®ÀÇ ³¡ */

À§¿¡¼­ º¸¿©µå¸° ÆÐÅÏÀ» ¸Ó¸® ¼Ó¿¡ Ç×»ó ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¹ö½º¸¦ Ÿ°í °¡¸é¼­µµ ±×¸®°í È­Àå½Ç¿¡¼­ º¼ ÀÏÀ» º¼ ¶§µµ À½¾ÇÀ» µè°í À־ ¿©ÀÚ Ä£±¸¸¦ ¸¸³ª¼­ µÎ ´«À» ¹Ù¶óº¸°í ÀÖÀ¸¸é¼­µµ... Àá°á¿¡µµ...

¹«¾ùÀ̵ç ÀüÇüÀûÀÎ ÆÐÅÏÀ̶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ ÆÐÅÏÀ» ´«Ä¡Ã¤½Ã´Â °ÍÀÌ °¡Àå Áß¿äÇÕ´Ï´Ù. ±×·³ ÀÌÁ¦ Â÷±ÙÂ÷±Ù ¾Ë¾Æ°¡º¸µµ·Ï ÇսôÙ.

7.4 ÆÐÅÏ ºÐ¼®

Á¦ÀÏ ¸ÕÀú ´«¿¡ ¶ç´Â °ÍÀº ¹Ù·Î XEvent ¶ó´Â »õ·Î¿î ÀÚ·áÇüÀÔ´Ï´Ù. C ÇÁ·Î±×·¥ÀÌµç ¹¹µç °£¿¡ ÇÁ·Î±×·¡¹ÖÀÇ ±âº» ¿ä¼Ò´Â "ÀÚ·áÇü°ú ¾Ë°í¸®Áò"ÀÔ´Ï´Ù. ÈÄÀÚ´Â ¿©·¯ºÐÀÇ ¸òÀ̶ó Ä¡°í ÀÏ´Ü ÀڱⰡ »ç¿ëÇÏ´Â ÀÚ·áÇü¿¡ ´ëÇؼ­ Àͼ÷ÇØÁ® ÀÖÁö ¾Ê°Å³ª ´ëÃæ ¾Ë°í ³Ñ¾î°¡°Ô µÈ´Ù¸é ÇÁ·Î±×·¡¹ÖÀÇ ¹Ý¿¡ Àͼ÷ÇÏÁö ¾Ê°í ¹ÝÀ» ´ëÃæ ÇØ°áÇÑ °Í°ú µ¿ÀÏ ÇÕ´Ï´Ù. ÀÚ·áÇü¿¡ ´ëÇؼ­ Áï½Ã ¾Ë¾Æº¸µµ·Ï ÇսôÙ.

/*
 * this union is defined so Xlib can always use the same sized
 * event structure internally, to avoid memory fragmentation.
 */
typedef union _XEvent {
        int type;               /* must not be changed; first element */
        XAnyEvent xany;
        XKeyEvent xkey;
        XButtonEvent xbutton;
        XMotionEvent xmotion;
        XCrossingEvent xcrossing;
        XFocusChangeEvent xfocus;
        XExposeEvent xexpose;
        XGraphicsExposeEvent xgraphicsexpose;
        XNoExposeEvent xnoexpose;
        XVisibilityEvent xvisibility;
        XCreateWindowEvent xcreatewindow;
        XDestroyWindowEvent xdestroywindow;
        XUnmapEvent xunmap;
        XMapEvent xmap;
        XMapRequestEvent xmaprequest;
        XReparentEvent xreparent;
        XConfigureEvent xconfigure;
        XGravityEvent xgravity;
        XResizeRequestEvent xresizerequest;
        XConfigureRequestEvent xconfigurerequest;
        XCirculateEvent xcirculate;
        XCirculateRequestEvent xcirculaterequest;
        XPropertyEvent xproperty;
        XSelectionClearEvent xselectionclear;
        XSelectionRequestEvent xselectionrequest;
        XSelectionEvent xselection;
        XColormapEvent xcolormap;
        XClientMessageEvent xclient;
        XMappingEvent xmapping;
        XErrorEvent xerror;
        XKeymapEvent xkeymap;
        long pad[24];
} XEvent;
XEvent ´Â <X11/Xlib.h>¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. Áö±Ý ´çÀå Xlib.h Çì´õÈ­ÀÏÀ» ÆíÁý±â·Î ¿­¾î¼­ ³»¿ëÀ» È®ÀÎÇϽʽÿä. Çì´õ È­ÀÏÀÇ ³»¿ëÀº ¾ðÁ¨°¡´Â ÇÑ ¹ø ¸ù¶¥ ÀоîºÁ¾ß ÇÒ ¶§°¡ ¿À°ÚÁö¿ä?

º¸½Ã´Ù½ÃÇÇ XEvent ´Â °ø¿ëü( À¯´Ï¾ð union )ÀÔ´Ï´Ù. °ø¿ëü°¡ ¹«¾ùÀÎÁö ¸ð¸£½Å´Ù¸é ÀÏ´Ü X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº Á¢¾îµÎ½Ã°í Áö±Ý ´çÀå °¡Àå ½¬¿î C ÇÁ·Î±×·¡¹Ö Ã¥¿¡¼­ °ø¿ëü¿¡ ´ëÇؼ­ °øºÎÇϽñ⠹ٶø´Ï´Ù.

XEvent °ø¿ëüÀÇ ±¸Á¶´Â ÀüüÀûÀ¸·Î ´ÙÀ½°ú °°½À´Ï´Ù.

typedef union _XEvent {
        int type;               /* ²À! ù¹ø° ¸â¹ö¿©¾ß ÇÑ´Ù. */
        ...
        X*Event <º¯¼ö¸í>
        ...
        long pad[24];
} XEvent;

°ø¿ëüÀÇ Å©±â´Â °ø¿ëüÀÇ ¸â¹ö Áß °¡Àå Å« ÀÚ·áÇüÀÇ Å©±â¿Í °°½À´Ï´Ù. ¸¶Áö¸· ¸â¹ö¸¦ º¸¸é XEvent ´Â long Çü ÀÚ·á 24 °³ Á¤µµÀÇ Å©±â¸¦ °®´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¾Æ¸¶µµ Á¦ÀÏ ÀÛÀº ÀÚ·áÇüÀº int type ÀÌ°ÚÁÒ?

Áß°£¿¡ ¹«¼öÈ÷ ¸¹ÀÌ µé¾î°¡ ÀÖ´Â X*Event ÀÚ·áÇüÀ» ÇÑ ¹ø º¾½Ã´Ù. XAnyEvent, XKeyEvent, XButtonEvent, XMotionEvent, XExposeEvent µîµîÀÇ X ·Î ½ÃÀÛÇÏ°í Event·Î ³¡³ª´Â À̸§ÀÇ ±¸Á¶Ã¼°¡ ÀÖ½À´Ï´Ù. ±× ±¸Á¶Ã¼ ÀÚ·áÇüµé ¶ÇÇÑ ¸ðµÎ Xlib.h ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÇÑ ¹ø »ìÆ캸ÁÒ.

typedef struct {
        int type;             /* <-- ÁÖ¸ñ! */
        unsigned long serial; /* # of last request processed by server */
        Bool send_event;      /* true if this came from a SendEvent request */
        Display *display;/* Display the event was read from */
        Window window;  /* window on which event was requested in event mask */
} XAnyEvent;

typedef struct {
        int type;             /* <-- ÁÖ¸ñ! */
        unsigned long serial; /* # of last request processed by server */
        Bool send_event;      /* true if this came from a SendEvent request */
        Display *display;     /* Display the event was read from */
        Window window;        /* "event" window it is reported relative to */
        Window root;          /* root window that the event occured on */
        Window subwindow;     /* child window */
        Time time;            /* milliseconds */
        int x, y;             /* pointer x, y coordinates in event window */
        int x_root, y_root;   /* coordinates relative to root */
        unsigned int state;   /* key or button mask */
        unsigned int keycode; /* detail */
        Bool same_screen;     /* same screen flag */
} XKeyEvent;

typedef struct {
        int type;             /* <-- ÁÖ¸ñ! */ 
        unsigned long serial; /* # of last request processed by server */
        Bool send_event;      /* true if this came from a SendEvent request */
        Display *display;     /* Display the event was read from */
        Window window;        /* "event" window it is reported relative to */
        Window root;          /* root window that the event occured on */
        Window subwindow;     /* child window */
        Time time;            /* milliseconds */
        int x, y;             /* pointer x, y coordinates in event window */
        int x_root, y_root;   /* coordinates relative to root */
        unsigned int state;   /* key or button mask */
        unsigned int button;  /* detail */
        Bool same_screen;     /* same screen flag */
} XButtonEvent;

typedef struct {
        int type;             /* <-- ÁÖ¸ñ! */
        unsigned long serial; /* # of last request processed by server */
        Bool send_event;      /* true if this came from a SendEvent request */
        Display *display;     /* Display the event was read from */
        Window window;        /* "event" window reported relative to */
        Window root;          /* root window that the event occured on */
        Window subwindow;     /* child window */
        Time time;            /* milliseconds */
        int x, y;             /* pointer x, y coordinates in event window */
        int x_root, y_root;   /* coordinates relative to root */
        unsigned int state;   /* key or button mask */
        char is_hint;         /* detail */
        Bool same_screen;     /* same screen flag */
} XMotionEvent;

typedef struct {
        int type;             /* <-- ÁÖ¸ñ! */
        unsigned long serial; /* # of last request processed by server */
        Bool send_event;      /* true if this came from a SendEvent request */
        Display *display;     /* Display the event was read from */
        Window window;
        int x, y;
        int width, height;
        int count;            /* if non-zero, at least this many more */
} XExposeEvent;

¿©±â¼­´Â ¸î °³ÀÇ ±¸Á¶Ã¼¸¸À» ¿¹·Î µé¾úÀ» »ÓÀÔ´Ï´Ù. ¿·¿¡ ¾à°£ÀÇ ¼³¸íÀÌ µé¾îÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. ¸ðµÎµé ±¸Á¶Ã¼Àε¥ ±¸Á¶Ã¼ ¸â¹öµéÀ» ¼­·Î ºñ±³ÇØ°¡¸é¼­ º¸½Ê½Ã¿ä. ¿©±â¼­ ¿©·¯ºÐ ½º½º·Î °üÂûÀ» Çس»¸é X ÇÁ·Î±×·¡¹ÖÀº Àç¹ÌÀÖ½À´Ï´Ù.

XAnyEvent ÀÇ ³»¿ëÀº ÇÑ ¹ø ¸Ó¸® ¼Ó¿¡ ³Ö°í ´Ù¸¥ X*Event ±¸Á¶Ã¼ ¸â¹öµéÀ» »ìÆ캸½Ê½Ã¿ä. ±×·¯¸é ¿©Áö¾øÀÌ ¸ðµç ±¸Á¶Ã¼¿¡´Â XAnyEvent ÀÇ ³»¿ëÀÌ ¸ðµÎ µé¾î ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

7.5 À̺¥Æ® ÀÚ·áÇü »ç¿ë¹ý

¸ðµç À̺¥Æ® ±¸Á¶Ã¼µéÀ» ´ëÇ¥ÇÏ°í ÀÖ´Â °ø¿ëü XEvent ¸¦ ÇÁ·Î±×·¥¿¡¼­ ÀÏ´Ü »ç¿ëÇÕ´Ï´Ù. X ¼­¹ö°¡ ¿ì¸®µé ÇÁ·Î±×·¥¿¡°Ô ¾î¶² À̺¥Æ®°¡ ¹ß»ýÇß´Ù°í ÇÏ¸é ¹Ù·Î XEvent¸¦ º¸³»ÁÝ´Ï´Ù. ±×·¯¸é ¿ì¸®´Â ¿ì¼±! XEvent ÀÇ °¡Àå ±âÃÊÀûÀÎ ÀÚ·áÇüÀÎ int typeÀÇ ³»¿ëÀ» »ìÆ캾´Ï´Ù. ±× type °ªÀ» °¡Áö°í ÀÌ À̺¥Æ®°¡ °ú¿¬ ¸¶¿ì½º°ú °ü·ÃµÈ °ÍÀÎÁö ¾Æ´Ï¸é Å°º¸µå¿Í °ü·ÃµÈ °ÍÀÎÁö µîÀ» ÆǺ°ÇÕ´Ï´Ù. ÆǺ°ÀÌ µÇ¸é ±×¿¡ ¾Ë¸Â´Â ÀÚ·áÇü Áï XEventÀÇ °ø¿ëü ¸â¹öµéÀ» ÀûÀýÇÏ°Ô »ç¿ëÇÕ´Ï´Ù. ¸¶¿ì½º¿Í °ü·ÃµÇ¸é XEvent ¿¡¼­ ¸¶¿ì½º¿Í °ü·ÃµÈ ¸â¹öÀÎ XButtonEvent, XMotionEvent °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© À̺¥Æ®¸¦ Çؼ®ÇÕ´Ï´Ù. Å°º¸µå¿¡ °ü·ÃµÇ¾î ÀÖ´Ù¸é À̹ø¿¡´Â ±× ÀÚ·áÇüµé ´ë½Å¿¡ XKeyEvent ¸¦ »ç¿ëÇÕ´Ï´Ù.

°¢ ±¸Á¶Ã¼´Â ¶Ç ´Ù½Ã Àڱ⿡°Ô ¾Ë¸Â´Â ±¸Á¶Ã¼ ¸â¹öµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ±×°ÍÀ» º¸°í Çؼ®ÇÏ¸é µË´Ï´Ù. ¸¸¾à ¸¶¿ì½º¿¡ °ü·ÃµÇ¾ú´Ù¸é unsigned int button ¸â¹ö¸¦ º¸°í ¾î¶² ¹öÆ°ÀÎÁö¸¦ Çؼ®ÇÕ´Ï´Ù. ¸¸¾à Å°º¸µå¿¡ °ü·ÃµÇ¾ú´Ù¸é unsigned int keycode ¸¦ º¸°í Çؼ®ÇÕ´Ï´Ù.

±×·¯ÇÑ °úÁ¤À» ¹Ù·Î switch ( xe.type ) ¹®Àå¿¡¼­ ÇÏ°í ÀÖ´Â °ÍÀÔ´Ï´Ù. case ¹®¿¡ ³ªÅ¸³­ Expose, ButtonPress µîÀº ¸ÅÅ©·ÎÀÔ´Ï´Ù. X.h ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

        #define KeyPress                2
        #define KeyRelease              3
        #define ButtonPress             4
        #define ButtonRelease           5
        #define MotionNotify            6
        #define EnterNotify             7
        #define LeaveNotify             8
        #define FocusIn                 9
        #define FocusOut                10
        #define KeymapNotify            11
        #define Expose                  12
        #define GraphicsExpose          13
        #define NoExpose                14
        #define VisibilityNotify        15

7.6 ⸶´Ù ÀڱⰡ ¿øÇÏ´Â À̺¥Æ®¸¸À» ¿¹¾àÇϱâ

¿¹Á¦ ¼Ò½º¸¦ º¸½Ã¸é ´ÙÀ½°ú °°Àº ºÎºÐÀÌ ÀÖ½À´Ï´Ù.

  XSelectInput( display, window1, StructureNotifyMask | ExposureMask 
                                  | ButtonPressMask );

  XMapWindow( display, window1 );

XSelectInputÀ̶ó´Â ÇÔ¼ö°¡ º¸À̴±º¿ä. »õ·Î¿î ÇÔ¼ö´Ï±î Àá½Ã ´«¿¡ ÀÍÇôµÎ¾î¾ß°ÚÁÒ? man ¸í·ÉÀ» ¶°¿Ã¸®¼Å¾ß ÇÕ´Ï´Ù. man XSelectInput

 NAME
       XSelectInput - À̺¥Æ® ÀÔ·ÂÀ» ¼±ÅÃÇÕ´Ï´Ù.

 SYNTAX
       XSelectInput(display, w, event_mask)
             Display *display;
             Window w;
             long event_mask;

 ARGUMENTS
       display    X ¼­¹ö¿ÍÀÇ Á¢¼Ó ID
       event_mask À̺¥Æ® ¸Å½ºÅ©
       w          À̺¥Æ® ¼±ÅÃÀ» Àû¿ëÇÒ Ã¢ ID

¸Å½ºÅ©(Mask)¶ó°í ÇÏ´Â ±â¹ý ¶ÇÇÑ ¾ÆÁÖ Áß¿äÇÑ C ÇÁ·Î±×·¡¹Ö ½ÇÀü ±â¹ýÀÔ´Ï´Ù. ¸ð¸£½Ã´Â ºÐÀº ´çÀå C ÇÁ·Î±×·¡¹Ö Ã¥À» º¸½Ê½Ã¿ä. Á¦°¡ »ý°¢¿£ ¿øÆÇ Ä¿´Ï°Ç & ¸®Ä¡ÀÇ ¾ÆÁÖ ¾ãÁö¸¸ ±× ¾î¶² C ÇÁ·Î±×·¡¹Ö Çؼ³Ã¥º¸´Ùµµ ¶Ù¾î³­ "C ÇÁ·Î±×·¡¹Ö ·©±ÍÁö" ¶ó´Â Ã¥À» ±ÇÇÕ´Ï´Ù. Ç×»ó °¡Áö°í ´Ù´Ï±â¿¡ Âü ÁÁ½À´Ï´Ù. ¾µµ¥ ¾øÀÌ ½±°Ô ¾²Áöµµ ¾î·Æ°Ô ¾²Áöµµ ¾ÊÀº ¸íÀúÀÌÁö¿ä.

À§¿¡¼­º¸¸é ¿ì¸®´Â °¢ ⸶´Ù XSelectInput À̶ó´Â ÇÔ¼ö¸¦ ÅëÇؼ­ ÀڱⰡ °ü½É°®´Â À̺¥Æ®¸¸À» µî·ÏÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î OK ³ª CANCEL ¹öÆ°À» Ç¥½ÃÇϴ âÀÇ ÀÔÀå¿¡¼­ Å°º¸µå ÀÔ·ÂÀ̳ª ¸¶¿ì½ºÀÇ À̵¿ °°Àº °ÍÀº ÀüÇô ÇÊ¿ä¾ø°ÚÁö¿ä? ¹öÆ°ÀÌ ´­·È³ª ¾È´­·È³ª¸¸ È®ÀÎÇÏ¸é µË´Ï´Ù.

 StructureNotifyMask | ExposureMask | ButtonPressMask

ºñÆ®¿¬»ê OR ¶ÇÇÑ ¾ÆÁÖ ¸¹ÀÌ Á¢ÇÏ´Â ±â¼úÀÔ´Ï´Ù.

 #define NoEventMask                     0L
 #define KeyPressMask                    (1L<<0)  
 #define KeyReleaseMask                  (1L<<1)  
 #define ButtonPressMask                 (1L<<2)  
 #define ButtonReleaseMask               (1L<<3)  
 #define EnterWindowMask                 (1L<<4)  
 #define LeaveWindowMask                 (1L<<5)  
 #define PointerMotionMask               (1L<<6)  
 #define PointerMotionHintMask           (1L<<7)  
 #define Button1MotionMask               (1L<<8)  
 #define Button2MotionMask               (1L<<9)  
 #define Button3MotionMask               (1L<<10) 
 #define Button4MotionMask               (1L<<11) 
 #define Button5MotionMask               (1L<<12) 
 #define ButtonMotionMask                (1L<<13) 

¿©·¯ºÐÀº (1L>>2) ¶ó´Â Ç¥Çö¿¡ Àͼ÷ÇØÁö¼Å¾ß ÇÕ´Ï´Ù. ¾ÕÀ¸·Îµµ ÀÚÁÖ ³ª¿À°í ±âº»ÀûÀÎ ½ÇÀü Å×Å©´ÐÀ̴ϱî¿ä.

±×·³ °£´ÜÇÑ ¿¹¸¦ µé¾îº¼±î¿ä?

°£´ÜÇÑ ¿¹

°£´ÜÇÑ ¹öÆ°À» Çϳª ¸¸µé¾î¼­ Ŭ¸¯Çϸé Hello, Linuxers ¶ó´Â ¹®ÀÚ¿­À» Ãâ·ÂÇÑ ÈÄ Á¾·áÇÏ´Â ¿¹¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù.

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>

int main( int argc, char* argv[] )
{
    Display *dpy;
    Window  w;
    Font    f;
    GC      gc;
    XEvent  xe;

    dpy = XOpenDisplay( NULL);
    w   = XCreateSimpleWindow( dpy, RootWindow( dpy, 0 ), 50, 50,
                                    100, 50, 5, BlackPixel( dpy, 0 ),
                                    WhitePixel( dpy, 0 ) );
    gc = XCreateGC( dpy, w, 0L, ( XGCValues * ) NULL );
    f  = XLoadFont( dpy, "fixed" );
    XSetFont( dpy, gc, f );
    XSetLineAttributes( dpy, gc, 5, LineSolid, 
                         CapRound, JoinRound );

    XSelectInput( dpy, w, ExposureMask | ButtonPressMask | EnterWindowMask 
                           | LeaveWindowMask );

    XMapWindow( dpy, w );

    XFlush( dpy );

    while ( True )
    {
            XNextEvent( dpy, &xe );

            switch ( xe.type )      {
            case Expose:
                printf("Expose À̺¥Æ®°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n");
                XSetForeground( dpy, gc, BlackPixel( dpy, 0 ) )
                XDrawString( dpy, w, gc, 40, 30, "O K", 3 );
                break;
            case ButtonPress:
                printf("¹öÆ°À» ´©¸£¼Ì½À´Ï´Ù!\n");
                exit(1);
                break;
            case EnterNotify:
                printf("¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î¿Ô½À´Ï´Ù.\n");
                XSetForeground( dpy, gc, BlackPixel( dpy, 0 ) );
                XDrawRectangle( dpy, w, gc, 10, 10, 80, 30 );
                break;
            case LeaveNotify:
                printf("¸¶¿ì½º°¡ â ¹ÛÀ¸·Î ³ª°¬½À´Ï´Ù.\n");
                XSetForeground( dpy, gc, WhitePixel( dpy, 0 ) );
                XDrawRectangle( dpy, w, gc, 10, 10, 80, 30 );
                break;
            default:
                printf("¸ð¸£´Â À̺¥Æ®ÀÔ´Ï´Ù. ¹«½ÃÇÕ´Ï´Ù.\n");
                break;
            }
    }
        return 0;
}

À§ ¿¹Á¦¸¦ event.example.c ¶ó´Â À̸§À¸·Î ÀúÀåÇÏ°í ´ÙÀ½°ú °°ÀÌ ÇØÁÝ´Ï´Ù.

 gcc -o event.example event.example.c -lX11 -L/usr/X11/lib

½ÇÇàÀº ÇÑÅÒ Ã¢°ú °°ÀÌ ÇѱÛÀÌ Ãâ·ÂµÉ ¼ö ÀÖ´Â °÷¿¡¼­ ½ÇÇàÇØÁֽʽÿä.

 ./event.example

¿¹Á¦¿¡ ´ëÇÑ ¼³¸í

XSelectInput ÇÔ¼ö°¡ ³ª¿À±â Àü±îÁö ³ª¿À´Â ¸ðµç °ÍµéÀº ÀÌ¹Ì ¿ì¸®°¡ Àß ¾Ë°í ÀÖ´Â ³»¿ëÀÔ´Ï´Ù. ¼­¹ö¿Í Á¢¼ÓÀ» ÇÏ°í âÀ» Çϳª ¸¸µì´Ï´Ù. ÆùÆ® Ãâ·Â°ú »ç°¢Çü ±×¸®±â¸¦ ÇÒ °ÍÀ̹ǷΠGC ¸¦ ¸¸µé¾îµÎ´Â °Íµµ ÀØÁö ¾Ê½À´Ï´Ù. ½Ã½ºÅÛÀÇ ±âº»ÀÎ fixed ÆùÆ®¸¦ ·ÎµùÇÏ°í GC ¼¼Æõµ ±×·°Àú·° ÇصӴϴÙ.

  1. âÀ» MAPÇϱâ Àü¿¡ ¿ì¼± ¿øÇÏ´Â À̺¥Æ®¸¦ °ñ¶óµÐ´Ù. XSelectInput ÇÔ¼ö¸¦ ÅëÇؼ­ ¿ì¸®´Â ¿øÇϴ â¿¡´Ù°¡ ¿ì¸®°¡ °ü½ÉÀ» °®´Â À̺¥Æ® ¸¸À» µî·ÏÇصдÙ. ±×·¯¸é ³ª¸ÓÁö À̺¥Æ®µéÀº ±×³É ¹«½ÃµÇ¹ö¸®°í ¸¸´Ù. ¿©±â¼­ ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀº ÀÏ´Ü ¾ÆÁÖ¾ÆÁÖ Áß¿äÇÑ À̺¥Æ®ÀÇ ÇϳªÀÎ Expose À̺¥Æ®, ¸¶¿ì½º ¹öÆ°ÀÌ Å¬¸¯µÇ¾ú´Â°¡¸¦ ¾Ë¾Æº¸´Â À̺¥Æ® ±×¸®°í â ¼ÓÀ¸·Î ¸¶¿ì½º Æ÷ÀÎÅÍ°¡ µé¾î°¬´Â°¡, ³ª¿Ô´Â°¡¸¦ ¾Ë·ÁÁÖ´Â À̺¥Æ®¸¦ ¼³Á¤ÇÏ¿´½À´Ï´Ù.
      ExposureMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask
    
  2. Expose À̺¥Æ®ÀÇ Á߿伺 Expose´Â ¿µ¾îÀÇ ¶æ ±×´ë·Î "¹ÛÀ¸·Î µå·¯³ª´Ù"¶ó´Â ÀǹÌÀÔ´Ï´Ù. À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ °í·ÁÇØÁà¾ß ÇÒ °Í Áß Çϳª´Â ÇÑ È­¸éÀ» µ¿½Ã¿¡ ¸¹Àº âµéÀÌ °øÀ¯ÇÏ°í ÀÖ´Ù´Â »ç½ÇÀÔ´Ï´Ù. âµéÀÌ À̸®Àú¸® ¼­·Î¸¦ °¡¸®±âµµ ÇÏ°í ´Ù½Ã ³ªÅ¸³ª±âµµ ÇÏ¸ç ¾ÆÀÌÄÜÀ¸·Î µÇ¾ú´Ù°¡ ´Ù½Ã ¿ø»óÅ·Πµ¹¾Æ¿À±âµµ ÇÕ´Ï´Ù. Å©±â°¡ ´Ã±âµµ ÇÏÁö¿ä. ƯÈ÷³ª ´Ù¸¥ â¿¡ °¡·È´Ù°¡ ´Ù½Ã ³ªÅ¸³ª°Ô µÉ ¶§´Â ³²µé¿¡ ÀÇÇؼ­ °¡·ÁÁ³´ø ºÎºÐµéÀ» ´Ù½Ã ±×·ÁÁà¾ß ÇÕ´Ï´Ù. ±×·±µ¥ ¿©·¯ºÐÀÌ Xt/¸ðƼÇÁ °°Àº ¼öÁØ¿¡¼­´Â ´À³¢Áö ¸ø ÇϼÌÀ»Áö ¸ð¸£°ÚÁö¸¸ Xlib Àº Àú¼öÁØÀ̹ǷΠ¿©·¯ºÐ ½º½º·Î°¡ ³²µé¿¡ ÀÇÇØ °¡·ÁÁ³´Ù°¡ ´Ù½Ã ³ªÅ¸³¯ ¶§ Áö¿öÁ³´ø ºÎºÐÀ» º¹±¸ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ½ÇÁ¦·Î ¸ðƼÇÁ °°Àº °ÍµéÀº ÀÌ¹Ì Xlib ÀÇ ÇÔ¼ö¸¦ ½á¼­ ¿©·¯ºÐ ¸ô·¡ ´Ù½Ã ±×·ÁÁÖ´Â ÀÛ¾÷À» ´ë½Å ÇØÁÖ°í ÀÖÀ» »ÓÀÔ´Ï´Ù. Expose À̺¥Æ®´Â ¿©·¯ºÐÀÇ Ã¢ÀÌ ¸Ç óÀ½ XMapWindow ÇÔ¼ö¿¡ ÀÇÇؼ­ »Ð! ÇÏ°í ³ªÅ¸³¯ ¶§ óÀ½À¸·Î ¹ß»ýÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀº âÀÌ ¸Ç óÀ½ »Ð! ÇÏ°í ³ªÅ¸³¯ ¶§ ÀÚ±â ÀÚ½ÅÀ» ¿©·¯ ¸ð·Î Ä¡ÀåÇÕ´Ï´Ù. ¶ÇÇÑ ³²µé¿¡ ÀÇÇØ °¡·ÁÁ³´Ù°¡ ´Ù½Ã »Ð! ÇÏ°í ¿©·¯ºÐ¿¡°Ô ³ªÅ¸³¾ ¶§´Â ÀûÀýÇÏ°Ô Áö¿öÁø ºÎºÐÀ» º¹±¸ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿©±â¼­´Â ¾ÆÁÖ °£´ÜÇÑ ¹æ½ÄÀ¸·Î ó¸®Çß½À´Ï´Ù. Expose À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§¸¶´Ù ´Ù½Ã O K ¶ó´Â ±Û¾¾¸¦ ½áÁÖ´Â °ÍÀÌÁö¿ä.
  3. while ( True ) ¹®ÀåÀ» ÅëÇؼ­ À̺¥Æ® ó¸® ¹«ÇÑ ·çÇÁ¸¦ µ½´Ï´Ù. XNextEvent ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¿©·¯ºÐÀÌ ¿øÇÏ´Â À̺¥Æ® Áß Çϳª°¡ »ý±æ ¶§±îÁö ±â´Ù¸³´Ï´Ù. À̺¥Æ®°¡ ¾È»ý±â¸é °¡¸¸È÷ ÀÖ½À´Ï´Ù. ±×·¯´Ù°¡ »ý±â¸é ÆĶó¹ÌÅÍ·Î ÁÖ¾îÁø XEvent °ø¿ëü¿¡´Ù°¡ À̺¥Æ® Á¤º¸¸¦ Àû¾î¼­ º¸³»ÁÝ´Ï´Ù.

  switch ( xe.type )

ÀÚ, À̺¥Æ®¶ó´Â °ÍÀº Á¾·ù°¡ ¸¹±â ¶§¹®¿¡ ±×°ÍÀÌ ¸¶¿ì½º¿Í °ü·ÃµÈ °ÍÀÎÁö Å°º¸µå¿Í °ü·ÃµÈ °ÍÀÎÁö¸¦ ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ±×°Í¿¡ ¸Â°Ô ÀûÀýÇÏ°Ô Ã³¸®ÇØ¾ß Çϴϱî¿ä.

  case Expose:

     Expose À̺¥Æ® ¹ß»ý½Ã¿¡´Â ÀûÀýÇÏ°Ô ÀÚ±â ÀÚ½ÅÀ» ±×·ÁÁְųª º¹±¸
     ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. XDrawString ÇÔ¼ö·Î "O K"¶ó°í ½áÁÝ´Ï´Ù.
     ¸ÕÀú XSetForeground ÇÔ¼ö·Î Àü°æ»öÀ» °ËÁ¤À¸·Î ÇØÁÝ´Ï´Ù.

  case ButtonPress:

     ¹öÆ°ÀÌ ´­¸®¸é( ¾î¶² ¹öÆ°ÀÌµç »ó°üÇÏÁö ¾Ê°í ) exit(1) Á¾·áÇÕ´Ï´Ù.

  case EnterNotify:

     ¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î°¡¸é XDrawRectangle ÇÔ¼ö·Î »ç°¢ÇüÀ» Å×
     µÎ¸®¿¡ ±×·ÁÁÝ´Ï´Ù. ¿©·¯ºÐÀÇ ¸¶¿ì½º°¡ µé¾î¿Ô´Ù´Â °ÍÀ» È®½ÇÇÏ°Ô
     º¸¿©ÁÖ±â À§Çؼ­ÀÔ´Ï´Ù.

  case LeaveNotify:

     ¸¶¿ì½º°¡ ³ª°¡¸é ³ª°¬´Ù´Â °ÍÀ» º¸¿©ÁÖ±â À§ÇØ Àü°æ»öÀ» ÇϾá»öÀ¸
     ·Î Áï, ¹è°æ»ö°ú °°°Ô Çؼ­ »ç°¢ÇüÀ» ±×·ÁÁÝ´Ï´Ù. ±×·¯¸é Áö¿öÁö´Â
     È¿°ú°¡ ³ª°ÚÁö¿ä?

  default:

     ¾Ë ¼ö ¾ø´Â À̺¥Æ®´Â ¹«½ÃÇÕ´Ï´Ù.

À§¿¡¼­ ¿¹·Î µç °ÍÀº ¿©·¯ºÐÀÌ ¾ÆÁÖ ½±°Ô Á¢ÇÒ ¼ö ÀÖ´Â ¹öÆ° Çϳª¸¦ ¾ÆÁÖ Àú¼öÁØ¿¡¼­ ÇØ°áÇÑ °ÍÀÔ´Ï´Ù. º¸Åë ¹öÆ°À» Ŭ¸¯Çϱâ À§ÇÏ¿© ¸¶¿ì½º¸¦ °¡Á®´Ù ´ë¸é ¹öÆ° ÀüüÀÇ »ö»óÀÌ º¯ÇÑ´ÙµçÁö ÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î À̺¥Æ®¿¡ ¸Â°Ô Àڱ⠸ð¾çÀ» ±×¸®¸é µÇ´Â °ÍÀÔ´Ï´Ù. ¿ø¸®´Â ¾ÆÁÖ °£´ÜÇÏÁö¿ä?

¹öÆ° Çϳª¸¦ ¸¸µé¾î º¸¾Ò½À´Ï´Ù. ±âÁ¸ÀÇ ¶óÀ̺귯¸®¸¸ ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó ¿©·¯ºÐÀÌ Àú¼öÁØÀ¸·Î ¾ÆÁÖ Àç¹ÌÀÖ´Â ÇൿÀ» ÇÏ´Â ¹öÆ°À» ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù. ´Ù¸¥ »ç¶÷Àº Èä³»³¾ ¼ö ¾ø´Â Àç¹ÌÀÖ´Â ÀÏÀ» ÇÏ´Â °Í, ÀÌ°ÍÀº Àú¼öÁØ ÇÔ¼ö Xlib À» ¹è¿ìÁö ¾Ê°í ´Â ÀÌ·ê ¼ö ¾ø´Â ÀÏÀÔ´Ï´Ù.

8. X ÇÁ·Î±×·¡¹Ö, X ·ÎÄÉÀÏ ÀÌ¿ë Ãâ·Â

¾ÆÁ÷ ÀûÀº ¼öÀ̱â´Â ÇÏÁö¸¸ ¸®´ª½ºÀÇ ÀüÆÄ¿Í ´õºÒ¾î X À©µµ¿ì¿¡ ´ëÇÑ °ü½Éµµ Á¡Á¡ ´õ ÇØ°¡´Â µí ÇÑ ´À³¦À» ¹Þ½À´Ï´Ù.

¿ì¸®°¡ Çѱ¹ÀÎÀÎ ÀÌ»ó ÇÇÇÒ ¼ö ¾ø´Â ¹®Á¦´Â ¿ì¸®ÀÇ ±ÛÀÇ ¿Ã¹Ù¸¥ Ç¥ÇöÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. Àڱ⠳ª¶ó ¸»À» »ç¶ûÇÏÁö ¾Ê°Å³ª °ü½ÉÀ» °®°í ¹ßÀü½ÃÅ°Áö ¾Ê´Â ¹ÎÁ·Àº ÀÌ ¼¼»ó¿¡¼­ »ç¶óÁö´Â °Í ¾Æ´Ï°Ú½À´Ï±î? ±×¸®°í Àڱ⠸»À» °®Áö ¾Ê´Â ¹ÎÁ·ÀÌ µµ´ëü ¾î¶² ÀںνÉÀ» °¡Áú ¼ö ÀÖÀ»±î¿ä?

ÄÄÇ»ÅÍ Á¤º¸ ¹®È­ÀÇ ½Ã´ë¿¡ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô ÇѱÛÀº ¼±Á¶µéÀÇ ³ë·ÂÀ» À̾î¹Þ¾Æ ´õ¿í ´õ ¹ßÀü½ÃÅ°°í Çö´ëÈ­½ÃÄÑ¾ß ÇÒ »ì¾ÆÀÖ´Â ¾ð¾î¶ó´Â »ý°¢ÀÌ µì´Ï´Ù. ÃÖ¼ÒÇÑ ¹ßÀüÀº ¾È½ÃÅ°´õ¶óµµ ¾ÖÂøÀ» °®°í »ç¿ëÀº ÇØ¾ß ÇÒ °Í ¾Æ´Ï°Ú½À´Ï±î?

À©µµ±× »ç¿ëÀÚ ½ÃÀý ¹«ÁöÇÏ°Ôµµ Ç×»ó ÀÌ·± ¸»À» Àڽſ¡°Ô Çϸ鼭 ÄÄÇ»Å͸¦ »ç¿ëÇØ ¿Ô´ø °Í °°½À´Ï´Ù.

"ÇÑ±Û À©µµ¿ì´Â ¾ÈµÅ... ¿ª½Ã... ÇѱÛÈ­¸¸ ÇÏ¸é ¿µ ¾Æ´Ï¾ß... ÇÑ±Û ¾ÈµÅ..."

¿ô±â´Â »ç½ÇÀº ¾ûÅ͸®·Î ÇѱÛÈ­¸¦ ½ÃŲ M$ ÃøÀ̳ª ¹Ì±¹ °¡¼­ ³ª¶óÀÇ ±â¼úÀ» ÆȾƸ԰í ÀÖ´Â Çѱ¹ÀÇ ÄÄÇ»ÅÍ ±â¼úÀڵ鿡°Ô ºñ³­À» º¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó "ÇѱÛ" ÀÚü¸¦ µé¸ÔÀÌ°í ÀÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù.

»ç½Ç 1 ¹ÙÀÌÆ® ¹®Àڱǿ¡¼­ ź»ýÇÑ ÄÄÇ»ÅͶó´Â ȯ°æ ¼Ó¿¡¼­ Èûµç ½Î¿òÀ» ÇÏ°í ÀÖ´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. Èûµç ÀÏÀÌÁö¸¸ ´©±¸³ª ÇÒ ¼ö ÀÖ´Â ÀÏÀ̶ó¸é ¹ú½á ´Ù¸¥ »ç¶÷µéÀÌ ´Ù ÇسõÀ» °Ì´Ï´Ù. Èûµç ÀÏÀ» Àß Ç϶ó°í ºñ½Ñ µ· µé¿©°¡¸ç ±ÍÁßÇÑ ½Ã°£À» ½ñ¾ÆºÎ¾î°¡¸ç ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á´Â °Í ¾Æ´Ò±î¿ä?

1 ¹ÙÀÌÆ® ¹®ÀÚº¸´Ù´Â ¾à°£ ¾î·Á¿î °úÁ¤À» °ÅÄ¡Áö¸¸ ±×·¸°Ô ¾î·Á¿î °Íµµ ¾Æ´Õ´Ï´Ù. ¿¹Àü¿¡ µµ±× ½ÃÀý¿¡´Â ÇÑ±Û ÀÔÃâ·Â ¸ðµÎ¸¦ ¸Å¹ø ¸¸µé¾î¼­ »ç¿ëÇß´ø ±â¾ïµµ ³³´Ï´Ù. ¾ÆÁÖ °£´ÜÈ÷ ÇÑ±Û ±â´É ÀÚü¸¦ ³»ÀåÇعö¸®´Ï ¼Ó ÆíÇÒ ¼ö ÀÖ¾úÁö¸¸ Áö±ÝÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ß »óȲ¿¡´Â ÀüÇô ¸ÂÁö ¾Ê´Â ±¸´Ú´Ù¸® ¹æ½ÄÀ¸·Î º¯È­ÇÏ°í ¸»¾Ò½À´Ï´Ù.

X À©µµ¿ì°¡ Á¦°øÇÏ°í ÀÖ´Â ¸¹Àº ±â´ÉµéÀ» ÃæºÐÈ÷ È°¿ëÇϸ鼭 ÇѱÛÀ» ½±°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ÀÏ´ÜÀº Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ´Ù½Ã ÇÑ ¹ø ¼Ò°³Çص帳´Ï´Ù.

8.1 X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏ ±â´ÉÀ» »ç¿ëÇÑ ÇÑ±Û Ãâ·Â

X À©µµ¿ì¿¡¼­ÀÇ ÇÑ±Û Ãâ·Â ¹æ½Ä¿¡ ´ëÇÏ¿©

  • Àú¼öÁØÀÇ ¹æ¹ý : XDrawString16 ÇÔ¼ö ÀÌ¿ë
  • °í¼öÁØÀÇ ¹æ¹ý : XmbDrawString, XwcDrawString ÇÔ¼ö ÀÌ¿ë

¿ì¼± Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑÅÒ, ±×¸®°í ÇѱÛÈ­µÈ À©µµ¿ì °ü¸®Àڵ鿡¼­ »ç¿ëÇÏ°í ÀÖ´Â ¹æ½ÄÀ¸·Î¼­ °í¼öÁØÀÇ ¹æ¹ý°ú ±¸º°µÇ´Â ±âÁØÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ Á¦°øÇÏ°í ÀÖ´Â ±¹Á¦È­(I18N, Internationalization)¿Í Áö¿ªÈ­(L10N, Localization) ±â¼úÀ» »ç¿ëÇϴ°¡ ¿©ºÎ¿¡ ´Þ·ÁÀÖ½À´Ï´Ù. XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇØ µå¸° ÀûÀÌ ÀÖ´Â °ÍÀ¸·Î ¾Ð´Ï´Ù. ±× ±ÛÀ» ÀÐÁö ¾ÊÀ¸¼Ì´Ù¸é ±× ±ÛÀ» ¸ÕÀú Àо½Ã±â ¹Ù¶ø´Ï´Ù.

Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑ±Û ¹®ÀÚ¿­( char Çü )À» Çѱ۰ú ¿µ¹®À¸·Î ³ª´©¾î¼­( ¹ÙÀÌÆ®ÀÇ ÃÖ»óÀ§ ºñÆ®¸¦ º¸°í ÆÇ´Ü ) ÇÑ±Û ºÎºÐÀº XChar2b Çü ¹è¿­¿¡ ³Ö¾î¼­ 2 ¹ÙÀÌÆ®¿ë ÇÔ¼öÀÎ XDrawString16 ÇÔ¼ö·Î Ãâ·ÂÇÏ°í ¿µ¹® ºÎºÐÀº µû·Î 1 ¹ÙÀÌÆ® Àü¿ë ÇÔ¼öÀÎ XDrawString ÇÔ¼ö·Î Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù.

Àú¼öÁØÀ̹ǷΠ»ó´çÈ÷ ¹ø°Å·Ó´Ù°í ÇÏÁö ¾ÊÀ» ¼ö ¾ø½À´Ï´Ù. Çѱ۰ú ¿µ¹®À» ¼¯¾î¼­ ¾²´Â °æ¿ì¿¡´Â Á¤¸» ½Å°æ¾µ ÀÏÀÌ ¸¹½À´Ï´Ù. ¹®ÀÚ¿­À» Àо ÀÏÀÏÀÌ ÇѱÛÀÌ Ãâ·ÂµÇ´Â È­¸é ÆøÀ» °è»êÇÏ°í ±× ´ÙÀ½¿¡ ¿µ¹®À» Ãâ·ÂÇÏ°í ±× ÆøÀ» °è»êÇÑ ÈÄ ´Ù½Ã ÇѱÛÀ» Ãâ·ÂÇÏ°í...

°í¼öÁØÀÇ ¹æ¹ýÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ R5 ºÎÅÍ Áö¿øÇϱ⠽ÃÀÛÇÑ ±¹Á¦È­/Áö¿ªÈ­ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. °°Àº 1 ¹ÙÀÌÆ® ¹®ÀÚ±ÇÀ̶ó ÇÒ Áö¶óµµ ¿µ¾î¿¡ ¸ÂÃçÁø ASCII ¹®Àڷδ ºÒ°¡´ÉÇÑ À¯·´¾ð¾î( ÇÁ¶û½º¾î, µ¶ÀÏ¾î µî... )¿Í ¾ÖÃʺÎÅÍ ASCII·Î´Â Åõµ ¾ø´Â 2 ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹®ÀÚ±ÇÀÎ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µî¿¡ ´ëÇÑ ½Ã½ºÅÛ Â÷¿øÀÇ Áö¿øÀÌ ³íÀǵǸ鼭 ÇÁ·Î±×·¡¸ÓµéÀÌ ½±°Ô ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé ¼öÀÖµµ·Ï °í¹ÎÇÑ °á°úÀÔ´Ï´Ù. ±¹Á¦È­¶õ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¾ð¾î ȯ°æ¿¡¼­µç »ç¿ëµÉ ¼ö ÀÖµµ·Ï À¯¿¬ÇÏ°Ô ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀ» ¸»ÇÏ¸ç ±×·¸°Ô ±¹Á¦È­µÈ ÇÁ·Î±×·¥À» ƯÁ¤ ¾ð¾î³ª ¹®È­¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀûÀÀ½ÃÅ°´Â °ÍÀ» Áö¿ªÈ­¶ó°í ºÎ¸¨´Ï´Ù.

ÀÌ¹Ì ¼Ö¶ó¸®½º³ª HP-UX µî¿¡¼­ »ó¿ë X À©µµ¿ì¸¦ º¸½Å ºÐµéÀº ÀÌ°ÍÀÌ ¹«¾ùÀ» ¶æÇÏ´ÂÁö ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. À©µµ±×95 °°Àº °ÍÀ» ÇÁ¶û½ºÆÇ, µ¶ÀϾîÆÇ, Çѱ¹¾îÆÇ, Áß±¹¾îÆÇ, ÀϺ»¾îÆÇ ÀÌ·¸°Ô ´ßÁúÀ» ÇØ°¡¸é¼­ µû·Îµû·Î ¸¸µå´Â °Í°ú´Â Â÷¿øÀÌ ´Ù¸¨´Ï´Ù. °£´ÜÇÑ ¼³Á¤ Çϳª·Î °°Àº X À©µµ¿ì ½Ã½ºÅÛÀÌ ¿©·¯ °³ÀÇ ¾ð¾î·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾î ÀÖ½À´Ï´Ù. ·Î±×ÀÎ È­¸éºÎÅÍ°¡ ¾Æ¿¹ ´Þ¶óÁöÁö¿ä.

X À©µµ¿ì ½Ã½ºÅÛÀÌ Áö¿øÇÏ´Â I18N, L10N ÀÌ¿ëÇϱâ

ÀÌÁ¦ ¾Ë¾Æº¼ ³»¿ëÀº ¹Ù·Î °í¼öÁØÀÇ ÇÑ±Û Ãâ·Â¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù.

¾î¶² ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇսôÙ.

LOCALE µ¥ÀÌÅͺ£À̽º Áö¿øÀ» ´©°¡ Çϴ°¡?

À¯´Ð½º ½Ã½ºÅÛÀÇ ·ÎÄÉÀÏ Áö¿øÀº ÀÏ´Ü X À©µµ¿ì ½Ã½ºÅÛÀÌ ¾Æ´Ñ ANSI/POSIX ±Ô°Ý Â÷¿øÀÇ Áö¿øÀÌ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ »ó¿ë À¯´Ð½º³ª ¾Æ´Â ¹Ù ¾øÁö¸¸ FreeBSD ¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼­ Áö¿øÇÏ°í ÀÖ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. Áö±Ý ÇöÀç GNU NLS ÆÀ¿¡¼­ ¿­½ÉÈ÷ ÇÁ·Î±×·¥ ¸Þ¼¼Áö Áö¿ªÈ­¸¦ ÇÏ°í °è½Å ºÐµéÀÇ °á°ú°¡ Á¶¸¸°£ ¿ì¸® °ç¿¡ ¿À°Ô µÇ°ÚÁö¿ä? ±× ºÐµé¿¡°Ô °Ý·Á¸¦ º¸³À´Ï´Ù.

¸®´ª½º´Â ¾ÆÁ÷ C ¶óÀ̺귯¸®¿¡ ´ëÇؼ­ Á¦´ë·Î ¸ð¸£±â ¶§¹®¿¡ È®½ÇÇÏ°Ô ¸»¾¸µå¸± ¼ö ¾ø½À´Ï´Ù. C ¶óÀ̺귯¸® 5.4.X ¿¡¼­ ·ÎÄÉÀÏ¿¡ ´ëÇÑ Áö¿øÀÌ ÀÖ´Ù°í´Â ÇÏ´Â °Í °°Àºµ¥ Á¦´ë·Î È®ÀÎÀÌ µÇÁú ¾Ê´Âµ¥´Ù°¡ ÀúÀÇ °ü½É ¿µ¿ªÀ» ·Î¿ì·¹º§ ÇÁ·Î±×·¡¹ÖÀÌ ¾Æ´Ï¶ó¼­...

µÎ¹ø°·Î´Â ¿î¿µÃ¼Á¦ ÀÚüÀÇ Áö¿ø°ú´Â ¿ÏÀü º°µµ·Î X À©µµ¿ì ÀÚüÀûÀ¸·Î ÇØ°áÇØÁÖ´Â ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿À´Ã X À©µµ¿ì ÀÚü°¡ Áö¿øÇÏ´Â ·ÎÄÉÀÏ Áö¿øÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ °ÍÀÔ´Ï´Ù. ÀüÀÚ³ª ÈÄÀÚ ¸ðµÎ Áß¿äÇѵ¥ ÀÏ´Ü X À©µµ¿ì ÀÚüÀûÀ¸·Îµµ Áö¿øÀ» ÇØÁشٴ °ÍÀº ¾î¶² Ç÷§Æ÷¿ÈÀΰ¡¿¡ »ó°ü¾øÀÌ °°Àº X À©µµ¿ì¸¸ µ¹¾Æ°£´Ù¸é ¾îµð¼­µç ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¿ÀÛÇϸ®¶õ º¸ÀåÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

¸®´ª½º C ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¿¬±¸´Â ½Ã°£À» ³»¼­ Á» ´õ ÇغÁ¾ß ÇÒ °Í °°½À´Ï´Ù. ¸¹Àº »ç¶÷µéÀÌ ¶Ù¾îµé¾îÁֱ⸦ ¹Ù¶ö »ÓÀÔ´Ï´Ù. ¸®´ª½º´Â °³¹æ üÁ¦À̹ǷΠÀÚ¿øÀÚ°¡ ¸¹Àº °÷ÀÇ ºÐÀ§±â¸¦ µû¸£Áö ¾Ê°Ú¾î¿ä? ¾Æ½Ã¾ÆÀÇ ÀþÀºÀ̵éÀÌ ¸¹ÀÌ ¶Ù¾îµé ¼ö·Ï ¸®´ª½º ÀÚü´Â ±¹Á¦ÀûÀÎ ¿î¿µÃ¼Á¦·Î ´Ù½Ã ž ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù.

¿©·¯ºÐÀÇ X À©µµ¿ì ½Ã½ºÅÛÀ» Á¡°ËÇÕ´Ï´Ù.

ANSI ±Ô°Ý¿¡¼­ Á¤ÀÇÇÑ ¹Ù¿Í °°½À´Ï´Ù. C ¼ÐÀ» ¾²´Â ºÐµéÀº setenv LANG ko ¿Í °°Àº Ç¥ÇöÀ» ½áº¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. ÀÌ ±ÛÀº ANSI ±Ô°ÝÀÇ setlocale ÇÔ¼ö¿¡ °ü·ÃµÈ ¸ðµç »çÇ×À» ÀÚ¼¼È÷ ¼³¸íÇϱâ À§ÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î µû·Î °øºÎÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¾ÆÁÖ Áß¿äÇÑ À̽´ ÁßÀÇ ÇϳªÀÎ °ÍÀº ºÐ¸íÇÑ °Í °°½À´Ï´Ù.

ÀÏ´ÜÀº /usr/X11R6/lib/X11/locale µð·ºÅ丮¿Í ³»¿ëÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇغ¸½Ê½Ã¿ä. ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ X À©µµ¿ì ½Ã¸®Á Á¦´ë·Î ¼³Ä¡Çß´Ù¸é ÀÖ¾î¾ß ÇÒ ³»¿ëÀÔ´Ï´Ù.

 C/             iso8859-3/     iso8859-8/     ko/            th_TH.TACTIS/
 compose.dir    iso8859-4/     iso8859-9/     koi8-r/        zh/
 en_US.utf/     iso8859-5/     ja/            locale.alias   zh_TW/
 iso8859-1/     iso8859-6/     ja.JIS/        locale.dir
 iso8859-2/     iso8859-7/     ja.SJIS/       tbl_data/

ko ¶ó´Â µð·ºÅ丮°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±× ¾È¿¡´Â XLC_LOCALE À̶ó´Â È­ÀÏÀÌ µé¾îÀÖ½À´Ï´Ù. ±× È­ÀÏ ¾È¿¡ Çѱ¹¾îÀÇ Ãâ·Â¿¡ ´ëÇÑ °ü·Ã Á¤º¸°¡ µé¾îÀÖ½À´Ï´Ù.

º¸ÅëÀº LANG ¼¼ÆÃÀÌ ¾ø´Â °æ¿ì ±âº»ÀûÀ¸·Î C µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ëÀ» »ç¿ëÇÕ´Ï´Ù.

À§ È­ÀϵéÀÌ Á¦´ë·Î ÀÖ´Â °ÍÀ» È®ÀÎÇÑ ÈÄ¿¡ ²À ´ÙÀ½ ¼¼ÆÃÀ» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

º»¼Ð °è¿­À̶ó¸é...

        export LANG=ko

C ¼Ð °è¿­À̶ó¸é...

        setenv LANG ko

³ªÁß¿¡ °°Àº ÇÁ·Î±×·¥¿¡ ´ëÇؼ­ ±×³É LANG ¼¼ÆÃÀ» Àç¹Ì»ï¾Æ ja ¶ó°í ¹Ù²ãº¸½Ê½Ã¿ä. ±×·¯¸é Àç¹ÌÀÖ´Â ÀÏÀÌ ¹ú¾îÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ³×½ºÄÉÀÌÇÁ¿¡¼­ ¿É¼Ç ¸Þ´º¿¡¼­ ÄÚµù ¿É¼Ç¸¸ ¹Ù²ãÁÖ¸é ÅؽºÆ®ÀÇ ³»¿ëÀÌ Çѱ۷Πº¸¿´´Ù°¡ ÀϺ»¾î·Î º¸¿´´Ù ÇÏ´Â ¿ø¸®¸¦ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù.

ÀÌÁ¦ºÎÅÍ ÇÁ·Î±×·¡¹ÖÀ» Çغ¾½Ã´Ù.

ÇÁ·Î±×·¡¹ÖÀ̶õ ÀüÇüÀûÀÎ ÆÐÅÏÀÌ ÀÖ°Ô ¸¶·ÃÀÌÁö¿ä. ±×¸®°í È®½ÇÇÑ ÆÐÅÏ( ¹°·Ð ÁÁÀº ÆÐÅÏ :> )À» ÀÍÇôµÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

¿¹Á¦¸¦ ¼Õ¼ö ŸÀÌÇÎÇØ º¸½Ã´Â °ÍÀÌ ÁÁÀ» °Ì´Ï´Ù. ÀÏ´Ü ÄÄÆÄÀÏÀ» Çغ¸°í Á¦´ë·Î µÈ´Ù´Â °ÍÀ» È®ÀÎÇϽñ⠹ٶø´Ï´Ù.

                        X Locale À» ÀÌ¿ëÇÑ ÇÑ±Û Ãâ·Â


*/
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
/*
#include <locale.h>
*/
#include <X11/Xlocale.h>

void DrawCenteredMbString ( Display *, Window, XFontSet, GC, char*, int, int,
                                int, int, int );

int
main (argc, argv)
        int argc;
        char *argv[];
{
        Display *dpy;
        Window  w;
        XFontSet fontset;
        char **missing_charsets;
        int num_missing_charsets;
        char *default_string;
        int i;
        GC      gc;
        XEvent  xe;

        char *program_name = argv[0];

        if ( setlocale (LC_ALL,"") == NULL )       {
                (void) fprintf (stderr, "%s: cannot set locale.\n",
                program_name );
                exit (1);
        }

        if ( !XSupportsLocale () ) {
                (void) fprintf (stderr,"%s: X does not support locale %s.\n",
                program_name, setlocale( LC_ALL, NULL ) );
                exit (1);
        }

        if ( XSetLocaleModifiers("") == NULL )    {
                (void) fprintf (stderr,
                        "%s: Warning: cannot set locale modifiers.\n",
                        program_name);
        }

        dpy = XOpenDisplay ( NULL);
        w   = XCreateSimpleWindow ( dpy, RootWindow( dpy, 0 ), 50, 50,
                                        100, 50, 5, BlackPixel( dpy, 0 ),
                                        WhitePixel( dpy, 0 ) );
        gc = XCreateGC ( dpy, w, 0L, ( XGCValues * ) NULL );

        fontset = XCreateFontSet (dpy, "-*-*-*-*-*-*-16-*-*-*-*-*-*-*",
                        &missing_charsets, &num_missing_charsets,
                        &default_string);
        if ( num_missing_charsets > 0 ) {
                (void) fprintf (stderr,
                        "%s: The following charsets are missing:\n",
                        program_name);
                for ( i=0; i < num_missing_charsets; i++ )
                        (void)fprintf (stderr, "%s:   %s\n", program_name,
                                missing_charsets[i]);
                (void) fprintf (stderr, "%s: The string is %s", program_name,
                                default_string);
                (void) fprintf (stderr, 
                                "%s: of any characters from those sets.\n",
                                program_name);
                XFreeStringList (missing_charsets);
        }

        XSetLineAttributes ( dpy, gc, 5, LineSolid, CapRound, JoinRound );

        XSelectInput ( dpy, w, ExposureMask | ButtonPressMask 
                        | EnterWindowMask | LeaveWindowMask );

        XMapWindow ( dpy, w );

        XFlush ( dpy );

        while ( True )
        {
                XNextEvent ( dpy, &xe );

                switch ( xe.type )      {

                case Expose:
                        printf ("Expose À̺¥Æ®°¡ ¹ß»ýÇß½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                        DrawCenteredMbString ( dpy, w, fontset, gc, 
                                        "¾È³ç Hello",
                                        10, 0, 0, 100, 50 );
                        break;
                case ButtonPress:
                        printf ("¹öÆ°À» ´©¸£¼Ì½À´Ï´Ù!\n");
                        exit (1);
                        break;
                case EnterNotify:
                        printf ("¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î¿Ô½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                        XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                        break;
                case LeaveNotify:
                        printf ("¸¶¿ì½º°¡ â ¹ÛÀ¸·Î ³ª°¬½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, WhitePixel( dpy, 0 ) );
                        XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                        break;
                default:
                        printf ("¸ð¸£´Â À̺¥Æ®ÀÔ´Ï´Ù. ¹«½ÃÇÕ´Ï´Ù.\n");
                        break;
                }
        }
        return 0;
}

void
DrawCenteredMbString (dpy, w, fontset, gc, str, num_bytes, x, y, width, height )
        Display *dpy;
        Window w;
        XFontSet fontset;
        GC gc;
        char *str;
        int num_bytes;
        int x,y, width, height;
{
        XRectangle boundingbox;
        XRectangle dummy;
        int originx, originy;

        (void) XmbTextExtents (fontset, str, num_bytes, &dummy, &boundingbox);

        originx = x + ( width - boundingbox.width )/2 - boundingbox.x;
        originy = y + ( height - boundingbox.height)/2 - boundingbox.y;

        XmbDrawString (dpy, w, fontset, gc, originx, originy, str, num_bytes);
}

ÀÚ, ÄÄÆÄÀÏÀ» Çغ¸µµ·Ï ÇսôÙ. ¾à°£ÀÇ ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.

ÀÌ ÇÁ·Î±×·¥Àº ²À ¸®´ª½º¿¡¼­¸¸ ÄÄÆÄÀÏÇ϶õ ¹ýÀº ¾ø½À´Ï´Ù. ( È®ÀÎÀº ¾ÈÇßÁö¸¸... )

½Ã½ºÅÛ ¼öÁØ¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÕ´Ï´Ù.

        gcc -o test_locale test.locale.c -lX11 -L/usr/X11/lib

¸®´ª½º ½Ã½ºÅÛÀÎ °æ¿ì¿¡´Â X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.

        gcc -o test_locale test.locale.c -DX_LOCALE -lX11 -L/usr/X11/lib

¼ø¼­´ë·Î ¼³¸íÀ» Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

½Ã½ºÅÛÀÌ ·ÎÄÉÀÏÀ» Áö¿øÇϴ°¡?

setlocale ÇÔ¼ö¸¦ ½á¼­ ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ¶Ç´Â X À©µµ¿ì ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´ÂÁö ¿©ºÎ¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù. ½ÇÇàµÇ´Â Ç÷§Æ÷¿È¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ´Ù¸¥ Á¶Ä¡¸¦ ÃëÇϵçÁö ¾Æ´Ï¸é ½ÇÇàÀ» ÁßÁöÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. Á¦´ë·Î µÈ °á°ú°¡ ³ª¿ÀÁú ¾ÊÀ»Å״ϱî¿ä.

  setlocale (LC_ALL,"") == NULL ÀÌ ¹®ÀåÀ¸·Î È®ÀÎÀ» ÇÏ°í ÀÖ½À´Ï´Ù.

X À©µµ¿ì Â÷¿ø¿¡¼­ÀÇ ·ÎÄÉÀÏ Áö¿ø ¿©ºÎ È®ÀÎ

XSupportsLocale ÇÔ¼ö¿Í XSetLocaleModifiers ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄÉÀÏ Áö¿ø¿©ºÎ¸¦ ¹°¾îº¾´Ï´Ù.

ÈÄÀÚÀÇ ÇÔ¼ö´Â "X ÀÔ·Â ¼­¹ö"¿¡ °ü°èµÈ °ÍÀ̹ǷΠÁö±ÝÀ¸·Î¼­´Â ¼³¸íµå¸± ¼ö°¡ ¾ø°í »ó´çÈ÷ Àü¹®ÀûÀÎ ¾ê±â·Î ºüÁú °¡´É¼ºÀÌ ¸¹½À´Ï´Ù. Á¶¸¸°£¿¡ "X ÀÔ·Â ¼­¹ö" Á¦ÀÛ¿¡ ´ëÇؼ­ µû·Î ¼Ò°³¸¦ Çص帮±â·Î ÇÏ°Ú½À´Ï´Ù. ±Ã±ÝÁõÀ» Âü±â ¾î·Á¿î ºÐÀº ±×³É ¿À·¼¸® ÃâÆÇ»çÀÇ X À©µµ¿ì ½Ã¸®Áî Volume One Xlib ÇÁ·Î±×·¡¹Ö ¸Å´º¾óÀ» º¸½Ã¸é µË´Ï´Ù.

ÆùÆ®¼Â(FontSet)À̶ó´Â °³³ä....

ÆùÆ®¼ÂÀ̶ó´Â °³³äÀº ±ÛÀÚ ±×´ë·Î ÆùÆ®ÀÇ ÇÑ ¼¼Æ®¸¦ ¸»ÇÕ´Ï´Ù. ¾î¶² ƯÁ¤ ¾ð¾îÀÇ Äڵ忡 ¸Â´Â( ¿¹¸¦ µé¾î ASCII, ISO8859-1, EUC-KR, ISO-2022-KR µîµî ) ¹®ÀÚ ÆùÆ®µéÀÌ ÀÌ¹Ì ¸¶·ÃµÇ¾î ÀÖ¾î¾ß Ãâ·ÂÀ» ÇÒ ¼ö ÀÖ°ÚÁö¿ä? Áï ȯ°æ º¯¼ö LANG ÀÌ Áö½ÃÇÏ´Â ÄÚµù ½ºÅ¸ÀÏ¿¡ ¸Â´Â ÆùÆ®µéÀÇ ÇÑ ¼¼Æ®¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

¸ðƼÇÁ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀ̶ó¸é ÆùÆ®¼ÂÀ̶ó´Â °³³ä¿¡ ´ëÇؼ­ ¾î´À Á¤µµ ¾Æ½Ç °Ì´Ï´Ù. ÀÏ´ÜÀº X À©µµ¿ì ·ÎÄÉÀÏÀ» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀº ÆùÆ®¼ÂÀ» »ç¿ëÇÑ´Ù´Â »ç½ÇÀ» Á¤È®È÷ ¾Æ¼Å¾ß ÇÕ´Ï´Ù. »ý°¢º¸´Ù »ó´çÈ÷ °£ÆíÇÏ°Ô ¸¸µì´Ï´Ù.

XCreateFontSet ÇÔ¼ö¸¦ ÀÌ¿ëÇÏÁö¿ä.

µÎ¹ø° Àμö·Î ±×³É -*-*-*-*-*-*-16-*-*-*-*-*-*-* À̶ó°í XLFD ¹æ½ÄÀÇ ÆùÆ®¸íÀ» ÁöÁ¤ÇØÁÖ¾úÀ¸¹Ç·Î 16 Æ÷ÀÎÆ® ÆùÆ®µéÀ» ã¾Æ³»¼­ ÆùÆ®¼Â¿¡ µî·ÏÇÏ°Ô µË´Ï´Ù. ¸¸¾à 16 Æ÷ÀÎÆ® ÆùÆ®°¡ ¾ø´Ù¸é °¡Àå °¡±î¿î ÆùÆ®¸¦ ã¾Æ¼­ X À©µµ¿ì ÀÚü°¡ ½ºÄÉÀϸµÀ» ÇØÁÝ´Ï´Ù. ÀÌ ¶§°¡ X À©µµ¿ìÀÇ °¡Àå Ãë¾àÇÑ ºÎºÐÀε¥... 2 ¹ÙÀÌÆ®±ÇÀÇ ¾öû³­ ¾çÀÇ ÆùÆ®¸¦ ½ºÄÉÀϸµÇÏ°Ô µÉ ¶§´Â ¸¶Ä¡ X ¼­¹ö°¡ ¸ØÃç¹ö¸®´Â µí ÇÑ Çö»óÀÌ ÀϾ´Ï´Ù. ÆùÆ®¸¦ ¸ðµÎ º¯È¯ÇÏ´À¶ó ¾öû³­ ½Ã°£À» ¼ÒºñÇÏ°í Àֱ⠶§¹®ÀÌÁö¿ä. À§ ¼ýÀÚ¸¦ 15³ª ´Ù¸¥ ¼ýÀÚ·Î ¹Ù²Ù¾î¼­ ÇÑ ¹ø Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ±× Â÷ÀÌÀ» ´À³¢½Ç ¼öµµ ÀÖÀ» °Ì´Ï´Ù.

¹®ÀÚ¿­ÀÇ Ãâ·ÂÀº °£´ÜÈ÷ XmbDrawString ÇÔ¼ö ÀÌ¿ë

À§¿¡¼­´Â DrawCenteredMbString ¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ³»¿¡¼­ ¸ÖƼ ¹ÙÀÌÆ® ÄÚµù¿¡ »ç¿ëÇÏ´Â Ãâ·Â ÇÔ¼ö XmbDrawString ¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. À§¿¡¼­ º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¿¾³¯¿¡ Àú¼öÁØ Ãâ·ÂÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇѱÛÀ» Çѱ۴ë·Î ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î ´ßÁúÀ» ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. -_-

ÇÑ±Û ÄÚµùµÈ 2 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ±×³É ¾²¸é µË´Ï´Ù. ´ÜÁö À§¿¡¼­´Â ¹®ÀÚ Ãâ·Â À§Ä¡¸¦ Á¶Á¤Çϱâ À§ÇÏ¿© XmbTextExtents ÇÔ¼ö¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿´½À´Ï´Ù.

9. ¸¶°¨Çϸ鼭

ÀÌÁ¦±îÁö Ãâ·ÂÀÇ ¹®Á¦¸¸À» ´Ù·ç¾úÁö¸¸ ÇÁ·ÎÁ§Æ® ÁßÀÎ "X ÀԷ¼­¹ö"ÀÇ Áøô »óȲ¿¡ ¸ÂÃ߾ ÇÑ±Û ÀÔ·ÂÀÇ ¹®Á¦¸¦ ´Ù·ç¾îº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ¾ÏÆ° Ãâ·Â¿¡ ´ëÇÑ ¼³¸íÀÌ ¿©·¯ºÐ¿¡°Ô ¸¹Àº µµ¿òÀÌ µÇ±æ ¹Ù¶ø´Ï´Ù. ÀÏ´ÜÀº Á¶±Ý¸¸ ³ë·ÂÇÏ¸é °ÅÀÇ ¸ðµç ¸Þ¼¼Áö¸¦ ÇѱÛÈ­ ÆÐÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

³²ÀÌ ¾ÈÇØÁÖ¸é ½º½º·Î ³ª¼­´Â °Í, ¸®´ª¼­µéÀÇ ¸ÚÁø ÀÚ¼¼ ¾Æ´Ï°Ú½À´Ï±î?

Á¦ÀÏ ¸ÚÁø ¿î¿µÃ¼Á¦·Î ¿ì¸®°¡ °¡²Ù¾î ³ª°©½Ã´Ù.

½Ã°£ÀÌ Á»Ã³·³ ³ªÁú ¾Ê´Â±º¿ä. ¹è¿ï °ÍÀº ¸¹Àºµ¥ ½Ã°£Àº ÃѾ˰°ÀÌ Èê·¯°¡°í ... ½Ã°£À» Á» ´õ È¿À²ÀûÀ¸·Î ½á¼­ ¿©·¯ºÐÀ» ÀÚÁÖ ºÉ ¼ö ÀÖ°Ô µÇ±æ ¹Ù¶ø´Ï´Ù.

±×·³...


ID
Password
Join
You attempt things that you do not even plan because of your extreme stupidity.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-12-30 00:37:32
Processing time 0.0023 sec