°¡. GetLine

¿©·¯ ÁÙÀ» ÀÔ·ÂÇÏ°í Ãâ·ÂÇÒ ¼ö ÀÖ´Â ApiEdit¿¹Á¦¿¡¼­ °¡Àå ÇÙ½É ÇÔ¼ö¸¦ ²ÅÀ¸¶ó¸é ´Ü¿¬ GetLine ÇÔ¼öÀÌ´Ù. ºÐ¼®Àº õõÈ÷ Çغ¸±â·Î ÇÏ°í ÀÏ´Ü ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÑ´Ù. GetLine ÇÔ¼ö´Â GetLineSub¶ó´Â ¼­ºêÇÔ¼ö Çϳª¸¦ °Å´À¸®°í ÀÖ´Ù. GetLineSub´Â ¿À·ÎÁö GetLine¿¡¼­¸¸ È£ÃâÇÏ´Â ÀÏÁ¾ÀÇ °³³äÀûÀÎ Áö¿ª ÇÔ¼öÀÌ´Ù.

 

int GetLineSub(TCHAR *&p)

{

     for (;;p++) {

          if (*p == ¡®\r¡¯)

               return 1;

 

          if (*p == 0)

               return 0;

     }

}

 

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

{

     TCHAR *p;

     int i;

 

     p=buf;

 

     for (i=0;;i++) {

          if (i==Line)

               break;

 

          if (GetLineSub(p)==0) {

               s=-1;

               e=-1;

               return;

          }

 

          p+=2;

     }

 

     s=p-buf;

     GetLineSub(p);

     e=p-buf;

}

 

ÅؽºÆ® ¹öÆÛÀÎ buf´Â ÀÏÂ÷¿øÀÇ ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£À̹ǷΠƯÁ¤ À§Ä¡ÀÇ ÁÙÀ» ã±â°¡ ½±Áö ¾ÊÀºµ¥ GetLineÀÌ ¹Ù·Î ÀÌ ÀÏÀ» ´ë½ÅÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Àμö·Î ÁØ Line ÁÙ¿¡ ´ëÇØ ½ÃÀÛ ¿ÀÇÁ¼Â°ú ³¡ ¿ÀÇÁ¼Â(=ÁÙÀÇ ¹üÀ§)À» Á¶»çÇÑ´Ù. ¿øÇüÀº ´ÙÀ½°ú °°´Ù.

 

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

 

¾Ë°í ½ÍÀº ÁÙ¹øÈ£¸¦ ù ¹ø° Àμö Line¿¡ ³Ñ°ÜÁÖ¸é ±× ÁÙÀÇ ½ÃÀÛ ¿ÀÇÁ¼Â s¿Í ³¡ ¿ÀÇÁ¼Â e¸¦ Á¶»çÇÑ´Ù. Á¶»çµÈ °ª µÎ °³¸¦ ¸®ÅÏÇØ¾ß ÇϹǷΠs, e´Â ·¹ÆÛ·±½º¿©¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¼¼ ¹ø° ÁÙÀÇ ¹üÀ§¸¦ ¾Ë°í ½Í´Ù°í ÇÑ´Ù¸é GetLine(2,s,e)¸¦ È£ÃâÇÑ ÈÄ s¿Í e°ªÀ» º¸¸é µÈ´Ù. ÁÙ¹øÈ£´Â Zero BaseÀ̹ǷΠ¼¼ ¹ø° ÁÙÀÌ 3¹ø ÁÙÀÌ ¾Æ´Ï¶ó 2¹ø ÁÙÀÓÀ» ¸í½ÉÇϵµ·Ï ÇÏÀÚ. ´ÙÀ½°ú °°ÀÌ 4ÁÙÀÌ ÀԷµǾî ÀÖ´Â »óȲ¿¡¼­ ¼¼ ¹ø° ÁÙÀÇ Á¤º¸¸¦ ±¸Çß´Ù.

 

