¸¶. ±ÝÄ¢ ó¸®

GetLineSub ÇÔ¼ö´Â ÁÙ ³¡¿¡ ´ê¾ÒÀ» ¶§ Á¤·Ä¹æ½Ä¿¡ ¸Â°Ô ¹«Á¶°Ç ÁÙÀ» ÀÚ¸£¸ç À߸®´Â À§Ä¡ÀÇ ¹®ÀÚ°¡ ¹«¾ùÀÎÁö´Â »ó°üÇÏÁö ¾Ê´Â´Ù. ÀÌ·¯´Ù º¸´Ï °ø¹éÀÌ ÀÖ´Â À§Ä¡¿¡¼­µµ ÁÙÀÌ À߸± ¼ö ÀÖ°Ô µÇ°í µû¶ó¼­ Á٠óÀ½¿¡ °ø¹éÀÌ ¿Ã ¼ö ÀÖ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

µÎ ¹ø° ÁÙÀ» º¸¸é ¡®ÇÏ´À´ÔÀÌ¡¯ ´ÙÀ½¿¡ °ø¹é Çϳª°¡ µé¾î°¥ ÀÚ¸®°¡ ¾ø¾î °ø¹é À§Ä¡¿¡¼­ °³ÇàµÇ¾ú°í µû¶ó¼­ µÎ ¹ø° ÁÙÀÇ Ã¹ ¹®ÀÚ´Â °ø¹éÀÌ´Ù. Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó Á¤·ÄÀ» ÇÏ´Ùº¸´Ï ÀÌ·¸°Ô µÇ´Â °ÍÀÌ ´ç¿¬ÇÏ°í ¾ÆÁÖ ÀÚ¿¬½º·¯¿î Çö»óÀÌ´Ù. ÇÏÁö¸¸ ¹®Á¦´Â º¸±â°¡ ½È´Ù´Â °ÍÀÌ´Ù. ¹®ÀåÀÇ ¿ÞÂÊ ³¡ÀÌ °¡Áö·±ÇؾßÁö °ø¹éÀ¸·Î ÀÎÇØ µéÂß³¯ÂßÇÏ¸é ¹®¼­ÀÇ ¸ð¾çÀÌ º¸±â¿¡ ½â ÁÁÁö ¸øÇÏ´Ù.

±×·¡¼­ Á٠óÀ½ÀÇ °ø¹é ¹®ÀÚ¿¡ ´ëÇؼ­¸¸ ±ÝÄ¢ 󸮸¦ Çغ¸µµ·Ï ÇÏÀÚ. ±ÝÄ¢ 󸮶õ ƯÁ¤ÇÑ ¹®ÀÚ°¡ ƯÁ¤ À§Ä¡¿¡ ¿ÀÁö ¸øÇϵµ·Ï ÇÏ´Â °ÍÀε¥ ¾Õ±ÝÄ¢°ú µÞ±ÝÄ¢ÀÌ ÀÖ´Ù. ¾Õ±ÝÄ¢ ¹®ÀÚ´Â Á٠óÀ½¿¡ ¸ø ¿À´Â ¹®ÀÚÀÌ¸ç °ø¹é, ´Ý´Â °ýÈ£, ½°Ç¥, ¸¶Ä§Ç¥ µîÀÇ ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù. µÞ±ÝÄ¢ ¹®ÀÚ´Â ÁÙ µÚ¿¡ ¿Ã ¼ö ¾ø´Â ¹®ÀÚÀÌ¸ç ¿©´Â °ýÈ£, µû¿ÈÇ¥, È­Æó´ÜÀ§ µîÀÌ ÀÖ´Ù. ÅؽºÆ® ÆíÁý±â°¡ ÀÌ·± º¹ÀâÇÑ ±ÝÄ¢ 󸮸¦ ´Ù ÇÒ ÇÊ¿ä´Â ¾øÀ» °Í °°°í °ø¹é¿¡ ´ëÇÑ ¾Õ±ÝÄ¢ 󸮸¸ Çغ¸µµ·Ï ÇÏÀÚ.

