1³â ¹Ýµ¿¾È ¹æÄ¡ÇØ ¿À´ø ÇÁ·ÎÁ§Æ®¸¦ ¿À·£¸¸¿¡ ¾÷µ¥ÀÌÆ®Çß´Ù. ±×µ¿¾È ¹ö±×µµ ¸î °³ ¹ß°ßµÇ¾ú°í ¸¹Áö´Â ¾ÊÁö¸¸ ¸î¸î »ç¿ëÀںе鲲¼ °³¼± »çÇ×À» ÁöÀûÇØ ÁÖ¾î Ä¡¸íÀûÀÎ ¸î °¡Áö¸¸ ¼öÁ¤Çß´Ù. ÀÚÁÖ ½Å°æ¾²°í ½ÍÁö¸¸ ±×°£ ´å³Ý ÇÁ·Î±×·¡¹Ö Á¤º¹À̶ó´Â Ã¥À» Àú¼úÇÏ°í ¸Ô°í »ì±â À§ÇØ ÇÁ·ÎÁ§Æ® ¸î °Ç ¶Ù°í ÇÏ´Ù º¸´Ï µµÀúÈ÷ ½Ã°£À» ³¾ ¼ö°¡ ¾ø¾ú´Ù. 2008³â 3¿ù 1ÀÏ ÇöÀç ¿ø°í¸¦ ÃâÆÇ»ç·Î ³Ñ±â°í ±³Á¤º»ÀÌ ¿À±â¸¦ ±â´Ù¸®´Â µ¿¾È Àá½Ã «ÀÌ ³ª¼ ÀÛ¾÷ ½Ã°£À» È®º¸ÇÏ¿´´Ù.
¸·»ó ÀÛ¾÷ÇØ º¸¸é ÇÏ·ç ÀÌƲ ÀϰŸ®¹Û¿¡ ¾ÈµÇ´Â °ÍÀ» º¸¸é ½Ã°£ÀÌ ¾ø´Ù´Â ¸»Àº ¾ðÁ¦³ª Çΰ迡 ºÒ°úÇÏ´Ù. ½Ã°£ÀÌ ¾ø´Ù±â º¸´Ù´Â ¼ÖÁ÷È÷ °æȲÀÌ ¾ø¾ú°í ´Ù¸¥ µ¥ ½Å°æÀ» ¾²´Ù º¸¸é ÇÁ·ÎÁ§Æ®¿¡ ¼ÒȦÇØÁú ¼ö¹Û¿¡ ¾ø´Â ¹®Á¦ÀÎ °Í °°´Ù. ¸Ó¸®¼Ó¿¡ ¿ÂÅë ¿ø°í¸¸ µé¾î ÀÖ´Â »óÅ¿¡¼´Â Äڵ尡 ºñÁý°í µé¾î°¥ ÀÚ¸®°¡ ¾ø´Â °ÍÀÌ´Ù. ´ç±Ù 1.20ÀÇ ¼Ò½º(Dangeun29)¸¦ ´Ù¿î·Îµå¹ÞÀº »óÅ¿¡¼ ´ÙÀ½ ¼ø¼´ë·Î ÇÁ·ÎÁ§Æ®¸¦ ¼öÁ¤Çϸé 1.21ÀÌ ¸¸µé¾îÁø´Ù. ³Ê¹« »ó¼¼ÇÑ ¹®¼È´Â ÇÏÁö ¾Ê°í ÀÛ¾÷ °úÁ¤À» °£·«ÇÏ°Ô ±â·ÏÀ¸·Î ³²±â±â¸¸ ÇÑ´Ù.
ºñÁÖ¾ó ½ºÆ©µð¿À°¡ µåµð¾î 2008·Î ¾÷±×·¹À̵åµÇ¾ú´Ù. »õ ÄÄÆÄÀÏ·¯°¡ ³ª¿ÔÀ¸´Ï ÇÁ·ÎÁ§Æ®µµ ÄÄÆÄÀÏ·¯¿¡ ¸Â°Ô º¯È¯ÇÏ´Â °ÍÀÌ ¸¶¶¥ÇÒ °ÍÀÌ´Ù. ºñÁÖ¾ó ½ºÆ©µð¿À¸¦ ½ÇÇàÇØ ³õ°í ´ç±ÙÀÇ ¼Ö·ç¼Ç ÆÄÀÏÀ» ¿¸é º¯È¯ ¸¶¹ý»ç°¡ ³ªÅ¸³´Ù. ÀÌÀü ¹öÀü°ú ¼Ö·ç¼Ç ÆÄÀÏÀÌ È£È¯µÇÁö ¾ÊÀ¸¹Ç·Î º¯È¯Ç϶ó´Â ¶æÀε¥ Áö½Ã´ë·Î º¯È¯ÇÏ¸é µÈ´Ù. ´Ü, ÀÌÀü ¹öÀüÀÇ ¼Ò½º´Â µû·Î ÀÖÀ¸¹Ç·Î ¹é¾÷Àº ÇÏÁö ¾Ê¾Ò´Ù.
º¯È¯ Á÷ÈÄ ÄÄÆÄÀÏÇϸé ÇϳªÀÇ °æ°í¿Í ¿©·¯ °³ÀÇ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ¾Æ¹«¸® Àß Â¥¿©Áø ¼Ò½ºµµ ÄÄÆÄÀÏ·¯°¡ ¹Ù²î¸é ¾î´À Á¤µµÀÇ ¹®Á¦Á¡Àº Àֱ⠸¶·ÃÀε¥ ´ç±ÙÀÇ °æ¿ì´Â ±×·¡µµ ºñ±³Àû ¾çÈ£ÇÑ ÆíÀÌ´Ù. ¸ÕÀú Á¦ÀÏ Ã¹ ÁÙÀÇ °æ°íºÎÅÍ ¼öÁ¤ÇØ º¸ÀÚ. °æ°í°¡ ¹ß»ýÇÑ ÁÙÀº ToolBar.cppÀÇ SetStatusText ÇÔ¼ö ³»ºÎ¿¡ ÀÖ´Â ´ÙÀ½ ÄÚµåÀÌ´Ù.
if (mask & (1 << 2+1)) {
°æ°íÀÇ ³»¿ëÀº << ¿¬»êÀÚ¿Í + ¿¬»êÀÚÀÇ ¿ì¼± ¼øÀ§°¡ ¸ðÈ£ÇØ º¸¿© ÀáÀçÀûÀÎ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ÀÌ ¹®ÀåÀº ´ÙÀ½ µÎ °¡Áö °æ¿ì·Î »ý°¢ÇÒ ¼ö ÀÖ¾î ¾à°£ ¸ðÈ£ÇØ º¸ÀδÙ.
if (mask & ((1 << 2)+1)) {
if (mask & (1 << (2+1))) {
ÀüÀÚ´Â 1À» µÎ Ä ¹Î ÈÄ 1À» ´õÇ϶ó´Â ¶æÀÌ°í ÈÄÀÚ´Â 1À» ¼¼Ä ¹Ð¾î¶ó´Â ¶æÀ̹ǷΠ¿¬»ê °á°ú°¡ ´Þ¶óÁø´Ù. ±×·¯³ª »ç½Ç ÀÌ ¹®ÀåÀº ¹®¹ýÀûÀ¸·Î ÀüÇô ¸ðÈ£ÇÏÁö ¾Ê´Ù. ¿¬»ê ¼øÀ§Ç¥¸¦ º¸¸é +°¡ 4À§ÀÌ°í <<°¡ 5À§À̹ǷΠ1À» ¼¼Ä ¹Ð¸é µÈ´Ù. ¼³»ç ¿ì¼± ¼øÀ§°¡ °°´õ¶óµµ °áÇÕ ¼ø¼°¡ ¿ÞÂÊ ¿ì¼±À̹ǷΠ¿¡·¯·Î ó¸®µÉ ¹®ÀåÀº ¾Æ´Ï´Ù.
ÇÏÁö¸¸ º¸´Â »ç¶÷¿¡ µû¶ó Çò°¥¸± ¼ÒÁö°¡ ÀÖÀ¸¹Ç·Î °ýÈ£¸¦ ºÐ¸íÈ÷ ½Î¼ ¸íÈ®ÇÏ°Ô ÁöÁ¤Ç϶ó´Â ±Ç°í¸¦ ÇÏ´Â °ÍÀÌ´Ù. ¹®¹ý»ó ¾Æ¹« ¹®Á¦°¡ ¾ø´Â ¹®ÀåÀÓ¿¡µµ °¡±ÞÀû Àб⠽¬¿î ¼Ò½º¸¦ ¸¸µé¶ó´Â Àǵµ·Î ÀÌÇØÇÏ¸é µÈ´Ù. ºñÁÖ¾ó ½ºÆ©µð¿À°¡ °¥¼ö·Ï ÀܼҸ®°¡ ½ÉÇØÁö´Â °Í °°Àºµ¥ ÀÌ °æ°í¿¡ ´ëÇÑ ÀܼҸ®´Â ÇÕ´çÇÑ °Í °°´Ù. ÀÌ °æ¿ì´Â ÈÄÀÚ°¡ ¸ÂÀ¸¹Ç·Î °æ°í ¹æÁö¸¦ À§ÇØ 2+1À» °ýÈ£·Î ½ÎÁÖ¸é µÈ´Ù.
¿¡·¯´Â ¿©·¯ °³°¡ »ý±â´Âµ¥ ¸ðµÎ Ÿ°Ù À©µµ¿ìÁîÀÇ ¹öÀüÀÌ ¸ÂÁö ¾Ê¾Æ¼ ¹ß»ýÇÑ °ÍÀÌ´Ù. ´ÙÁß ¸ð´ÏÅÍ°¡ NT 5.0 Áï À©µµ¿ìÁî 2000ºÎÅÍ Áö¿øµÇ¾úÀ¸¹Ç·Î HMONITOR ½Äº°ÀÚ°¡ 0x500 ÀÌ»óÀÏ ¶§¸¸ Á¤ÀǵȴÙ. ÀÌÀü ¹öÀü¿¡¼´Â Ç÷§Æû SDK¸¸ ±ò¸é ÀÌ ½Äº°ÀÚ¸¦ Á¤ÀÇÇß¾úÀ¸³ª Á» ´õ ¹öÀü °ü¸®°¡ ¾ö°ÝÇØÁ³´Ù. stdafx.h¿¡ ´ÙÀ½ ¼±¾ð¹®À» Ãß°¡ÇÑ´Ù.
#define _WIN32_WINNT 0x400
#define _WIN32_WINDOWS 0x401
#define WINVER 0x500
WINVER ¸ÅÅ©·Î°¡ 0x500À¸·Î Á¤ÀǵǾúÀ¸¹Ç·Î ´ç±ÙÀº À©µµ¿ìÁî 2000 À̻󿡼¸¸ Á¤»óÀûÀ¸·Î ½ÇÇàµÉ °ÍÀÌ´Ù. ±×·¸´Ù°í Çؼ 98¿¡¼ ½ÇÇàµÇÁö ¾Ê´Â´Ù´Â ¶æÀº ¾Æ´Ï°í ´ÙÁß ¸ð´ÏÅÍ ±â´ÉÀÌ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ÀÌÁ¦ ÄÄÆÄÀÏÇØ º¸¸é ¿¡·¯¿Í °æ°í¾øÀÌ Àß ÄÄÆÄÀϵȴÙ. ±×·¯³ª ¸·»ó ½ÇÇàÇØ º¸¸é ¹öÆÛ ¿À¹ö·±ÀÌ ¹ß»ýÇÑ´Ù. ÀÌ´ë·Îµµ ½ÇÇàÀº °¡´ÉÇÏÁö¸¸ ¹®Á¦°¡ ¹ß»ýÇßÀ¸¹Ç·Î ¿øÀÎÀ» ºÐ¼®ÇÏ°í ÇØ°áÇØ¾ß ÇÑ´Ù. ¿À¹ö·±ÀÌ ¹ß»ýÇÑ À§Ä¡´Â Dangeun.cppÀÇ ÈÅ ÇÁ·Î½ÃÀúÀÌ´Ù.
LRESULT CALLBACK DgCbtHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
CBT_CREATEWND *pCbt;
HWND hWnd;
TCHAR szClassName[128];
WNDPROC OldProc;
szClassName ¹öÆÛ°¡ Å©±â 32·Î ¼±¾ðµÇ¾î ÀÖ¾ú´Âµ¥ À©µµ¿ì Ŭ·¡½º¸íÀÌ 32¸¦ ³Ñ´Â °æ¿ì°¡ ÀÖ¾î ½ºÅÃÀÌ Ä§¹üÀ» ´çÇÑ °ÍÀÌ´Ù. ÀÌÀü¿¡´Â À©µµ¿ì Ŭ·¡½º¸íÀÌ 32ÀÚ¸é ºñ±³Àû ÃæºÐÇߴµ¥ ÃÖ±Ù ´å³Ý À©µµ¿ìµéÀº À©µµ¿ì Ŭ·¡½º¸íÀ¸·Î GUID¸¦ ¾²±â ¶§¹®¿¡ 32Àڷδ ºÎÁ·ÇØÁ³´Ù. ¹öÆÛ Å©±â¸¦ 128·Î ÃæºÐÈ÷ ´Ã·ÁÁÖ¸é ¹®Á¦°¡ ÇØ°áµÈ´Ù.
ÄÄÆÄÀÏ·¯°¡ ÀÌ·± ÀáÀçÀûÀÎ ¹®Á¦±îÁö ÁöÀûÇØ Áشٴ Á¡Àº »ó´çÈ÷ °¨µ¿½º·´´Ù. »ç½Ç ÀÌ ¹ö±×¸¦ ¹«½ÃÇÏ°í °è¼Ó ½ÇÇàÇصµ µ¹¾Æ´Â °£´Ù. ÇÏÁö¸¸ ¸Þ¸ð¸®°¡ ±úÁö¸é ¾ðÁ¦ ¾îµð¼ À߸øµÉ Áö ¾Ë ¼ö ¾øÀ¸¹Ç·Î ¹®Á¦¸¦ ¾Ë°í ÀÖ´Ù¸é ¹Ù·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ÀÌ ºÎºÐ ¿Ü¿¡µµ ´ç±Ù¿¡´Â Á¤Àû ¹öÆÛ¸¦ ¾²´Â °÷ÀÌ ¸¹ÀÌ Àִµ¥ ÀÌ·± ºÎºÐµéÀÌ ¾ðÁ¦ ¸»½éÀ» ÀÏÀ¸Å³Áö´Â ¾Ë ¼ö ¾ø´Ù. ±×·¯°í º¸¸é Á¤Àû ¹öÆÛ´Â Á¤¸» À§ÇèÇÑ °ÍÀÌ°í º»ÁúÀûÀ¸·Î CÀÇ ¹è¿ ÀÚü°¡ À§ÇèÇÏ´Ù. ÀÚµ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ °ü¸®ÇÏ´Â ´å³ÝÀ̳ª ÀÚ¹Ù°¡ ºÎ·¯¿î ´ë¸ñÀÌ´Ù.
´ç±Ù 1.20¿¡´Â ºñ½ºÅ¸¿¡¼ ÇÑ±Û ¸ðµå·Î ÀüȯµÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù. ¾ÖÃÊ¿¡ ¿µ¹®À¸·Î¸¸ ÀԷµǸç ÇÑ±Û IME ÀÚü°¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ÇѱÛÀ» ÀüÇô ¾µ ¼ö ¾øÀ¸´Ï ¾ÆÁÖ Ä¡¸íÀûÀÎ ¹®Á¦ÀÌ´Ù. XP¿¡¼´Â ¸ðµç °ÍÀÌ Àß µ¹¾Æ°¡´Âµ¥ À¯µ¶ ºñ½ºÅ¸¿¡¼¸¸ ÇÑ±Û ÀüȯÀÌ ¾ÈµÇ¾ú´Ù. ÃÖÃÊ ÀÌ ¹ö±×¸¦ ¸ñ°ÝÇßÀ» ¶§ IME ¸Þ½ÃÁö ½Ã½ºÅÛ¿¡ º¯È°¡ »ý±ä °ÍÀ¸·Î ÃßÃøÇßÀ¸³ª ¿øÀÎÀº ¹Ù·Î À§¿¡¼ ¼öÁ¤ÇÑ ¹öÆÛ ¿À¹ö·±À̾ú´Ù.
½ºÅÃÀ» ±ú ¸Ô¾úÀ¸´Ï ¾ðÁ¦ ¾î¶² »ç°í°¡ ¹ß»ýÇÒ Áö ¿¹ÃøÇϱâ Èûµç °ÍÀÌ´Ù. ¾Æ¹¸µç ÀÌÁ¦ ºñ½ºÅ¸¿¡¼µµ ÇÑ±Û ÀüȯÀÌ Àß µÈ´Ù. ¾Æ¸¶ ÀÌ ¹öÆÛ ¿À¹ö·±À¸·Î ÀÎÇØ ´Ù¸¥ °÷¿¡¼µµ ¹®Á¦°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ ´õ ÀÖ¾úÀ» °ÍÀÌ´Ù. ¶È°°Àº ¹®Á¦°¡ ÀÖÀ½¿¡µµ ¿î¿µÃ¼Á¦°¡ ´Þ¶óÁö¸é ±× ¹®Á¦°¡ º¸À̱⵵ ÇÏ°í ¾È º¸À̱⵵ ÇÑ´Ù. ±×·¡¼ °¡±ÞÀû ¸¹Àº ȯ°æ¿¡¼ Å×½ºÆ®ÇغÁ¾ß ÇÑ´Ù.
ÆÄÀÏâ°ú »ó¿ë±¸ âÀÇ º¸±â »óÅ°¡ Á¦´ë·Î ÀúÀåµÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù. ¼û°Üµµ ´Ù½Ã ½ÃÀÛÇϸé Ç×»ó ³ªÅ¸³ª¸ç Æø°ú ºñÀ²À» Á¶Á¤Çصµ ¾ðÁ¦³ª µðÆúÆ®·Î µ¹¾Æ°¡ ¹ö¸°´Ù. ·¹Áö½ºÆ®¸®¿¡ ±â·ÏÇÏ´Â Äڵ忡 ¹®Á¦°¡ ÀÖ´Â ÁÙ ¾Ë¾Ò´Âµ¥ ¿øÀÎÀº º£Å¸1ÀÇ ÃÖÀûÈ¿¡ ÀÖ¾ú´Ù. ½ÇÇàÀ» Á¾·áÇÒ ¶§¸¶´Ù ·¹Áö½ºÆ®¸®¿¡ ºÒÇÊ¿äÇÏ°Ô ÀúÀåÇÏÁö ¾ÊÀ½À¸·Î½á Á¾·á ¼Óµµ¸¦ ³ôÀÌ·Á´Â Àǵµ·Î ¿É¼ÇâÀ» ¿¾î¼ È®ÀÎ ¹öÆ°À» ´©¸¦ ¶§¸¸ ÀúÀåÇϵµ·Ï ÃÖÀûȸ¦ Çß¾ú´Ù.
±×·¯³ª ¿É¼ÇâÀ» ÅëÇÏÁö ¾Ê°í Á¶Á¤µÇ´Â ¿É¼Çµéµµ ÀÖ´Ù´Â °ÍÀ» °£°úÇß´ø °ÍÀÌ´Ù. ÆÄÀÏâ°ú »ó¿ë±¸Ã¢¸¸ ¹®Á¦°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó Åø¹Ù³ª »óŶõÀÇ º¸±â »óŵµ ¸¶Âù°¡ÁöÀÌ´Ù. ÀÌ ¿É¼ÇµéÀº ¸ÞÀÎâ¿¡¼ ¹Ù·Î Á¶Á¤ °¡´ÉÇϹǷΠ¿É¼Ç ´ëÈ»óÀÚ¿Í´Â »ó°ü¾øÀÌ ¼öÁ¤µÇ±âµµ ÇÑ´Ù. ´ÙÇàÈ÷ MRU³ª À©µµ¿ì À§Ä¡´Â ¿É¼Ç°ú »ó°ü¾øÀÌ ÀúÀåÇÏ´Â Äڵ尡 µû·Î ÀÛ¼ºµÇ¾î ÀÖ¾ú´Ù. º£Å¸1ÀÇ ÃÖÀûȸ¦ Àá½Ã Á¤Áö½ÃÅ°¸é ¹®Á¦°¡ ÇØ°áµÈ´Ù.
void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
/*if (Option.bModified)*/ Option.Save(KEY);
if (DgMacro.bModified) DgMacro.SaveToReg(KEY);
if (DgShortCut.bModified) DgShortCut.Save(KEY);
¿É¼ÇÀÇ ¼öÁ¤ ¿©ºÎ¿Í »ó°ü¾øÀÌ ¹«Á¶°Ç ¿É¼ÇÀ» ÀúÀåÇϵµ·Ï ¼öÁ¤Çß´Ù. ¸Å¹ø ·¹Áö½ºÆ®¸®¸¦ ¾×¼¼½ºÇÏ´Â °ÍÀÌ Á» ¸¶À½¿¡ ¾ÈµéÁö¸¸ ¾îÂ÷ÇÇ ·¹Áö½ºÆ®¸®´Â ¿î¿µÃ¼Á¦°¡ ij½ÃÇϹǷΠºÎ´ã¾øÀÌ ¾×¼¼½ºÇÏ´Â °ÍÀÌ ´õ ³ªÀº °Í °°´Ù. ÃÖÀûÈ¿¡ ÀÇÇÑ ºÎÀÛ¿ëÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. º¸±â »óÅ°¡ ¹Ù²ð ¶§¸¶´Ù bModified¸¦ ¼öÁ¤ÇÏ´Â °Íµµ ÇØ°á ¹æ¹ýÀ̱â´Â ÇÏÁö¸¸ ¼ÖÁ÷È÷ ü·ÂÀÌ ´Þ·Á¼ ´õ ¸øÇÏ°Ú´Ù.
1.20¹öÀüÀÇ °¡Àå Å« ¹®Á¦Á¡Àº À¯´ÏÄÚµå ¹®¼¸¦ Á¦´ë·Î Áö¿øÇÏÁö ¸øÇÑ´Ù´Â Á¡ÀÌ´Ù. UTF-16 ¹®¼³ª BOM ÀÖ´Â UTF-8 ¹®¼´Â Àß ÀÐ°í ¾²Áö¸¸ BOMÀÌ ¾ø´Â ¹®¼¸¦ Á¦´ë·Î Æ÷¸Ë ÆǺ°ÇÏÁö ¸øÇÑ´Ù. ÃÖÃÊ °³¹ß½Ã¿¡´Â BOM ¾ø´Â Æ÷¸ËÀÌ ºñÁ¤»óÀ̶ó°í ÆÇ´ÜÇß°í ºóµµµµ ³ôÁö ¾Ê¾ÒÀ¸³ª ÀÌ Æ÷¸ËÀÌ À¥°ú XMLÀÇ °¡Àå ÈçÇÑ Æ÷¸ËÀÌ´Ù º¸´Ï ¹®Á¦°¡ µÇ¾ú´Ù. ÃÖ±Ù¿¡´Â UTF-8·Î ÀÎÄÚµùµÈ ¹®¼¸¦ ÈçÇÏ°Ô º¼ ¼ö ÀÖ´Ù. ȯ°æÀÌ ¹Ù²ï °ÍÀÌ´Ù.
XML ¹®¼¸¦ ¿¸é ÇѱÛÀÌ ±úÁ® º¸ÀÌ°í ÀúÀåµµ Á¦´ë·Î ÇÏÁö ¸øÇÑ´Ù. ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é BOMÀÌ ¾ø´Â UTF-8 ¹®¼¸¦ Á¤È®ÇÏ°Ô ÆǺ°ÇØ¾ß Çϴµ¥ ÀÌ°Ô ±×¸® °£´ÜÇÏÁö ¸øÇÏ´Ù. ¿î¿µÃ¼Á¦ Â÷¿øÀÇ Áö¿øÀÌ ¾øÀ¸¹Ç·Î Á÷Á¢ ÆǺ° ·çƾÀ» ¸¸µé¾î ½á¾ß ÇÑ´Ù. ÀÎÅͳÝÀ» °Ë»öÇØ º¸¸é ÀÌ ¹®Á¦¿¡ ´ëÇÑ Áú¹®Àº ¸¹¾Æµµ ´äº¯Àº ¾ø±â¿¡ ±×³É Á÷Á¢ ¸¸µé¾ú´Ù. ApiEdit.cpp¿¡ ´ÙÀ½ ¸â¹ö ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
BOOL CApiEdit::AnalyzeFormatUtf8(TCHAR *Text, int dwSize)
{
TCHAR *p;
BOOL bFind;
bFind=FALSE;
for (p=Text;p-Text < dwSize;p++) {
if ((*p & 0x80) == 0x80) {
bFind=TRUE;
// »óÀ§ ºñÆ®°¡ 110ÀÌ°í ´ÙÀ½ ¹®ÀÚÀÇ »óÀ§ ºñÆ®°¡ 10À̸é UTF8¸ÂÀ½
// p°¡ ¹®¼ ³¡À» ³Ñ°Å³ª Áß°£¿¡ Çϳª¶óµµ ±ÔÄ¢¿¡ ¸ÂÁö ¾ÊÀ¸¸é UTF8ÀÌ ¾Æ´Ô
if ((*p & 0xe0) == 0xc0) {
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
continue;
}
// »óÀ§ ºñÆ®°¡ 1110ÀÏ ¶§´Â ´ÙÀ½ µÎ ¹®ÀÚÀÇ »óÀ§ ºñÆ®°¡ 10À̾î¾ß ÇÑ´Ù.
if ((*p & 0xf0) == 0xe0) {
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
continue;
}
// »óÀ§ ºñÆ®°¡ 11110ÀÏ ¶§´Â ´ÙÀ½ ¼¼ ¹®ÀÚÀÇ »óÀ§ ºñÆ®°¡ 10À̾î¾ß ÇÑ´Ù.
if ((*p & 0xf8) == 0xf0) {
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
p++;if (p-Text >= dwSize) return FALSE;
if ((*p & 0xc0) != 0x80) return FALSE;
continue;
}
// 0x80À» ³Ñ¾ú´Âµ¥ »óÀ§ ºñÆ®°¡ 110, 1110, 11110 Áß Çϳª°¡ ¾Æ´Ï¸é
// UTF-8 ¹®¼°¡ ¾Æ´Ï´Ù.
return FALSE;
}
}
// 0x80 ³Ñ´Â °ªÀÌ Çϳªµµ ¾øÀ¸¸é ANSI·Î Ãë±ÞÇÑ´Ù.
if (bFind == FALSE) {
return FALSE;
}
// 0x80À» ³Ñ´Â ¸ðµç °ªÀÌ UTF-8ÀÇ Á¶°ÇÀ» ¸¸Á·Çϸé UTF-8¹®¼ÀÌ´Ù.
return TRUE;
}
ÆǺ° ¿ø¸®´Â ´Ü¼øÇÏ´Ù. óÀ½ºÎÅÍ ³¡±îÁö ¹®ÀÚµéÀ» ÀÐÀ¸¸é¼ ¸ðµç ¹®ÀÚ°¡ UTF-8ÀÇ ÀÎÄÚµù ±ÔÄ¢¿¡ ¸Â´ÂÁö È®ÀÎÇØ º¸¸é µÈ´Ù. UTF-8Àº 0x80 ¹Ì¸¸Àº ASCII¿Í ȣȯµÇ¸ç ±× ÀÌ»óÀÇ ÄÚµå´Â 2~4¹ÙÀÌÆ®¿¡ ³ª´² ³ÖµÇ »óÀ§ ºñÆ®¿¡ °íÁ¤µÈ Çì´õ¸¦ ¹èÄ¡ÇϹǷΠÀÌ ±ÔÄ¢´ë·Î ¹®ÀÚµéÀ» Á¡°ËÇÏ¸é µÈ´Ù. ¸ðµç ¹®ÀÚ°¡ 0x80 ¹Ì¸¸À̰ųª ±× ÀÌ»óÀÇ Äڵ尡 ÀÖ´õ¶óµµ ±ÔÄ¢¿¡ ¸ÂÀ¸¸é UTF-8¹®¼ÀÌ´Ù. ¾ÕÀ¸·Îµµ Àç»ç¿ëÇÒ °æ¿ì°¡ ÀÖÀ» °Í °°¾Æ º°µµÀÇ ÇÔ¼ö·Î ¸¸µé¾î µÎ¾ú´Âµ¥ ¾ÆÁ÷ °ËÁõ±îÁö ¸¶Ä£ °ÍÀº ¾Æ´ÏÁö¸¸ ±âº» °ñ°ÝÀº ÀÌ ÇüŸ¦ Å©°Ô ¹þ¾î³ªÁö ¾ÊÀ» °ÍÀÌ´Ù. ApiEdit.h¿¡ Æ÷¸Ë ¸ÅÅ©·Î »ó¼öµéÀÇ °ªÀ» Á¶Á¤ÇÑ´Ù.
#define AE_FORMAT_WIN 0
#define AE_FORMAT_UNIX 1
#define AE_FORMAT_MAC 2
#define AE_FORMAT_UNICODE 3
#define AE_FORMAT_UNIBIG 4
#define AE_FORMAT_UTF8BOM 5
#define AE_FORMAT_UTF8 6
#define AE_FORMAT_BINARY 7
±âÁ¸ÀÇ UTF8À» UTF8BOMÀ¸·Î À̸§À» ¹Ù²Ù°í BOM¾ø´Â UTF8 Æ÷¸ËÀ» UTF8À̶ó´Â À̸§À¸·Î Á¤ÀÇÇß´Ù. Áß°£¿¡ Çϳª°¡ ³¢¾î µé¾úÀ¸¹Ç·Î BINARY´Â1 ¹Ð¸®´Âµ¥ ¾îµð±îÁö³ª ³»ºÎÀûÀÎ Æ÷¸Ë ½Äº°ÀÚÀ̹ǷΠ°ªÀÌ ¹Ù²î¾îµµ »ó°ü¾ø´Ù. ConverFormat ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
switch (from) {
....
case AE_FORMAT_UTF8BOM:
// Àӽà ¹öÆÛ¿¡ À¯´ÏÄÚµå·Î ¸ÕÀú º¯È¯ÇÑ´Ù.
need=MultiByteToWideChar(CP_UTF8,0,src+3,srclen-3,NULL,0);
t=(LPWSTR)malloc(need*sizeof(wchar_t));
num=MultiByteToWideChar(CP_UTF8,0,src+3,srclen-3,t,need);
// À¯´ÏÄڵ带 ¾È½Ã·Î º¯È¯ÇÑ´Ù.
need=WideCharToMultiByte(CP_ACP,0,(LPCWSTR)t,num,NULL,0,0,0);
dest=(TCHAR *)malloc(need);
WideCharToMultiByte(CP_ACP,0,(LPCWSTR)t,num,dest,need,0,0);
free(t);
return need;
case AE_FORMAT_UTF8:
// Àӽà ¹öÆÛ¿¡ À¯´ÏÄÚµå·Î ¸ÕÀú º¯È¯ÇÑ´Ù.
need=MultiByteToWideChar(CP_UTF8,0,src,srclen,NULL,0);
t=(LPWSTR)malloc(need*sizeof(wchar_t));
num=MultiByteToWideChar(CP_UTF8,0,src,srclen,t,need);
// À¯´ÏÄڵ带 ¾È½Ã·Î º¯È¯ÇÑ´Ù.
need=WideCharToMultiByte(CP_ACP,0,(LPCWSTR)t,num,NULL,0,0,0);
dest=(TCHAR *)malloc(need);
WideCharToMultiByte(CP_ACP,0,(LPCWSTR)t,num,dest,need,0,0);
free(t);
return need;
}
±âÁ¸ ÄÚµå´Â UTF8BOMÀ¸·Î case¹®ÀÇ »ó¼ö¸¸ ¼öÁ¤ÇÏ°í ÀÌ Äڵ带 ±×´ë·Î case UTF8·Î º¹»çÇÏ°í BOMÀ» À§ÇØ +3ÇÏ´ø °Í¸¸ »èÁ¦ÇÏ¸é µÈ´Ù. BOMÀÌ ¾øÀ¸¹Ç·Î ¹®ÀÚ Äڵ带 ¹Ù·Î º¯È¯Çϱ⸸ ÇÏ¸é µÈ´Ù. ¹Ý´ëÂÊ º¯È¯µµ ºñ½ÁÇÏ´Ù.
switch (to) {
....
case AE_FORMAT_UTF8BOM:
// ¾È½Ã¸¦ À¯´ÏÄÚµå·Î ¸ÕÀú º¯È¯ÇÑ´Ù.
need=MultiByteToWideChar(CP_ACP,0,src,srclen,NULL,0);
t=(LPWSTR)malloc(need*sizeof(wchar_t));
num=MultiByteToWideChar(CP_ACP,0,src,srclen,t,need);
// À¯´ÏÄڵ带 UTF-8·Î º¯È¯ÇÑ´Ù.
need=WideCharToMultiByte(CP_UTF8,0,t,num,NULL,0,0,0);
need+=3;
dest=(TCHAR *)malloc(need);
dest[0]=(TCHAR)0xEF;
dest[1]=(TCHAR)0xBB;
dest[2]=(TCHAR)0xBF;
WideCharToMultiByte(CP_UTF8,0,t,num,dest+3,need,0,0);
free(t);
return need;
case AE_FORMAT_UTF8:
// ¾È½Ã¸¦ À¯´ÏÄÚµå·Î ¸ÕÀú º¯È¯ÇÑ´Ù.
need=MultiByteToWideChar(CP_ACP,0,src,srclen,NULL,0);
t=(LPWSTR)malloc(need*sizeof(wchar_t));
num=MultiByteToWideChar(CP_ACP,0,src,srclen,t,need);
// À¯´ÏÄڵ带 UTF-8·Î º¯È¯ÇÑ´Ù.
need=WideCharToMultiByte(CP_UTF8,0,t,num,NULL,0,0,0);
dest=(TCHAR *)malloc(need);
WideCharToMultiByte(CP_UTF8,0,t,num,dest,need,0,0);
free(t);
return need;
}
ÆÄÀÏ ¼±µÎ¿¡ BOM ±â·ÏÀ» ÇÏÁö ¾ÊÀ¸¸é µÈ´Ù. ´ÙÀ½Àº È£½ºÆ® ÇÁ·Î±×·¥ÀÎ ´ç±ÙÀ» ¼öÁ¤ÇÑ´Ù. Æ÷¸ËÀ» Ç¥½Ã ¹× ÆǺ°ÇÏ´Â UI°¡ File ¸Þ´º¿¡ ÀÖÀ¸¹Ç·Î ÀÌ ¸Þ´º¿¡ UTF-8(BOM), UTF-8(BOM ¾øÀ½) Ç׸ñÀ» ÀÛ¼ºÇÑ´Ù. ±âÁ¸ÀÇ UTF-8ÀÌ µÑ·Î ¼¼ºÐÈµÈ °ÍÀÌ´Ù. »õ·Î Ãß°¡µÈ Ç׸ñÀÌ ¿¬¼ÓÀûÀÎ ¹øÈ£¸¦ °¡Áú ¼ö ÀÖµµ·Ï resource.hµµ Á¤¸®ÇØ¾ß ÇÑ´Ù.
#define IDM_FILE_UNICODE 412
#define IDM_FILE_UNIBIG 413
#define IDM_FILE_UTF_8BOM 414
#define IDM_FILE_UTF_8 415
#define IDM_FILE_READONLY 416
....
¸®¼Ò½º¸¦ ±×³É ÆíÁýÇÏ¸é ºñÁÖ¾ó ½ºÆ©µð¿À°¡ ID¸¦ ¸¶À½´ë·Î ¹èÄ¡ÇØ ¹ö¸®¹Ç·Î »ç¶÷ ¼ÕÀÌ ÇÊ¿äÇÏ´Ù. ÀÌÀü ¹é¾÷¿¡¼ resource.h¸¸ ÀÐ¾î¼ UTF_8BOM°ú UTF_8À» »ðÀÔÇÏ°í ±× µÚÂÊÀÇ ¸Þ´º Ç׸ñµéÀÇ ID´Â ¸ðµÎ 1¾¿ ´õÇÑ´Ù. ¾ÆÁ÷±îÁöµµ ID¸¦ Á÷Á¢ °ü¸®ÇÒ ¶§´Â ¼öÀÛ¾÷À» ÇØ¾ß ÇÑ´Ù. ´ÙÀ½Àº Ãß°¡µÈ ¸Þ´º Ç׸ñµéÀÇ ¸í·É Çڵ鷯¸¦ ÀÛ¼ºÇÑ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_FILE_UTF_8BOM:
pSi->Ae.SetFormat(AE_FORMAT_UTF8BOM);
SetStatusText(0x10);
break;
case IDM_FILE_UTF_8:
pSi->Ae.SetFormat(AE_FORMAT_UTF8);
SetStatusText(0x10);
break;
ApiEdit¿¡°Ô Æ÷¸ËÀÌ ¹Ù²î¾úÀ½À» ¾Ë·Á ÁÖ¾î¾ß ÇÑ´Ù. Æ÷¸Ë º¯°æ »ç½Ç¸¸ ±â·ÏÇØ ³õÀ¸¸é ÀúÀåÇÒ ¶§ ÁöÁ¤µÈ Æ÷¸ËÀ¸·Î º¯È¯Çϵµ·Ï µÇ¾î ÀÖ´Ù. ¸Þ´ºÀÇ Ã¼Å© Ç¥½Ãµµ °ü¸®ÇÑ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
// ¹®¼ Æ÷¸Ë Ç¥½Ã
switch (pSi->Ae.GetFormat()) {
case AE_FORMAT_WIN:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_WIN,MF_BYCOMMAND);
break;
case AE_FORMAT_UNIX:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNIX,MF_BYCOMMAND);
break;
case AE_FORMAT_MAC:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_MAC,MF_BYCOMMAND);
break;
case AE_FORMAT_UNICODE:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNICODE,MF_BYCOMMAND);
break;
case AE_FORMAT_UNIBIG:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNIBIG,MF_BYCOMMAND);
break;
case AE_FORMAT_UTF8BOM:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UTF_8BOM,MF_BYCOMMAND);
break;
case AE_FORMAT_UTF8:
CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UTF_8,MF_BYCOMMAND);
break;
}
ÀÌ Äڵ尡 Á¦´ë·Î µ¿ÀÛÇϱâ À§Çؼ´Â Æ÷¸ËÀ» ÁöÁ¤ÇÏ´Â ¸Þ´º Ç׸ñµéÀÇ ID°¡ ¹Ýµå½Ã ¿¬¼ÓÀûÀ̾î¾ß ÇÑ´Ù. ±×·¡¼ resource.hÀÇ IDµéÀ» ¼öÀÛ¾÷À¸·Î °ü¸®ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î »óŶõÀÇ ¹®ÀÚ¿ Ç¥½Ã ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù. »õ·Î Ãß°¡µÈ Æ÷¸Ëµµ »óŶõ¿¡ Ãâ·ÂµÇ¾î¾ß ÇÑ´Ù.
void SetStatusText(int mask,LPCTSTR Mes/*=NULL*/)
{
....
case 3:
switch (pSi->Ae.GetFormat()) {
case AE_FORMAT_WIN:
lstrcpy(Text,"WIN Æ÷¸Ë");
break;
case AE_FORMAT_UNIX:
lstrcpy(Text,"UNIX Æ÷¸Ë");
break;
case AE_FORMAT_MAC:
lstrcpy(Text,"MAC Æ÷¸Ë");
break;
case AE_FORMAT_UNICODE:
lstrcpy(Text,"UNICODE");
break;
case AE_FORMAT_UNIBIG:
lstrcpy(Text,"UNICODE(Big Endian)");
break;
case AE_FORMAT_UTF8BOM:
lstrcpy(Text,"UTF-8(BOM)");
break;
case AE_FORMAT_UTF8:
lstrcpy(Text,"UTF-8(BOM¾øÀ½)");
break;
case AE_FORMAT_BINARY:
lstrcpy(Text,"ÀÌÁø ÆÄÀÏ");
break;
}
break;
¸®¼Ò½º°¡ ¹Ù²î¾úÀ¸¹Ç·Î ÇÁ·ÎÁ§Æ®¸¦ Àüü ºôµåÇØ¾ß ÇÑ´Ù. ½ÇÇàÇØ º¸¸é BOMÀÌ ¾ø´Â UTF-8 ¹®¼µµ Àß ÆǺ°Çؼ ÀÐÀ¸¸ç ÆíÁýÇÑ ÈÄ ÀúÀåµµ Àß µÈ´Ù. ±×·¯³ª ¾ÆÁ÷ ¿Ïº®ÇÏ´Ù°í ÇÒ ¼ö´Â ¾ø´Ù. ¿µ¹®¸¸ ÀÖ´Â UTF-8 ¹®¼´Â ANSI ¹®¼¿Í ÀüÇô ±¸ºÐµÇÁö ¾Ê´Âµ¥ ´ç±ÙÀº ÀÌ·± ¹®¼¸¦ ANSI·Î ¿¬´Ù. ¿Ö³ÄÇÏ¸é ³»ºÎ Æ÷¸ËÀÌ ANSI·Î µÇ¾î Àֱ⠶§¹®ÀÌ´Ù.
ÀÌ´ë·Î ÆíÁýÇؼ ÀúÀåÇصµ ¾îÂ÷ÇÇ UTF-8°ú ANSI´Â ȣȯ °¡´ÉÇϹǷΠ¹«¹æÇÏ´Ù. ±×·¯³ª ÇѱÛÀ» Ãß°¡ ÀÔ·ÂÇÑ ÈÄ ÀúÀåÇßÀ» ¶§´Â µÎ Æ÷¸ËÀÇ ÀÎÄÚµù ¹æ½ÄÀÌ ´Þ¶ó È¥¶õÀ» ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù. BOM¾ø´Â UTF-8 ¹®¼¸¦ ¿¾î ÇѱÛÀ» ÀÔ·ÂÇÑ ÈÄ ÀúÀåÇÒ ¶§ ANSI·Î ÀÎÄÚµùÀÌ ¹Ù²î¾î ¹ö¸®´Â °ÍÀÌ´Ù. ±×·¸´Ù¸é ¿µ¹®¸¸ ÀÖÀ» ¶§ UTF-8À» µðÆúÆ®·Î ÀνÄÇÏ¸é µÇÁö ¾ÊÀ»±î ½Í°ÚÁö¸¸ À̰͵µ ¸¶Âù°¡Áö ¹®Á¦°¡ ÀÖ´Ù.
¹®Á¦´Â ¿øº»ÀÇ ÀÎÄÚµù ¹æ½ÄÀ» Á¤È®ÇÏ°Ô ¾Ë ¼ö ¾ø´Ù´Â Á¡Àε¥ ³í¸®ÀûÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀüÇô ¾ø´Ù. °á±¹ ¿µ¹®À¸·Î¸¸ µÈ ¹®¼´Â »ç¿ëÀÚ°¡ ÀÎÄÚµù ¹æ½ÄÀ» Á÷Á¢ ÁöÁ¤ÇÏ¿© ÀúÀåÇØ¾ß ÇÑ´Ù. ´ç±Ù¿¡´Â ÀÌ·± ÀåÄ¡°¡ ÀÖÁö¸¸ ¹®Á¦´Â ÆÄÀÏ ÀÔÃâ·Â ´ëÈ»óÀÚ°¡ ¾Æ´Ñ File ¸Þ´º¿¡ ÀÖ´Ù´Â Á¡ÀÌ´Ù. Á» ´õ ±ò²ûÇÏ°Ô ÇØ°áÇÏ·Á¸é Open As ¸í·ÉÀ» ¸¸µéµç°¡ ¾Æ´Ï¸é ÆÄÀÏ ÀúÀå ´ëÈ»óÀÚ¿¡ ÀÎÄÚµù ¹æ½ÄÀ» ¼±ÅÃÇÏ´Â ÄÞº¸ ¹Ú½º¸¦ ¹èÄ¡ÇØ¾ß ÇÑ´Ù.
°Ô½ÃÆÇÀ» ÅëÇØ ¸î ºÐÀÌ ¹ö±× ¹× ºÒÆí »çÇ×À» º¸°íÇØ Á̴ּµ¥ ±× Áß °íÄ¡±â ½¬¿î °Í¸¸ ¼öÁ¤Çß´Ù. FixedSys ±Û²ÃÀ» ±âº»À¸·Î ÁöÁ¤ÇÏ°í ½Í´Ù´Â ¿äûÀÌ ÀÖ¾ú´Âµ¥ ÀÌ ¹®Á¦´Â ÆÄÀÏ ¿°Å ÇÔ¼öÀÇ ´ÙÀ½ ÇÑ ÁÙ¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.
int CALLBACK EnumFamCallBack(ENUMLOGFONT FAR *lpelf, NEWTEXTMETRIC FAR *lpntm,
int FontType, LPARAM lParam)
{
if (FontNum < 500) {
if (lpelf->elfLogFont.lfFaceName[0]!='@'/* && FontType==TRUETYPE_FONTTYPE*/) {
arFont[FontNum] = lpelf->elfLogFont;
FontNum++;
}
return TRUE;
}
else {
return FALSE;
}
}
ÀÌÀü ¹öÀü¿¡¼´Â Ç°ÁúÀ» À§ÇØ Æ®·çŸÀÔ ÆùÆ®¸¸ ¿°ÅÇϵµ·Ï Çߴµ¥ ±»ÀÌ Æ®·çŸÀÔ¸¸ °¿äÇÒ ÇÊ¿ä´Â ¾ø´Â °Í °°´Ù. ºñÆ®¸ÊÀº Å©±â¸¦ Å°¿ì¸é ±²ÀåÈ÷ º¸±â ½È¾îÁöÁö¸¸ ¾î·°Å³ª »ç¿ëÀÚ°¡ ¿øÇÑ´Ù¸é ¼±ÅÃÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ¿Ü¿¡µµ ¸î °¡Áö ¹ö±× º¸°í°¡ ÀÖ¾ú´Âµ¥ ÀçÇöÀÌ ¾ÈµÇ°Å³ª ³Ê¹« ¾î·Æ°Å³ª Çؼ ÀÏ´Ü Á¦¿ÜÇØ µÎ¾ú´Ù.
¸¶Áö¸·À¸·Î µµ¿ò¸»°ú ŸÀÌƲ ¹ÙÀÇ ¹öÀüÀ» 1.21·Î ¼öÁ¤Çß´Ù. Á¶±ÝÀÌ¶óµµ ¹Ù²ï °ÍÀÌ ÀÖÀ¸¸é ¹öÀüÀ» ³ô¿© È¥¶õÀ» ¾ø¾Ö¾ß ÇÑ´Ù. ÀÌ ¹öÀüÀÌ ÀÌÁ¦ 1.21ÀÌ¸ç ´çºÐ°£Àº ÃֽŠ¹öÀüÀÌ µÉ °ÍÀÌ´Ù. ¾î¼¸é ÃÖÁ¾ ¹öÀüÀÌ µÉ Áöµµ ¸ð¸¥´Ù. ¾ÆÁ÷µµ ´ç±ÙÀº ´õ ¸¹Àº ±â´ÉÀ» Ãß°¡ÇÒ ÇÊ¿ä°¡ ÀÖÁö¸¸ ÀÀ¿ë ÇÁ·Î±×·¥À̶ó±âº¸´Ù´Â ±³À°¿ëÀ¸·Î Á¦ÀÛÇß°í ³ª¸§´ë·ÎÀÇ ¸ñÀûÀ¸·Î ´Þ¼ºÇ߱⠶§¹®ÀÌ´Ù. ¾Æ¸¶ ´ÙÀ½¿¡ ´õ ½Ã°£ÀÌ Çã¶ôµÈ´Ù¸é ´ç±ÙÀÌ ¾Æ´Ï¶ó ¿öµå ÇÁ·Î¼¼¼¸¦ ¸¸µé·Á°í ´ýºôÁöµµ ¸ð¸£°Ú´Ù.