BeginPrint ÇÔ¼ö´Â Àμâ Á¤·ÄÀ» À§ÇØ GetLine ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ ÀÌ ÇÔ¼ö´Â ȸé»óÀÇ Á¤·ÄÇÔ¼öÀÎ GetLine°ú´Â À̸§¸¸ °°°í Àμö ¸ñ·ÏÀÌ ´Ù¸£¹Ç·Î ¿ÏÀüÈ÷ ´Ù¸¥ ÇÔ¼öÀÌ´Ù. Àμâ¿ëÀÇ GetLine ÇÔ¼ö ÄÚµå´Â ´ÙÀ½°ú °°´Ù. ȸé¿ëÀÇ GetLine°ú ³í¸®´Â ¿ÏÀüÈ÷ µ¿ÀÏÇ쵂 ¸î °¡Áö ´Ù¸¥ ºÎºÐÀÌ ÀÖ´Ù. ´Ù¸¥ ºÎºÐÀº ±½°Ô Ç¥½ÃÇß´Ù.
void CApiEdit::GetLine(int Line, int &s, int &e,Ae_PrintInfo *pi)
{
TCHAR *p;
int len, acwidth;
TCHAR *EndPos=NULL;
TCHAR *EndPosNoSpace=NULL;
BOOL IsPrevDBCS=FALSE;
SIZE sz;
pi->Origin=pi->prt.left;
if (pi->bLineNum) {
GetTextExtentPoint32(pi->pdc,"999999",6,&sz);
pi->Origin+=sz.cx;
}
if (Line == 0) {
p=buf;
s=0;
} else {
p=buf+pi->pLine[Line-1].End;
if (*p == 0) {
s=-1;
e=-1;
return;
}
if (*p == ¡®\r¡¯) {
p+=2;
}
s=p-buf;
}
if (pi->nWrap == 0) {
while (*p != ¡®\r¡¯ && *p != 0)
p++;
} else {
for (acwidth=pi->Origin;;) {
if (*p == ¡®\t¡¯) {
len=1;
acwidth =((acwidth-pi->Origin)/pi->TabSize+1)*pi->TabSize+pi->Origin;
EndPos=p;
} else {
if (IsDBCS(p-buf)) {
len=2;
if (pi->nWrap==2 || (pi->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;
}
GetTextExtentPoint32(pi->pdc,p,len,&sz);
acwidth+=sz.cx;
}
if (*p == ¡®\r¡¯ || *p == 0) {
EndPos=p;
break;
}
if (acwidth > pi->prt.right) {
break;
}
if (*p == ¡® ¡® || *p==¡®\t¡¯) {
EndPos=p+1;
if (*EndPos != ¡® ¡®) {
EndPosNoSpace=EndPos;
}
}
p+=len;
}
}
if (pi->nWrap == 1 || EndPos == NULL) {
p=p;
} else {
p=EndPos;
}
if (bNoFirstSpace && *p==¡® ¡® && EndPosNoSpace!=NULL) {
p=EndPosNoSpace;
}
e=p-buf;
}
Àμâ¿ë Á¤·ÄÀ» Çϱ⠶§¹®¿¡ Á¤·Ä ±âÁØÀÌ µÇ´Â ¸î °¡Áö °ªµéÀÌ ´Ù¸£´Ù. ÀÚµ¿°³Çà »óÅ¿¡ ´ëÇÑ Á¤º¸´Â nWrapÀ» ÂüÁ¶ÇÏÁö ¾ÊÀ¸¸ç ´ë½Å pi->nWrapÀ» ÂüÁ¶ÇÑ´Ù. pi->nWrapÀº Àμâ½ÃÀÇ °³Çà ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â º¯¼öÀÌ¸ç ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ »ç¿ëÀÚ¿¡ ÀÇÇØ ¼±ÅõȴÙ. ¸¸¾à Àμâ½Ã¿¡µµ nWrap °ªÀ» ÂüÁ¶ÇÑ´Ù¸é Áö±Ý »ç¿ëÀÚ°¡ ¹®¼¸¦ º¸°í ÀÖ´Â ¹æ½Ä´ë·Î ÀμâµÇ´Âµ¥ ÀÌ´Â ºÒÇÕ¸®ÇÏ´Ù. nWrapÀÌ 0ÀÏ °æ¿ì ȸéÀº ´çÀå ¾Èº¸¿©µµ ½ºÅ©·ÑÀÌ °¡´ÉÇÏÁö¸¸ ÀÌ´ë·Î ÀμâÇÏ¸é ¿ëÁö ¹Ù±ùÀ¸·Î ¹®¼°¡ Àß·Á ³ª°£´Ù. ±×·¡¼ Àμâ½ÃÀÇ Á¤·Ä »óÅ´ »ç¿ëÀÚ°¡ º°µµ·Î ÁöÁ¤ÇÑ pi->nWrapÀ» µû·Î ÂüÁ¶Çϵµ·Ï ÇÏ¿´´Ù.
ÇÑ ÁÙÀÌ Á¤·ÄµÇ´Â °ø°£µµ ´Ù¸¥µ¥ ¿ÞÂÊ ³¡Àº MarginWidth°¡ ¾Æ´Ï¶ó pi->OriginÀ̶ó´Â °ªÀÌ ´ë½Å »ç¿ëµÈ´Ù. ÀÌ °ªÀº GetLine ¼±µÎ¿¡¼ ¿ëÁöÀÇ ¿ÞÂÊ ³¡¿¡ ¸ÂÃß¾îÁø´Ù. ÀμâÇÒ ¶§´Â ¸¶ÁøÀÌ ¾ø°í ´ë½Å ÁÙ¹øÈ£ Ãâ·Â ¿µ¿ªÀÌ Àִµ¥ ¸¸¾à ÁÙ¹øÈ£ Ãâ·Â ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é pi->Origin¿¡ ½ÊÁø¼ö ¿©¼¸ ÀÚ¸®¸¦ Ãâ·ÂÇÒ ¸¸ÅÀÇ °ø°£ÀÌ ´õÇØÁø´Ù. ¿À¸¥ÂÊ ³¡Àº Àμ⠿µ¿ªÀÇ ¿À¸¥ÂÊ ³¡ÀÎ pi->prt.rightÀε¥ ÀÌ ÁÂÇ¥´Â È£½ºÆ®¿¡ ÀÇÇØ ¿ëÁöÀÇ ¿À¸¥ÂÊ ¿©¹é±îÁö·Î °è»êµÇ¾î Àü´ÞµÈ´Ù.
ÇÁ¸°ÅÍ»óÀÇ ¹®ÀÚ Å©±â´Â ȸé»óÀÇ ¹®ÀÚ Å©±âº¸´Ù ÈξÀ ´õ Å©±â ¶§¹®¿¡ GetCharWidth ÇÔ¼ö·Î ¹®ÀÚÀÇ ÆøÀ» ±¸ÇÏÁö ¾Ê¾ÒÀ¸¸ç GetTextExtentPoint32 ÇÔ¼ö·Î Á÷Á¢ ±¸ÇØ »ç¿ëÇÑ´Ù. Àμâ¿ë ±Û²ÃÀº µü ÇÑ ¹ø¸¸ »ç¿ëµÇ±â ¶§¹®¿¡ ¹Ì¸® ±× Å©±â¸¦ °è»êÇسõÀ» ÇÊ¿ä°¡ ¾ø´Ù. °Ô´Ù°¡ Àμâ¶ó´Â µ¿ÀÛÀº ¿ø·¡ºÎÅÍ ´À¸° µ¿ÀÛÀ̶ó ºü¸¦ ÇÊ¿ä°¡ ¾øÀ¸¸ç(À¢¸¸Å »¡¶óµµ °ÅÀÇ ´À³¥ ¼ö ¾ø´Ù.) ½Ç½Ã°£À¸·Î ¹®ÀÚÆøÀ» ±¸Çصµ º° »ó°üÀÌ ¾ø´Ù.
ÀÌ·± ¸î °¡Áö Â÷ÀÌÁ¡À» Á¦¿ÜÇÏ°í Àμâ¿ëÀÇ GetLine ÇÔ¼ö´Â ȸé¿ëÀÇ GetLine ÇÔ¼ö¿Í Å©°Ô ´Ù¸¥ Á¡ÀÌ ¾ø´Ù. ¾îÂ÷ÇÇ ¿À¸¥ÂÊ ³¡¿¡ ´êÀ¸¸é ´ÙÀ½ ÁÙ·Î ³Ñ°Ü¾ß ÇÏ°í ´Ü¾îÀÇ °æ°è¿¡¼ ÀÚ¸£±â, Åǹ®ÀÚ´Â ÅÇ Æø¸¸Å ¶ç¿ì±â µîÀÇ ³í¸®´Â µ¿ÀÏÇÒ ¼ö¹Û¿¡ ¾ø´Ù. Àß ÇÏ¸é µÎ °³ÀÇ GetLine ÇÔ¼ö¸¦ Çϳª·Î ÇÕÄ¥ ¼öµµ ÀÖÀ» °Í °°´Ù. Àμâ¿ëÀÎÁö ȸé¿ëÀÎÁö¸¦ ±¸ºÐÇÏ´Â Àμö¸¦ Çϳª Ãß°¡ÇÏ°í ÀÌ Àμö¿¡ µû¶ó ´ÙÀ½Ã³·³ Äڵ带 ÀÛ¼ºÇÏ¸é µÈ´Ù.
if (Àμâ¿ë) {
ÀÌ·¸°Ô Á¤·Ä
} else {
Àú·¸°Ô Á¤·Ä
}
ÀÌ·± ½ÄÀ¸·Î ÇÕÄ¡´Â °ÍÀÌ ÃæºÐÈ÷ °¡´ÉÇÏ¸ç º°·Î ¾î·Á¿î Àϵµ ¾Æ´Ï´Ù. ÇÏÁö¸¸ ÇÕÄ¡Áö ¾Ê°í º°µµÀÇ ÇÔ¼ö¸¦ µû·Î ¸¸µç ÀÌÀ¯´Â ȸé¿ë GetLine ÇÔ¼ö´Â ApiEditÀÇ Àüü ¼Óµµ¿¡ °áÁ¤ÀûÀÎ ¿µÇâÀ» ¹ÌÄ¡´Â ÇÙ½É ÇÔ¼öÀ̱⠶§¹®ÀÌ´Ù. if Á¶°Ç ÆÇ´ÜÀ» ÇÏ´Â ½Ã°£Á¶Â÷µµ ¾Æ²¸¾ß ÇÒ Á¤µµ·Î ÃÖÀûÈ¿¡ ¹Î°¨ÇÑ ÇÔ¼ö¶ó °¨È÷ °Çµå¸®Áö ¾Ê¾Ò´Ù. ºñ½ÁÇÑ µÎ ÇÔ¼ö°¡ Á¸ÀçÇÔÀ¸·Î½á ¿ë·®»óÀÇ ºÒÀÌÀÍÀÌ ÀÖ°í Äڵ带 À¯ÁöÇϱⰡ Á¶±Ý ¾î·Á¿öÁöÁö¸¸ ÃæºÐÈ÷ °¨¼öÇÒ¸¸ÇÏ´Ù.