±ÝÄ¢ 󸮸¦ ÇÏ´Â °¡Àå Å« ÀÌÀ¯´Â º¸±â ½È±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ÀÚ¿¬½º·¯¿î Á¤·Ä ±ÔÄ¢À» ¾î±ä´Ù´Â Á¡¿¡ À־ ±ÝÄ¢ 󸮰¡ ¹®¼­ÆíÁý¿¡ ¹æÇØ°¡ µÉ ¼öµµ ÀÖÀ¸¹Ç·Î ¹«Á¶°Ç ±ÝÄ¢ 󸮸¦ ÇÏ´Â °Í º¸´Ù´Â ¿É¼ÇÀ» ¸¸µé¾î µÎ°í ¿øÇÏ´Â »ç¶÷¸¸ ÀÌ Ã³¸®¸¦ Çϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ Àü¿ªº¯¼ö¸¦ Ãß°¡ÇÏ°í OnCreate¿¡¼­ TRUE·Î ÃʱâÈ­ÇÑ´Ù.

 

BOOL bNoFirstSpace;

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     bNoFirstSpace=TRUE;

     return TRUE;

}

 

±×·¸´Ù¸é ¾î¶»°Ô Á٠óÀ½¿¡ °ø¹éÀÌ ¿ÀÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖÀ»±î? ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀº Àû¾îµµ ¼ö¹é °¡Áö´Â ÀÖ´Ù. ¿©·¯ºÐÀÌ Á÷Á¢ ÀÌ ¹®Á¦¿¡ ºÎ´ÚÃÆ´Ù¸é ¾î¶»°Ô °ø¹éÀ» ±ÝÁöÇÒ °ÍÀÎÁö ¸ÕÀú »ý°¢Çغ¸µµ·Ï ÇÏÀÚ. ¹®¼­»ó¿¡ ¾ö¿¬È÷ Á¸ÀçÇÏ´Â °ø¹éÀ» ¾ø¾Ö ¹ö¸± ¼ö´Â ¾ø´Â ³ë¸©ÀÌ°í ±×·¸´Ù°í ¾Õ ÁÙ¿¡ °ø¹éÀ» ³ÖÀ» °ø°£µµ ¾ø´Âµ¥ ¾ïÁö·Î ³¢¿ö³ÖÀ» ¼öµµ ¾ø´Ù. °ø¹éÀº ¾îÂ÷ÇÇ ¾È º¸À̴µ¥ µÞÁÙ ³¡¿¡ »ì¦ ºÙ¿© ³õ¾Æµµ µÇÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢ÀÌ µé±âµµ Çϴµ¥ ½ÇÁ¦·Î Çغ¸¸é ¹®Á¦°¡ ¾ÆÁÖ ¸¹´Ù. ij·µÀÌ °ø¹é µÚ¿¡ ¼û¾î¼­ ¾È º¸ÀÌ´Â ¹®Á¦µµ ÀÖ°í ºÒÇÊ¿äÇÑ ¼öÆò½ºÅ©·ÑÀÌ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ¶Ç Á¦¾îÄÚµå º¸±â ±â´ÉÀ» ¸¸µé¸é µÚÂÊ¿¡ ¼û¾î ÀÖ´Â °ø¹éÀÌ º¸ÀÏ ¼öµµ ÀÖ´Ù.

ÁÙ ¾Õ¿¡ ¿À´Â °ø¹éÀÇ ¹®ÀÚÆøÀ» Àӽ÷Π0À¸·Î ¸¸µå´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼öµµ Àִµ¥ ÀÌ·¸°Ô µÇ¸é ij·µÀ̵¿ÀÌ °ñÄ¡¾ÆÆÄÁø´Ù. ¾È º¸ÀÌ´Â °ø¹éÀ» °Ç³Ê ¶Ù±â À§ÇØ Ãß°¡ ÄÚµå ÀÛ¼ºÀÌ ÇÊ¿äÇϸç Á¤·Ä »óÅ°¡ ¹Ù²î¸é ¾ø´ø °ø¹éÀÌ °©Àڱ⠻ý°Ü³­ °Íó·³ º¸ÀÏ ¿ì·Áµµ ÀÖ´Ù. ÀÌ¿Ü¿¡µµ ¾ÆÁÖ ´Ù¾çÇÑ ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö Àִµ¥ ¿©±â¼­ ¾²´Â ¹æ¹ýÀº À̸¥¹Ù ¡®¹°±Í½Å ÀÛÀü¡¯ÀÌ´Ù. ÁÙ ¾Õ¿¡ °ø¹éÀÌ ¿Ã °Í °°À¸¸é ±× ¾Õ¿¡ ÀÖ´Â ºñ°ø¹é ¹®ÀÚ(¶Ç´Â ´Ü¾î)¸¦ Çϳª ´õ °¡Áö°í ³»·Á ¿À´Â °ÍÀÌ´Ù. ÀÌ ¹æ½Ä´ë·Î¶ó¸é ¾Õ ÁÙÀÇ ³¡ÀÌ Á¶±Ý ºñ´Â µíÇÑ ´À³¦ÀÌ ÀÖÁö¸¸ °ø¹é ¹®ÀÚÀÇ ÆøÀÌ À۱⠶§¹®¿¡ ½±°Ô ´«Ä¡Ã¤±â ¾î·Æ´Ù.