s´Â ½ÃÀÛ ¹®ÀÚ KÀÇ ¿ÀÇÁ¼ÂÀÎ 10ÀÌ Á¶»çµÇ¸ç e´Â ³¡ ¹®ÀÚ A ´ÙÀ½ÀÇ À§Ä¡ 15°¡ ¸®ÅϵȴÙ. ÁÙÀÇ ³¡ À§Ä¡¸¦ ¿Ö ³¡ ¹®ÀÚ À§Ä¡·Î ÇÏÁö ¾Ê°í ±× ´ÙÀ½ À§Ä¡·Î °è»êÇϴ°¡ Çϸé ÀÌ·¸°Ô Çϸé ÁÙÀÇ ±æÀ̸¦ e-s·Î °£´ÜÇÏ°Ô ±¸ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ÁÙ ¸¶Áö¸· ¹®ÀÚÀÇ À§Ä¡´Â ¿µ¹®ÀÎ °æ¿ì e-1, ÇѱÛÀÎ °æ¿ì e-2°¡ µÈ´Ù. ¸¸¾à e¸¦ ÁÙ ³¡ ¹®ÀÚÀÇ ¿ÀÇÁ¼ÂÀ¸·Î °è»êÇϵµ·Ï Çß´Ù°í Çغ¸ÀÚ.

ÀÌ·¸°Ô ÇÏ¸é ³¡ ¹®ÀÚ AÀÇ ¿ÀÇÁ¼ÂÀº e·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖÁö¸¸ ÁÙÀÇ ±æÀÌ´Â e-s+1(¸¶Áö¸· ¹®ÀÚ°¡ ÇѱÛÀ̸é e-s+2)ÀÌ µÇ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô Çصµ º° ¹®Á¦°¡ ¾øÀ» °Í °°¾Æ º¸ÀÌÁö¸¸ Àý´ë·Î ±×·¸Áö ¾Ê´Ù. ÀÌ ¹æ½ÄÀº ¾ÆÁÖ Å« ¹®Á¦°¡ Àִµ¥ ¾Æ¹« ¹®ÀÚµµ ¾ø´Â ºó ÁÙÀº ¾î¶»°Ô 󸮵ǰڴ°¡ »ý°¢Çغ¸ÀÚ. ºó ÁÙÀÇ ±æÀÌ´Â ÀǽÉÇÒ ¿©Áö¾øÀÌ 0ÀÌ µÇ¾î¾ß Çϴµ¥ e-s+1=0ÀÌ µÇ·Á¸é ¿ÞÂÊ ±×¸²Ã³·³ s=e+1ÀÌ µÇ¾î¾ß ÇÑ´Ù.

½ÃÀÛÀÌ ³¡º¸´Ù ´õ µÚÂÊ¿¡ ÀÖ´Â ¸»µµ ¾ÈµÇ´Â »óȲÀÌ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. e°¡ ³¡ ¹®ÀÚ ´ÙÀ½ÀÌ µÇ¾î¾ß ºó ÁÙÀÇ °æ¿ì s¿Í e°¡ °°Àº À§Ä¡·Î Á¶»çµÇ°í ±×·¡¾ß e-s=0ÀÌ µÇ¸ç ÀÌ°ÍÀÌ ÈξÀ ´õ ÀÚ¿¬½º·´´Ù. ¾î¶² ¹üÀ§ A~B¸¦ Ç¥ÇöÇÒ ¶§ ½ÃÀÛÀ§Ä¡ A´Â Æ÷ÇÔµÇ°í ³¡ À§Ä¡ B´Â Æ÷ÇÔµÇÁö ¾Ê´Â °ÍÀÌ ¿øÄ¢ÀûÀÌ¸ç ´õ ÀϹÝÀûÀÌ´Ù. Áï A~B»çÀÌÀÇ ¹üÀ§ rÀ̶õ A<=r<B¸¦ ÀǹÌÇÑ´Ù. ÇÑ ¿¹·Î ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

Rectangle(hdc,10,10,100,100);

 

