´ç±Ù 1.21

1³â ¹Ýµ¿¾È ¹æÄ¡ÇØ ¿À´ø ÇÁ·ÎÁ§Æ®¸¦ ¿À·£¸¸¿¡ ¾÷µ¥ÀÌÆ®Çß´Ù. ±×µ¿¾È ¹ö±×µµ ¸î °³ ¹ß°ßµÇ¾ú°í ¸¹Áö´Â ¾ÊÁö¸¸ ¸î¸î »ç¿ëÀںе鲲¼­ °³¼± »çÇ×À» ÁöÀûÇØ ÁÖ¾î Ä¡¸íÀûÀÎ ¸î °¡Áö¸¸ ¼öÁ¤Çß´Ù. ÀÚÁÖ ½Å°æ¾²°í ½ÍÁö¸¸ ±×°£ ´å³Ý ÇÁ·Î±×·¡¹Ö Á¤º¹À̶ó´Â Ã¥À» Àú¼úÇÏ°í ¸Ô°í »ì±â À§ÇØ ÇÁ·ÎÁ§Æ® ¸î °Ç ¶Ù°í ÇÏ´Ù º¸´Ï µµÀúÈ÷ ½Ã°£À» ³¾ ¼ö°¡ ¾ø¾ú´Ù. 2008³â 3¿ù 1ÀÏ ÇöÀç ¿ø°í¸¦ ÃâÆÇ»ç·Î ³Ñ±â°í ±³Á¤º»ÀÌ ¿À±â¸¦ ±â´Ù¸®´Â µ¿¾È Àá½Ã «ÀÌ ³ª¼­ ÀÛ¾÷ ½Ã°£À» È®º¸ÇÏ¿´´Ù.

¸·»ó ÀÛ¾÷ÇØ º¸¸é ÇÏ·ç ÀÌƲ ÀϰŸ®¹Û¿¡ ¾ÈµÇ´Â °ÍÀ» º¸¸é ½Ã°£ÀÌ ¾ø´Ù´Â ¸»Àº ¾ðÁ¦³ª Çΰ迡 ºÒ°úÇÏ´Ù. ½Ã°£ÀÌ ¾ø´Ù±â º¸´Ù´Â ¼ÖÁ÷È÷ °æȲÀÌ ¾ø¾ú°í ´Ù¸¥ µ¥ ½Å°æÀ» ¾²´Ù º¸¸é ÇÁ·ÎÁ§Æ®¿¡ ¼ÒȦÇØÁú ¼ö¹Û¿¡ ¾ø´Â ¹®Á¦ÀÎ °Í °°´Ù. ¸Ó¸®¼Ó¿¡ ¿ÂÅë ¿ø°í¸¸ µé¾î ÀÖ´Â »óÅ¿¡¼­´Â Äڵ尡 ºñÁý°í µé¾î°¥ ÀÚ¸®°¡ ¾ø´Â °ÍÀÌ´Ù. ´ç±Ù 1.20ÀÇ ¼Ò½º(Dangeun29)¸¦ ´Ù¿î·Îµå¹ÞÀº »óÅ¿¡¼­ ´ÙÀ½ ¼ø¼­´ë·Î ÇÁ·ÎÁ§Æ®¸¦ ¼öÁ¤Çϸé 1.21ÀÌ ¸¸µé¾îÁø´Ù. ³Ê¹« »ó¼¼ÇÑ ¹®¼­È­´Â ÇÏÁö ¾Ê°í ÀÛ¾÷ °úÁ¤À» °£·«ÇÏ°Ô ±â·ÏÀ¸·Î ³²±â±â¸¸ ÇÑ´Ù.

°¡.VC 2008 ÇÁ·ÎÁ§Æ®·Î º¯È¯

ºñÁÖ¾ó ½ºÆ©µð¿À°¡ µåµð¾î 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¸¦ ¼öÁ¤ÇÏ´Â °Íµµ ÇØ°á ¹æ¹ýÀ̱â´Â ÇÏÁö¸¸ ¼ÖÁ÷È÷ ü·ÂÀÌ ´Þ·Á¼­ ´õ ¸øÇÏ°Ú´Ù.

´Ù.UTF-8 Áö¿ø

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ÀÌ¸ç ´çºÐ°£Àº ÃֽŠ¹öÀüÀÌ µÉ °ÍÀÌ´Ù. ¾î¼¸é ÃÖÁ¾ ¹öÀüÀÌ µÉ Áöµµ ¸ð¸¥´Ù. ¾ÆÁ÷µµ ´ç±ÙÀº ´õ ¸¹Àº ±â´ÉÀ» Ãß°¡ÇÒ ÇÊ¿ä°¡ ÀÖÁö¸¸ ÀÀ¿ë ÇÁ·Î±×·¥À̶ó±âº¸´Ù´Â ±³À°¿ëÀ¸·Î Á¦ÀÛÇß°í ³ª¸§´ë·ÎÀÇ ¸ñÀûÀ¸·Î ´Þ¼ºÇ߱⠶§¹®ÀÌ´Ù. ¾Æ¸¶ ´ÙÀ½¿¡ ´õ ½Ã°£ÀÌ Çã¶ôµÈ´Ù¸é ´ç±ÙÀÌ ¾Æ´Ï¶ó ¿öµå ÇÁ·Î¼¼¼­¸¦ ¸¸µé·Á°í ´ýºôÁöµµ ¸ð¸£°Ú´Ù.