¹°±Í½Å ÀÛÀüÀ» ¾²·Á¸é ¹°±Í½Å¿¡ Èñ»ýµÉ Èĺ¸ ¹®ÀÚ³ª ´Ü¾îÀÇ À§Ä¡¸¦ Ç×»ó ±â¾ïÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¾ß Á٠óÀ½¿¡ °ø¹éÀ» ¸¸³µÀ» ¶§ ÀÚ¸¦ À§Ä¡¸¦ ¿©ºÐÀÇ ÄÚµå¾øÀÌ ¼±Á¤ÇÒ ¼ö ÀÖ´Ù. GetLineSub ÇÔ¼ö¿¡ ºñ°ø¹é ¹®ÀÚÀÇ Èĺ¸ À§Ä¡¸¦ ±â¾ïÇÏ´Â º¯¼ö EndPosNoSpace¸¦ Ãß°¡ÇÏ°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ¼öÁ¤ÇÑ´Ù.

 

int GetLineSub(TCHAR *&p)

{

    TCHAR *EndPosNoSpace=NULL;

 

     ....

          for (acwidth=0;;) {

               if (IsDBCS(p-buf)) {

                   len=2;

 

                   if (nWrap==2 || (nWrap==3 && IsPrevDBCS==FALSE)) {

                        EndPos=p;

                   if (*EndPos != ¡® ¡®) {

                       EndPosNoSpace=EndPos;

                   }

                   }

                   IsPrevDBCS=TRUE;

               } else {

                   len=1;

 

                   if (IsPrevDBCS==TRUE) {

                        EndPos=p;

                   if (*EndPos != ¡® ¡®) {

                       EndPosNoSpace=EndPos;

                   }

                   }

                   IsPrevDBCS=FALSE;

               }

               acwidth+=GetCharWidth(hdc,p,len);

 

               ....

               if (*p == ¡® ¡® || *p==¡®\t¡¯) {

                   EndPos=p+1;

               if (*EndPos != ¡® ¡®) {

                   EndPosNoSpace=EndPos;

               }

               }

 

               p+=len;

          }

     }

 

     ReleaseDC(hWndMain,hdc);

     if (nWrap == 1 || EndPos == NULL) {

          p=p;

     } else {

          p=EndPos;

     }

 

    if (bNoFirstSpace && *p==¡® ¡® && EndPosNoSpace!=NULL) {

        p=EndPosNoSpace;

    }

     return ret;

}

 

EndPos¿¡ Èĺ¸ À§Ä¡¸¦ ±â¾ï½Ãų ¶§¸¶´Ù ÀÌ ÀÚ¸®ÀÇ ¹®ÀÚ°¡ °ø¹éÀÎÁö º¸°í °ø¹éÀÌ ¾Æ´Ï¶ó¸é EndPosNoSpace¿¡µµ À§Ä¡¸¦ °°ÀÌ ±â¾ï½ÃÄÑ µÐ´Ù. ·çÇÁÀÇ Áß°£¿¡¼­´Â ºñ°ø¹é ¹®ÀÚÀÇ À§Ä¡¸¸ ±â¾ïÇϵµ·Ï ÇÏ°í ±ÝÄ¢ 󸮴 Á¤·ÄÀÌ ¿ÏÀüÈ÷ ³¡³­ ÈÄ µû·Î ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¡¼­ GetLineSub´Â ¸®ÅÏÇϱâ Á÷Àü¿¡ ±ÝÄ¢ 󸮸¦ ÇÑ´Ù.

