Åǹ®ÀÚ Ã³¸®Äڵ尡 Ãß°¡µÊÀ¸·Î½á ¿©·¯ °¡Áö ÇÔ¼öµéÀÌ ¿µÇâÀ» ¹Þ°Ô µÇ´Âµ¥ ±×¸® ¸¹Áö´Â ¾Ê´Ù. ÁַΠȸé ÁÂÇ¥¸¦ ´Ù·ç´Â ÇÔ¼öµéÀÌ ¿µÇâÀ» ¹Þ´Âµ¥ Ưº°È÷ ¾î·Á¿î ÄÚµå´Â ¾ø´Ù. ¾Æ¹« »ý°¢¾øÀÌ °íÄ¡±â¸¸ ÇÏ¸é µÈ´Ù. ¸ÕÀú ÅÇÀ¸·Î ÀÎÇØ Á¤·ÄÀÌ ¿µÇâÀ» ¹Þ´Â´Ù. Á¤·ÄÀº GetLineSub¿¡¼ ´ã´çÇÏ°í ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
int GetLineSub(TCHAR *&p)
{
....
for (acwidth=0;;) {
if (*p == ¡®\t¡¯) {
len=1;
acwidth =(acwidth/TabSize+1)*TabSize;
EndPos=p;
} else {
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 == ¡®\r¡¯) {
....
ÅÇÀÌ ¹ß°ßµÇ¸é ´©ÀûÆøÀ» ´ÙÀ½ ÅÇÀ§Ä¡·Î ¿Å°ÜÁØ´Ù. ÀÌ ÇÔ¼ö°¡ ´Ù·ç´Â x ÁÂÇ¥´Â ¹®¼»óÀÇ ÁÂÇ¥À̹ǷΠ½ºÅ©·Ñ »óŸ¦ °í·ÁÇÏÁö ¾Ê°í °ð¹Ù·Î °ø½ÄÀ» Àû¿ëÇصµ »ó°ü¾ø´Ù. ¼öÇнÄÀ» ÀÌ¹Ì ÀÌÇØÇßÀ¸¹Ç·Î ¾ÆÁÖ ½±°Ô ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. Åǹ®ÀÚ´Â ¾Õ ¹®ÀÚ°¡ ÇѱÛÀΰ¡ ¿µ¹®Àΰ¡¿¡ »ó°ü¾øÀÌ ¹«Á¶°Ç ÀÚ¸¦ Èĺ¸ À§Ä¡°¡ µÈ´Ù. ±×·¡¼ ÅÇÀÌ ¹ß°ßµÇ´Â Á·Á· EndPos¸¦ ÅÇÀ§Ä¡·Î ¿Å°Ü ³õ¾Ò´Ù.
µÎ ¹ø°·Î ij·µ À§Ä¡µµ ÅÇÀ» ÀνÄÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. SetCaretÀ» °íÃľ߰ÚÁö¸¸ SetCaretÀº °Çµå¸± ÇÊ¿ä°¡ ¾ø°í ´ë½Å SetCaretÀÌ È£ÃâÇÏ´Â GetXYFromOff ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ¸é µÈ´Ù.
void GetXYFromOff(int nPos, int &x, int &y)
{
HDC hdc;
int r,c,s,e;
TCHAR *p;
GetRCFromOff(nPos, r, c);
y=r*LineHeight;
GetLine(r, s, e);
hdc=GetDC(hWndMain);
x=0;
for (p=buf+s;p!=buf+nPos;) {
if (*p == ¡®\t¡¯) {
x = (x/TabSize+1)*TabSize;
p++;
} else {
if (IsDBCS(p-buf)) {
x += GetCharWidth(hdc,p,2);
p+=2;
} else {
x += GetCharWidth(hdc,p,1);
p++;
}
}
}
ReleaseDC(hWndMain, hdc);
}
GetCharWidth ÇÔ¼ö Çϳª·Î °£´ÜÈ÷ x ÁÂÇ¥¸¦ ±¸ÇÒ ¼ö ÀÖ¾ú´Âµ¥ ÀÌÁ¦ ÅÇÀÌ µé¾î°¨À¸·Î½á ±×·¸°Ô ÇÒ ¼ö°¡ ¾ø´Ù. ÇÑ ¹®ÀÚ¾¿ ÆøÀ» ´©Àû½ÃÅ°°í ÅÇÀ» ¸¸³ª¸é ´ÙÀ½ ÅÇÀ§Ä¡·Î ¿Å±â¸é¼ ´©ÀûÆøÀ» °è¼Ó ºñ±³ÇØ ºÁ¾ß ÇÑ´Ù. ÅÇÀ» ¿Å±â´Â °ø½ÄÀº ¿ª½Ã µ¿ÀÏÇÏ´Ù. ¸¶Áö¸·À¸·Î GetXPosOnLine ÇÔ¼öµµ ȸé»óÀÇ ÁÂÇ¥¸¦ ´Ù·ç°í ÀÖÀ¸¹Ç·Î Åǹ®ÀÚ¸¦ ÀνÄÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.
int GetXPosOnLine(int r,int DestX)
{
...
for (p=buf+s, acwidth=0;;) {
if (p-buf == e)
break;
if (*p == ¡®\t¡¯) {
len=1;
acwidth =(acwidth/TabSize+1)*TabSize;
} else {
if (IsDBCS(p-buf)) {
len=2;
} else {
len=1;
}
acwidth+=GetCharWidth(hdc,p,len);
}
p+=len;
....
´õ ¼³¸íÀÌ ÇÊ¿ä¾øÀ» Á¤µµ·Î °£´ÜÇÏ´Ù. ±×·¡¼ ¼³¸íÇÏÁö ¾Ê°Ú´Ù. Áö±Ý ÀÌ ´Ü°è¿¡¼ ¡®µµ´ëü Äڵ尡 ¾î¶»°Ô ¹Ù²î°í ÀÖ´Â °ÅÁö?¡¯¶ó´Â Àǹ®ÀÌ µç´Ù¸é ¾Æ¸¶ DrawSegmentÀÇ Äڵ带 ´«À¸·Î¸¸ ÀÐ°í ¿Í¼ ±×·² °ÍÀÌ´Ù. ¾Õ¿¡¼ ÀÌ¹Ì ÀÌ·Ð Á¡°ËÀÌ ³¡³ Äڵ带 °è¼Ó ¹Ýº¹ Àû¿ëÇÏ°í Àֱ⠶§¹®¿¡ Çѹø¸¸ ÀÌÇØÇÏ¸é ³ª¸ÓÁö´Â ¾ÆÁÖ ½±°Ô ÀÌÇصǹǷΠ´«À¸·Î¸¸ Äڵ带 º¸Áö ¸»°í Á÷Á¢ Äڵ带 ¼öÁ¤Çغ¸±â ¹Ù¶õ´Ù. ÀÌÁ¦ Åǹ®ÀÚ Áö¿øÀÌ ¿Ï¼ºµÇ¾ú´Ù. Àß µ¿ÀÛÇÏ´ÂÁö ¾Õ¿¡¼ ¸Þ¸ðÀåÀ¸·Î ¸¸µé¾ú´ø ¼ºÀûÇ¥¸¦ ApiEdit·Î ´Ù½Ã ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
°ú¿¬ Á¦´ë·Î Àß ÀԷµǰí Á¤·Ä°ú Ãâ·ÂÀÌ Á¤È®ÇÏ´Ù. ij·µÀ» À̵¿ÇØ ºÁµµ ÅÇÀ§Ä¡°¡ Àß ÀÎ½ÄµÉ °ÍÀÌ´Ù.