»ç°¢ÇüÀ» ±×¸®´Â ÄÚµåÀÌ¸ç ½ÃÀÛÁ¡Àº (10,10)ÀÌ°í ³¡ Á¡Àº (100,100)Àε¥ ½ÇÁ¦·Î »ç°¢ÇüÀº (10,10)-(99,99)±îÁö ±×·ÁÁø´Ù. ¿Ö³ÄÇÏ¸é ¹üÀ§ÀÇ ¿øÄ¢¿¡ µû¶ó ³¡Á¡ (100,100)Àº Á¦¿ÜµÇ±â ¶§¹®ÀÌ´Ù. ³¡Á¡ÀÌ Á¦¿ÜµÇÁö ¾ÊÀ¸¸é ¾ÆÁÖ ½É°¢ÇÑ ¹®Á¦°¡ ¿©±â Àú±â¼­ ÅÍÁ® ³ª¿À°Ô µÈ´Ù.

±×·³ ÀÌÁ¦ GetLineÀÌ ¾î¶»°Ô ÁÙÀÇ ¹üÀ§¸¦ Á¶»çÇÏ´ÂÁö Äڵ带 ºÐ¼®Çغ¸ÀÚ. GetLineSub ÇÔ¼ö´Â ¾ÆÁÖ °£´ÜÇÏ´Ù. Àμö·Î Àü´Þ¹ÞÀº p¹øÁö ÁÙÀÇ ³¡À» ã¾Æ Áִµ¥ ÁÙÀÇ ³¡Àº ¿£ÅÍÄÚµå(\r) ¶Ç´Â ¹®¼­ÀÇ ³¡(0) µÑ Áß Çϳª´Ù. p¿¡ ´Ù½Ã ãÀº À§Ä¡¸¦ ¸®ÅÏÇØ¾ß ÇϹǷΠp´Â Æ÷ÀÎÅÍÇüÀÇ ·¹ÆÛ·±½º·Î Àü´ÞÇÑ´Ù.

°³Ç๮ÀÚ¿Í ¹®¼­ÀÇ ³¡Àº ¸®ÅÏ°ªÀ¸·Î ±¸ºÐÇϴµ¥ °³Ç๮ÀÚ¿¡ ÀÇÇØ ÁÙÀÌ ³¡³µÀ¸¸é 1À» ¸®ÅÏÇÏ°í ¹®¼­ÀÇ ³¡À¸·Î ÀÎÇØ ÁÙÀÇ ³¡À» ã¾ÒÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù.

GetLine ÇÔ¼ö´Â ¸ÕÀú Æ÷ÀÎÅÍ º¯¼ö p¸¦ ¹öÆÛÀÇ ¼±µÎ¿¡ ¸ÂÃãÀ¸·Î½á ¹®¼­ÀÇ Ã³À½ºÎÅÍ °Ë»öÀ» ½ÃÀÛÇÏ¸ç ¿øÇÏ´Â ÁÙÀ» ãÀ» ¶§±îÁö p¸¦ Áõ°¡½ÃÄÑ ³ª°£´Ù. Á¦¾îº¯¼ö i´Â ÇöÀç ã°í ÀÖ´Â ÁÙ¹øÈ£À̸ç ÃʱⰪÀº 0ÀÌ´Ù. ·çÇÁ¿¡¼­´Â GetLineSub ÇÔ¼ö·Î p ÀÌÈÄ ÁÙ ³¡À» ã°í ¿£ÅÍÄڵ带 °Ç³Ê¶Ù±â À§ÇØ p¸¦ 2 Áõ°¡½ÃÅ°´Âµ¥ ÀÌ·¸°Ô Çϸé p´Â ´ÙÀ½ ÁÙÀÇ Ã³À½À¸·Î À̵¿µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ÀÌ À§Ä¡°¡ ã°í ÀÖ´Â ÁÙÀ̸é Áï, ÇöÀç ÁøÇàÁßÀÎ i°¡ Line°ú °°À¸¸é ·çÇÁ¸¦ Å»ÃâÇϴµ¥ À̶§ ãÀº ¹øÁö p°¡ ¹Ù·Î ¿øÇÏ´Â ÁÙÀÇ ½ÃÀÛÀ§Ä¡°¡ µÈ´Ù.

