¿©·¯ ÁÙÀ» ÀÔ·ÂÇÏ°í Ãâ·ÂÇÒ ¼ö ÀÖ´Â 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·µÀÌ Ã¹ ÁÙ ÀÌ»óÀº ¾ÆÁ÷ ÀνÄÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.