bNoFirstSpace ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ°í ÇöÀç °³ÇàµÉ À§Ä¡°¡ °ø¹éÀÌ¸é ¹Ì¸® ±â¾ïÇØ µÐ ºñ°ø¹é Èĺ¸ À§Ä¡¸¦ ÁÙ ³¡ À§Ä¡·Î ÃëÇÏ¸é µÈ´Ù. À̶§µµ ¿¹¿Ü 󸮰¡ ÇÊ¿äÇѵ¥ ¸¸¾à ºñ°ø¹é Èĺ¸ À§Ä¡°¡ ¾ø´Ù¸é, Áï ÁÙ Àüü°¡ °ø¹éÀΠƯ¼öÇÑ »óȲÀ» ¸¸³ª¸é ¾î¿ ¼ö ¾øÀÌ ´ÙÀ½ Á٠óÀ½¿¡µµ °ø¹éÀÌ ¿Ã ¼ö¹Û¿¡ ¾ø´Ù. ÀÌ·¸°Ô Äڵ带 ¼öÁ¤ÇÑ ÈÄ Å×½ºÆ®Çغ¸¸é °ø¹éÀÌ Á٠óÀ½¿¡ ¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù.

ù ÁÙÀÇ ³¡¿¡ ¡®ÀÌ¡¯ÀÚ°¡ µé¾î°¥ ÃæºÐÇÑ °ø°£ÀÌ ÀÖÁö¸¸ ±× µÚÀÇ °ø¹é±îÁö °°ÀÌ ³ÖÀ» ¸¸Å­ÀÇ ¿©À¯°¡ ¾øÀ¸¹Ç·Î ¾Æ¿¹ °°ÀÌ ´ÙÀ½ ÁÙ·Î ³»·Á¿Í ¹ö·È´Ù. °ø¹éÀ̶ó´Â ¹°±Í½ÅÀÌ ¡®ÀÌ¡¯ÀÚ¸¦ Àâ¾Æ ¸ÔÀº °ÍÀÌ´Ù. °ø¹éÀÌ Ã³À½¿¡ ÀÖ´Â °Íº¸´Ù´Â ÀÌ ¹æ½ÄÀÌ ÈξÀ ´õ º¸±â¿¡´Â ÁÁ´Ù. GetLineSubÀÇ °ø¹é ±ÝÁö ÄÚµå´Â º¹¼ö °³ÀÇ °ø¹é¿¡ ´ëÇؼ­µµ µ¿ÀÛÇÑ´Ù. Á» ´õ Á¤¹ÐÇÏ°Ô ÀÛ¼ºÇÑ´Ù¸é ÇϳªÀÇ °ø¹é¸¸ ±ÝÁöÇÏ°í µÑ ÀÌ»óÀÏ ¶§´Â Çã¿ëÇÏ´Â ¹æ½ÄÀ» ÃëÇÒ ¼öµµ ÀÖ´Ù.

°ø¹é ¾Õ±ÝÄ¢ 󸮴 ÀÖÀ¸¸é ÁÁÀº ±â´ÉÀÌÁö¸¸ ¾ø¾îµµ º° »ó°üÀº ¾ø°í ÅؽºÆ® ÆíÁý±â¿¡°Ô´Â ´Ù¼Ò »çÄ¡½º·¯¿î ±â´ÉÀÌ´Ù. ±×·¡¼­ ÀÌ ¿É¼ÇÀÇ µðÆúÆ®°ªÀº FALSE·Î ÃʱâÈ­ÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù. OnCreate¸¦ ´Ù½Ã ¼öÁ¤Çؼ­ ÀÌ º¯¼öÀÇ ÃʱⰪÀ» FALSE·Î ¹Ù²ã ³õµµ·Ï ÇÏÀÚ. Áï ApiEdit´Â °ø¹é ±ÝÁö ±â´ÉÀ» °¡Áö°í´Â ÀÖÁö¸¸ µðÆúÆ®·Î ¼±ÅÃÇÏÁö ¾Ê´Â´Ù. ¹®¼­ÀÇ °¡µ¶¼ºº¸´Ù´Â ÀÚ¿¬½º·¯¿ò¿¡ ´õ ¹«°Ô¸¦ µÎ°Ú´Ù´Â Á¤Ã¥ÀÌ´Ù.