´Ù. Àμâ¿ë Á¤·Ä

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 Á¶°Ç ÆÇ´ÜÀ» ÇÏ´Â ½Ã°£Á¶Â÷µµ ¾Æ²¸¾ß ÇÒ Á¤µµ·Î ÃÖÀûÈ­¿¡ ¹Î°¨ÇÑ ÇÔ¼ö¶ó °¨È÷ °Çµå¸®Áö ¾Ê¾Ò´Ù. ºñ½ÁÇÑ µÎ ÇÔ¼ö°¡ Á¸ÀçÇÔÀ¸·Î½á ¿ë·®»óÀÇ ºÒÀÌÀÍÀÌ ÀÖ°í Äڵ带 À¯ÁöÇϱⰡ Á¶±Ý ¾î·Á¿öÁöÁö¸¸ ÃæºÐÈ÷ °¨¼öÇÒ¸¸ÇÏ´Ù.