´Ù. °ü·Ã ÇÔ¼ö ¼öÁ¤

°¢ ÇÔ¼öµéÀÌ ¸¶ÁøÀ» ÀνÄÇϵµ·Ï °³º°ÀûÀ¸·Î ¼öÁ¤Çغ¸ÀÚ. ¸¹Àº ºÎºÐÀ» °íÄ¥ ÇÊ¿ä´Â ¾ø°í ¼öÆòÁÂÇ¥ÀÇ ÃʱⰪÀ» 0À¸·Î ÁÖÁö ¾Ê°í ¸¶ÁøÆø¿¡¼­ºÎÅÍ ½ÃÀÛÇϵµ·Ï Á¶±Ý¾¿¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. ¿ÀÇÁ¼ÂÀ¸·ÎºÎÅÍ Çȼ¿ ÁÂÇ¥¸¦ ±¸ÇÏ´Â GetXYFromOff ÇÔ¼ö¸¦ º¸¸é x=0;À̶ó´Â ÃʱâÈ­ ¹®ÀåÀÌ Àִµ¥ ÀÌ ¹®ÀåÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÑ´Ù.

 

void GetXYFromOff(int nPos, int &x, int &y)

{

     ....

     x=MarginWidth;

 

x´Â Á٠óÀ½ ¹®ÀÚÀÇ ¼öÆòÁÂÇ¥°ªÀε¥ ¸¶ÁøÀÌ ¾øÀ» ¶§´Â ¹«Á¶°Ç 0À̾úÁö¸¸ ¸¶ÁøÀÌ ÀÖÀ¸¸é ù ¹®ÀÚÀÇ ÁÂÇ¥´Â ¸¶ÁøÆø¿¡¼­ ½ÃÀ۵Ǿî¾ß ÇÑ´Ù. ±×·¡¾ß ù ¹®ÀÚ°¡ ¸¶Áø ¹Ù·Î ¿À¸¥ÂÊ¿¡¼­ºÎÅÍ Ãâ·ÂµÉ °ÍÀÌ´Ù. ¸¶Âù°¡Áö·Î GetOffFromXY ÇÔ¼öµµ ¿ÞÂÊ ³¡ÀÌ 0ÀÌ ¾Æ´Ï¶ó ¸¶ÁøÆø¿¡¼­ºÎÅÍ ´©Àû ÆøÀ» °è»êÇÑ´Ù.

 

int GetOffFromXY(int x, int y)

{

     ....

     for (p=buf+pLine[r].Start,acwidth=MarginWidth;;) {

 

ÀÌ µÎ ÇÔ¼öÀÇ º¯È­°¡ »ó½ÄÀûÀ¸·Î ½±°Ô ÀÌÇØ°¡ µÇ°í ³í¸®ÀûÀ¸·Î ¾Æ¹« ¹®Á¦°¡ ¾ø´Â °Í °°Àº°¡? Àß »ý°¢Çغ¸¸é ÀÌ·¸°Ô Äڵ带 ¼öÁ¤ÇÏ¸é ¾ÆÁÖ Áß´ëÇÑ ÀǹÌÀû º¯È­°¡ ¹ß»ýÇÑ´Ù. ¿ÀÇÁ¼Â°ú Çȼ¿ ÁÂÇ¥°£ÀÇ º¯È¯À» ´ã´çÇÏ´Â µÎ ÇÔ¼ö°¡ ÀÌ·± ½ÄÀ¸·Î ¸¶ÁøÀ» °è»ê¿¡ Æ÷ÇÔÇϸé ÀÌÁ¦ ÀÌ µÎ ÇÔ¼ö°¡ »ç¿ëÇÏ´Â XY ÁÂÇ¥°ªÀº ´õ ÀÌ»ó ¹®¼­»óÀÇ Çȼ¿ ÁÂÇ¥°¡ ¾Æ´Ï´Ù.

¹®¼­»óÀÇ Çȼ¿ ÁÂÇ¥¶ó¸é ¹®¼­ÀÇ Ã¹ ¹®ÀÚ´Â Ç×»ó (0,0)ÀÇ ÁÂÇ¥¸¦ °¡Á®¾ß ÇÏÁö¸¸ ¸¶ÁøÀÌ ÀÖÀ¸¸é (MarginWidth,0)ÀÇ ÁÂÇ¥¸¦ °¡Áö°Ô µÇ´Â °ÍÀÌ´Ù. ÀÌ ÁÂÇ¥°ªÀº ¹®¼­»óÀÇ ÁÂÇ¥°ª¿¡ È­¸é»óÀÇ ¸¶ÁøÆøÀ» °°ÀÌ °í·ÁÇÏ¿© ¸¸µé¾îÁø «»Í°ªÀÌ¸ç ¼ø¼öÇÑ ¹®¼­ ÁÂÇ¥¶ó ÇÒ ¼ö ¾ø´Ù. ¸¸¾à ÀÌ µÎ ÇÔ¼ö°¡ °è¼Ó ¼ø¼öÇÑ ¹®¼­»óÀÇ ÁÂÇ¥¸¸À» ´Ù·çµµ·Ï ÇÏ°í ½Í´Ù¸é ±×·¸°Ô ÇÒ ¼öµµ ÀÖ´Ù.

´ë½Å SetCaret, OnMouseMove, Invalidate ÇÔ¼öµéÀº ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â ¹®¼­»óÀÇ ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥·Î ¹Ù²Ù±â À§ÇØ ¸¶Áø°ªÀ» °í·ÁÇØ¾ß ÇÏ´Â ºÎ´ãÀÌ »ý±â¸ç ÀÌ´Â ¹«Ã´ ±ÍÂúÀº ÀÏÀÌ´Ù. ³í¸®ÀûÀÎ Ä¡¹ÐÇÔµµ ÁÁÁö¸¸ Äڵ差ÀÌ ´Ã¾î³¯ ¼ö Àֱ⠶§¹®¿¡ ÀÌ µÎ ÇÔ¼ö°¡ ´Ù·ç´Â °ª¿¡ ¾à°£ÀÇ ÀǹÌÀû º¯È­°¡ »ý±â´Â °ÍÀ» °¨¼öÇϱâ·Î ÇÏ¿´´Ù. ÀÌ·¸°Ô Çصµ º° ¹®Á¦´Â ¾øÁö¸¸ ³í¸®¿¡ ¾à°£ÀÇ º¯È­°¡ »ý°å´Ù´Â °ÍÀº Àß ±â¾ïÇصξî¾ß ´ÙÀ½¿¡ ¹®Á¦°¡ »ý°Üµµ ¿øÀÎÀ» ½±°Ô ãÀ» ¼ö ÀÖ´Ù.

±¦È÷ ¾µµ¥¾øÀÌ º¹ÀâÇÑ ¾ê±â¸¦ ²¨³½ °Í °°Àºµ¥ Çò°¥¸®¸é ¹«½ÃÇÏ°í ³Ñ¾î°¡µµ »ó°ü¾ø´Ù. ´ÙÀ½Àº ÇÑ ÁÙÀ» Ãâ·ÂÇÏ´Â DrawLineÀ» ¼öÁ¤Çϵµ·Ï ÇÏÀÚ. ÀÌ ÇÔ¼ö´Â Á¶°¢ÀÇ Ã³À½ Ãâ·Â ÁÂÇ¥¸¦ x=0-xPos;·Î ÃʱâÈ­ÇÏ°í ÀÖ´Ù. Áï xÂÊÀ¸·Î ¼öÆò½ºÅ©·Ñ µÈ ¸¸Å­ ¿ÞÂÊ¿¡¼­ºÎÅÍ Ãâ·ÂÀ» ÇØ ¿Â´Ù´Â ¶æÀε¥ ÀÚµ¿°³Çà »óÅ¿¡¼­ xPos´Â 0À̹ǷΠ±×³É 0À̶ó°í »ý°¢Çصµ ¹«¹æÇÏ´Ù. ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

int DrawLine(HDC hdc, int Line)

{

     ....

     x=MarginWidth-xPos;

 

¸¶ÁøÆø ¹Ù·Î ´ÙÀ½ºÎÅÍ Ãâ·ÂÀ» ½ÃÀÛÇϵµ·Ï ÇÏ¿´´Ù. ÀÌÁ¦ ù Á¶°¢Àº ÀÌ ÁÂÇ¥¿¡ Ãâ·ÂµÇ°í À̾îÁö´Â Á¶°¢Àº °è¼Ó µÚÂÊ¿¡ ¿¬À̾î Ãâ·ÂµÈ´Ù. ÀÌ ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ¸é ¹®ÀÚ¿­µéÀÌ ¸¶ÁøÆøÀ» ħ¹üÇÏÁö ¾Ê°Ô µÉ °ÍÀÌ´Ù. ´ÙÀ½ ÇÔ¼öµµ ¼öÁ¤ÇÑ´Ù.

 

int GetXPosOnLine(int r,int DestX)

{

     TCHAR *p;

     int len, acwidth;

 

    if (DestX == MarginWidth) {

          return pLine[r].Start;

     }

    for (p=buf+pLine[r].Start, acwidth=MarginWidth;;) {

    ....

 

ÁÙÀÇ Ã³À½ À§Ä¡°¡ 0ÀÌ ¾Æ´Ï¶ó MarginWidth°¡ µÇ¸ç ´©Àû ÆøÀÇ ÃʱⰪµµ MarginWidth°¡ µÈ´Ù. ¸¶Áö¸·À¸·Î Á¤·ÄÇÔ¼öÀÎ GetLineµµ ¸¶ÁøÆøÀ» °í·ÁÇÏ¿© Á¤·ÄÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

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

{

     ....

     if (nWrap == 0) {

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

              p++;

     } else {

        for (acwidth=MarginWidth;;) {

          ....

 

Á¤·ÄÀÇ ½ÃÀÛ ÁÂÇ¥µµ ¸¶ÁøÆø ¹Ù·Î ´ÙÀ½¿¡¼­ ½ÃÀÛÇØ¾ß Á¦´ë·Î Á¤·ÄÀÌ µÉ °ÍÀÌ´Ù. ¿©·¯ °¡Áö ÇÔ¼ö¸¦ ÀÌ°÷ Àú°÷ ¼öÁ¤ÇßÁö¸¸ ¸ðµÎ ÁÙÀÇ ½ÃÀÛ ÁÂÇ¥°¡ ¹Ù²î¾úÀ» »ÓÀÌ¸ç µ¿ÀÏÇÑ ÀÛ¾÷µéÀ̾ú´Ù. º¸´Ù½ÃÇÇ Äڵ差ÀÌ ´Ã¾î³ª¸é ÇÑ °¡Áö¸¸ ¹Ù²ãµµ ¼Õ´ë¾ß ÇÒ °÷ÀÌ Á¡Á¡ ¸¹¾ÆÁø´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇغ¸ÀÚ. ¿ÞÂÊ¿¡ ¸¶ÁøÀÌ ±ò²ûÇÏ°Ô Ãâ·ÂµÉ °ÍÀÌ´Ù.

Á¤·Äµµ Á¦´ë·Î µÇ¾ú°í ¸¶¿ì½º·Î ÀÛ¾÷¿µ¿ªÀ» Âï¾îµµ Á¦ À§Ä¡¸¦ Á¤È®ÇÏ°Ô Ã£°í ¾Æ·¡À§ À̵¿µµ Á¤È®ÇÏ°Ô ¼öÁ÷À¸·Î µ¿ÀÛÇÑ´Ù. ÀÏ´ÜÀº ¸¸Á·½º·´´Ù.