¹Ù. ÀÚµ¿°³Çà¿­ ÁöÁ¤

ApiEdit´Â ÀÚµ¿°³Çà½Ã âÀÇ ¿À¸¥ÂÊ ³¡¿¡¼­¸¸ ÀÚµ¿°³ÇàµÇµµ·Ï µÇ¾î Àִµ¥ °³ÇàÇÒ ¿­À» Á÷Á¢ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï Çغ¸ÀÚ. Åë½Å¸Á¿¡ ¿Ã¸®°Å³ª ÀÏÁ¤ÇÑ Çü½ÄÀ» °®Ãß¾î¾ß ÇÏ´Â ¹®¼­ÀÇ °æ¿ì âÀÇ Å©±â¿¡ »ó°ü¾øÀÌ 80Ä÷³ Á¤µµ¿¡¼­ ÀÚµ¿À¸·Î °³ÇàµÇµµ·Ï ÇÏ´Â Çü½ÄÀÌ ¸¹ÀÌ »ç¿ëµÈ´Ù. ÀÌ ¿É¼Ç ±¸ÇöÀ» À§ÇØ RightWrapÀ̶ó´Â º¯¼ö°¡ Ãß°¡µÇ¾úÀ¸¸ç ÀÌ º¯¼ö°¡ °¡¸®Å°´Â ¿­¿¡¼­ ÀÚµ¿À¸·Î °³ÇàµÈ´Ù. ´Ü ÀÌ °ªÀÌ 0À̸é âÀÇ ¿À¸¥ÂÊ ³¡¿¡¼­ ÀÚµ¿°³ÇàµÇ¸ç ÃʱⰪÀº 0ÀÌ´Ù.

RightWrap º¯¼ö¸¦ º¯°æÇÏ´Â °ÍÀº Á¤·Ä »óŸ¦ ¹Ù²Ù´Â °Í°ú È¿°ú°¡ µ¿ÀÏÇϹǷΠSetWrap ÇÔ¼ö¿¡¼­ ÀÌ ¿É¼ÇÀ» ó¸®Çϸç SetWrap ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÈ´Ù.

 

void CApiEdit::SetWrap(int aWrap)

{

     DWORD dwStyle;

 

     nWrap=aWrap;

     dwStyle=GetWindowLong(hWnd,GWL_STYLE);

    if (nWrap && RightWrap==0) {

          dwStyle = dwStyle & ~WS_HSCROLL;

          xPos=0;

     } else {

          dwStyle = dwStyle | WS_HSCROLL;

     }

     SetWindowLong(hWnd,GWL_STYLE,dwStyle);

     SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,

          SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);

     Invalidate(-1);

     UpdateLineInfo();

     UpdateScrollInfo();

     SetCaret();

}

 

ÀÚµ¿°³Çà »óÅÂÀÌ°í ÀÚµ¿°³Çà¿­ÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ» ¶§(RightWrapÀÌ 0)¸¸ ¼öÆò ½ºÅ©·Ñ¹Ù¸¦ ¼û±æ ¼ö ÀÖ´Ù. ÀÚµ¿°³Çà »óÅÂ¶óµµ RightWrapÀÌ 0ÀÌ ¾Æ´Ñ °æ¿ì´Â À©µµ¿ì Æø°ú »ó°ü¾øÀÌ ÀÚµ¿°³ÇàµÇ¹Ç·Î À©µµ¿ì°¡ ¾ÆÁÖ ÀÛ¾ÆÁú ¶§¸¦ ´ëºñÇÏ¿© ¼öÆò ½ºÅ©·Ñ¹Ù¸¦ º¸¿©ÁÖ¾î¾ß ÇÑ´Ù. UpdateScrollInfo ÇÔ¼öµµ ¸¶Âù°¡Áö ÀÌÀ¯·Î ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù.

 

void CApiEdit::UpdateScrollInfo()