¹øÁö¸¦ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù±â À§ÇØ p-buf ¿¬»êÇÏ¿© s¿¡ ´ëÀÔÇÏ¸ç ½ÃÀÛÀ§Ä¡¸¦ ±¸ÇÑ °ÍÀÌ´Ù. ÁÙÀÇ ³¡ À§Ä¡´Â ÀÌ ½ÃÀÛÀ§Ä¡¿¡¼­ ´Ù½Ã ÇÑ ¹ø GetLineSub¸¦ È£ÃâÇÏ¸é µÇ°í eµµ ¿ª½Ã ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù¾î ´ëÀÔÇÑ´Ù. °¡»óÀÇ ¹®¼­¿¡¼­ GetLineÀÌ 2¹ø°(=¼¼ ¹ø°) ÁÙÀ» ¾î¶»°Ô ã´ÂÁö ±×¸²À¸·Î ±×·Á º¸¾Ò´Ù.

·çÇÁÀÇ Áß°£¿¡ ÀÖ´Â Á¶°Ç¹®Àº °Ë»öÁß¿¡ ¹®¼­ ³¡À» ¸¸³µ´ÂÁö °Ë»çÇÑ´Ù. ·çÇÁ ¾È¿¡¼­ ¿øÇÏ´Â ÁÙ±îÁö °¡±â À§ÇØ GetLineSub¸¦ È£ÃâÇÏ°í Àִµ¥ ÀÌ Áß°£¿¡ 0À» ¸¸³µ´Ù´Â °ÍÀº °ð ÇØ´ç ÁÙÀÌ ¾ø´Ù´Â ¾ê±â´Ù. ¿¹¸¦ µé¾î 10¹ø° ÁÙÀ» ã°íÀÚ Çϴµ¥ 7¹ø° ÁÙ¿¡¼­ ¹®¼­°¡ ³¡³­ °æ¿ìÀÌ´Ù. À̶§ GetLineÀº s¿Í e¿¡ -1À» ´ëÀÔÇÑ ÈÄ ¸®ÅÏÇÑ´Ù. È£Ãâ Ãø¿¡¼­´Â GetLine È£Ãâ ÈÄ s°¡ -1Àΰ¡ ¾Æ´Ñ°¡ Á¡°ËÇغ¸¾Æ¾ß Çϴµ¥ ¸¸¾à s°¡ -1À̶ó¸é ¡®´Ï°¡ ã´Â ÁÙÀº ¾ø¾î¡¯¶ó´Â ¶æÀ¸·Î Çؼ®ÇØ¾ß ÇÏ¸ç ±×¿¡ ÇÕ´çÇÑ Á¶Ä¡¸¦ ÃëÇØ¾ß ÇÑ´Ù.

ApiEdit´Â ¹®¼­ Àüü¸¦ ´ÜÀÏ ¹öÆÛ¿¡ ÀúÀåÇÏ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖÁö¸¸ GetLine ÇÔ¼ö¿¡ ÀÇÇØ °¢ ÁÙÀ» °³º°ÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Â ´É·ÂÀ» °¡Áö°Ô µÇ¾ú´Ù. ƯÁ¤ ÁÙ¿¡ ´ëÇؼ­ ¾î¶² 󸮸¦ ÇÏ·Á¸é GetLine ÇÔ¼ö·Î ±× ÁÙÀÇ ¹üÀ§¸¦ Á¶»çÇÒ ¼ö ÀÖ°í s~e»çÀ̸¦ ÁÙ´ÜÀ§ ¹öÆÛÀÎ °Íó·³ ´Ù·ç¸é µÈ´Ù.

