°¢ ÇÔ¼öµéÀÌ ¸¶ÁøÀ» ÀνÄÇϵµ·Ï °³º°ÀûÀ¸·Î ¼öÁ¤Çغ¸ÀÚ. ¸¹Àº ºÎºÐÀ» °íÄ¥ ÇÊ¿ä´Â ¾ø°í ¼öÆòÁÂÇ¥ÀÇ ÃʱⰪÀ» 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;;) {
....
Á¤·ÄÀÇ ½ÃÀÛ ÁÂÇ¥µµ ¸¶ÁøÆø ¹Ù·Î ´ÙÀ½¿¡¼ ½ÃÀÛÇØ¾ß Á¦´ë·Î Á¤·ÄÀÌ µÉ °ÍÀÌ´Ù. ¿©·¯ °¡Áö ÇÔ¼ö¸¦ ÀÌ°÷ Àú°÷ ¼öÁ¤ÇßÁö¸¸ ¸ðµÎ ÁÙÀÇ ½ÃÀÛ ÁÂÇ¥°¡ ¹Ù²î¾úÀ» »ÓÀÌ¸ç µ¿ÀÏÇÑ ÀÛ¾÷µéÀ̾ú´Ù. º¸´Ù½ÃÇÇ Äڵ差ÀÌ ´Ã¾î³ª¸é ÇÑ °¡Áö¸¸ ¹Ù²ãµµ ¼Õ´ë¾ß ÇÒ °÷ÀÌ Á¡Á¡ ¸¹¾ÆÁø´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇغ¸ÀÚ. ¿ÞÂÊ¿¡ ¸¶ÁøÀÌ ±ò²ûÇÏ°Ô Ãâ·ÂµÉ °ÍÀÌ´Ù.
Á¤·Äµµ Á¦´ë·Î µÇ¾ú°í ¸¶¿ì½º·Î ÀÛ¾÷¿µ¿ªÀ» Âï¾îµµ Á¦ À§Ä¡¸¦ Á¤È®ÇÏ°Ô Ã£°í ¾Æ·¡À§ À̵¿µµ Á¤È®ÇÏ°Ô ¼öÁ÷À¸·Î µ¿ÀÛÇÑ´Ù. ÀÏ´ÜÀº ¸¸Á·½º·´´Ù.