{

     ....

     if (nWrap == 0 || RightWrap != 0) {

          ....

 

ÀÚµ¿°³Çà »óÅ°¡ ¾Æ´Ï°Å³ª ¿À¸¥ÂÊ ¿­ÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ¼öÆò ½ºÅ©·Ñ¹ÙÀÇ ¹üÀ§¸¦ °»½ÅÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼öµµ ¼öÁ¤ÇÑ´Ù.

 

void CApiEdit::SetNoFirstSpace(BOOL aNoFirstSpace)

{

     bNoFirstSpace=aNoFirstSpace;

    if (nWrap != 0 || RightWrap != 0) {

          ....

 

Á٠óÀ½ °ø¹é Çã¿ë ¿É¼ÇÀÌ º¯°æµÇ¾úÀ» ¶§ ÀÚµ¿°³Çà »óÅ°ųª ÀÚµ¿°³Çà¿­ÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é Á¤·ÄÀ» ´Ù½Ã ÇØ¾ß ÇÑ´Ù. ÀÌ¿Ü¿¡ ÀÌ ¿É¼ÇÀÌ ¿µÇâÀ» ¹ÌÄ¡´Â °÷À¸·Î OnMouseMove¿¡¼­ ¼±ÅÃÁß¿¡ ¼öÆòÀ¸·Î ÀÚµ¿ ½ºÅ©·ÑÇÏ´Â Äڵ尡 ÀÖÀ¸³ª ¹«½ÃÇϱâ·Î ÇÑ´Ù. ¿Ö³ÄÇÏ¸é º¸ÀÌÁöµµ ¾Ê´Â ¿­¿¡¼­ ÀÚµ¿°³ÇàµÇµµ·Ï ÇÏ´Â °æ¿ì°¡ ±ØÈ÷ µå¹°±â ¶§¹®ÀÌ´Ù. ÀÌ °ªÀÌ »ç¿ëµÇ´Â °÷Àº Á¤·ÄÀÇ ÇÙ½É ÇÔ¼öÀÎ GetLine ÇÔ¼öÀÌ´Ù.

 

void CApiEdit::GetLine(int Line, int &s, int &e)

{

     TCHAR *p;

     int len, acwidth;

     TCHAR *EndPos=NULL;

     TCHAR *EndPosNoSpace=NULL;

     BOOL IsPrevDBCS=FALSE;

    int Right;

 

    if (RightWrap == 0) {

        Right=frt.right-2;

    } else {

        Right=MarginWidth+RightWrap*FontWidth;

    }

     ....

    if (nWrap == 0 && RightWrap == 0) {

          while (*p != ¡®\r¡¯ && *p != 0)

              p++;

     } else {

          for (acwidth=MarginWidth;;) {

              ....

           if (acwidth > max(Right, MarginWidth+FontHeight*4)) {

                   break;

              }

              ....

 

frt.right-2¿¡¼­ ÀÚµ¿°³ÇàÀ» Çß¾úÀ¸³ª ÀÌÁ¦ RightWrapÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é À©µµ¿ì Æø¿¡ »ó°ü¾øÀÌ ÀÌ ¿­¿¡¼­ ÀÚµ¿°³ÇàµÇ¾î¾ß ÇÑ´Ù. ÀÚµ¿°³ÇàµÉ Çȼ¿ ÁÂÇ¥´Â RightWrap°ú Æò±Õ ¹®ÀÚÆøÀÎ FontWidth¸¦ °öÇÑ °ª¿¡ ¸¶ÁøÆøÀ» ´õÇÑ °ªÀÌ µÈ´Ù. ¹®ÀÚÀÇ ÆøÀ» ´õÇØ ³ª°¡´Ù°¡ RightWrapÀÌ ÁöÁ¤ÇÑ ¿­¿¡ À̸£¸é °­Á¦·Î °³ÇàµÈ´Ù.

nWrap ¼³Á¤º¸´Ù´Â RightWrap ¼³Á¤ÀÌ ´õ ¿ì¼±À̱⠶§¹®¿¡ nWrapÀÌ 0ÀÌ´õ¶óµµ RightWrapÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ ¿­¿¡¼­ °­Á¦·Î °³ÇàµÈ´Ù. ´Ü, ÀÌ °æ¿ì ±ÛÀÚ´ÜÀ§·Î Á¤·ÄÀº ÇÒ ¼ö ¾øÀ¸¸ç ¹«Á¶°Ç ´Ü¾î ´ÜÀ§·Î¸¸ Á¤·ÄµÈ´Ù.