ÁÙÀÇ ¹üÀ§¸¦ ãÀ» ¼ö ÀÖ°Ô µÇ¾úÀ¸¹Ç·Î ÀÌÁ¦ ¿©·¯ ÁÙÀÌ ÀÔ·ÂµÈ ¹®¼­¸¦ È­¸éÀ¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ÇÑ ÁÙ¸¸ ÀԷ¹ÞÀ» ¶§ OnPaint´Â TextOut È£Ãâ Çϳª·Î ¹®¼­¸¦ ¸ðµÎ Ãâ·ÂÇÒ ¼ö ÀÖ¾ú´Ù. ±×·¯³ª ¿©·¯ ÁÙÀ» Ãâ·ÂÇÒ ¶§´Â °¢ ÁÙ´ÜÀ§·Î ³ª´©¾î Ãâ·ÂÇØ¾ß ÇÑ´Ù. ù ¹ø° ÁÙ Ãâ·Â, µÎ ¹ø° ÁÙ Ãâ·Â, ¼¼ ¹ø° ÁÙ Ãâ·Â,... ÀÌ·± ½ÄÀ¸·Î ¹®¼­ ³¡±îÁö Ãâ·ÂÇÏ¸é µÈ´Ù. OnPaint ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÈ´Ù.

 

void OnPaint(HWND hWnd)

{

     HDC hdc;

     PAINTSTRUCT ps;

     int l,s,e;

 

     hdc=BeginPaint(hWnd,&ps);

     for (l=0;;l++) {

          GetLine(l,s,e);

          if (s == -1)

               break;

          TextOut(hdc,0,l*LineHeight,buf+s,e-s);

     }

     EndPaint(hWnd,&ps);

}

 

Á¦¾îº¯¼ö lÀÌ Ãâ·ÂÇÒ ÁÙ¹øÈ£Àε¥ 0ºÎÅÍ Áõ°¡Çϸ鼭 °¢ ÁÙÀÇ ½ÃÀÛÀ§Ä¡ s¿Í ³¡ À§Ä¡ e¸¦ ±¸ÇÑ ÈÄ TextOutÀ¸·Î Ãâ·ÂÇÏ¿´´Ù. À̶§ Ãâ·ÂÀ§Ä¡´Â ÁÙ¹øÈ£¿¡ ÁÙ°£(LineHeight)À» °öÇÑ ÁÂÇ¥°¡ µÇ¸ç Ãâ·ÂÇÒ ±æÀÌ´Â ÁÙÀÇ ±æÀÌÀÎ e-s°¡ µÈ´Ù. ·çÇÁ¸¦ µ¹¸é¼­ °¢ ÁÙ¿¡ ´ëÇØ GetLineÀ» È£ÃâÇϴµ¥ s°¡ -1ÀÌ µÇ´Â ¼ø°£¿¡ ¡®À½. ´Ù ±×·È±º. ±×·³ ³¡³» ¹ö¸®ÀÚ¡¯ÇÏ°í ±×¸®±â¸¦ ÁßÁöÇÑ´Ù. OnPaint´Â GetLine°ú ÇÕÀÛÇÏ¿© buf¸¦ °¢ ÁÙº°·Î Å丷Å丷 ³»°í ´ëÀÀµÇ´Â È­¸é À§Ä¡¿¡ Ãâ·ÂÇϱ⸦ ¹®¼­ ³¡±îÁö ¹Ýº¹ÇÏ´Â °ÍÀÌ´Ù. ¿©±â±îÁö ¿¹Á¦¸¦ ÀÛ¼ºÇÏ°í ½ÇÇàÇغ¸ÀÚ.

<Enter>Å°¸¦ ´©¸¦ ¶§ ´ÙÀ½ ÁÙ·Î Àß ³»·Á°¡¸ç ¿©·¯ ÁÙÀ» ÀÔ·ÂÇصµ È­¸é¿¡ Àß Ãâ·ÂµÈ´Ù. ¿©·¯ ÁÙ ÀԷ°ú Ãâ·Â¿¡´Â ¼º°øÇߴµ¥ ¾ÆÁ÷ ij·µÀº °è¼Ó ù ¹ø° ÁÙ¿¡¸¸ ¸Ó¹°·¯ ÀÖ´Ù. ¿Ö³ÄÇϸé ij·µÀÌ Ã¹ ÁÙ ÀÌ»óÀº ¾ÆÁ÷ ÀνÄÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.