°¡. ¹®´Ü¹øÈ£

¸¶Áø ¿µ¿ªÀ» ¾î·Æ°Ô ¸¸µé¾úÀ¸´Ï ÀÌ ¿µ¿ªÀ» À¯¿ëÇÏ°Ô »ç¿ëÇغ¸µµ·Ï ÇÏÀÚ. ¸ÕÀú ÁÙ¹øÈ£ Ãâ·Â ±â´ÉºÎÅÍ ÀÛ¼ºÇÏÀÚ. ÀÌ ±â´ÉÀº »ç¿ëÀÚÀÇ Á¶ÀÛÀÌ ÇÊ¿ä¾ø±â ¶§¹®¿¡ ´Ù¸¥ ±â´Éº¸´Ù ±¸ÇöÇϱⰡ ½±´Ù. ÁÙ¹øÈ£¸¦ Ç×»ó °¡Áö°í ÀÖ´Ù°¡ ¸¶Áø¿µ¿ª¿¡ »Ñ·ÁÁֱ⸸ ÇÏ¸é µÈ´Ù. ÁÙ¹øÈ£ Ãâ·ÂÀ» À§ÇØ ÇÊ¿äÇÑ Àü¿ªº¯¼ö¸¦ ¼±¾ðÇÏ°í ÃʱâÈ­ÇÑ´Ù.

 

BOOL bShowLineNum;

HFONT hLineNumFont;

COLORREF NumColor;

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     bShowLineNum=TRUE;

     hLineNumFont=CreateFont(12,0,0,0,0,0,0,0,HANGEUL_CHARSET,3,2,1,

          VARIABLE_PITCH | FF_MODERN,"±¼¸²");

     NumColor=RGB(0,0,0);

 

     return TRUE;

}

 

void OnDestroy(HWND hWnd)

{

     ....

     DeleteObject(hLineNumFont);

}

 

ÁÙ¹øÈ£¸¦ Ãâ·ÂÇÏ´Â ±â´ÉÀº ÆíÁý±â¿¡ ¹Ýµå½Ã ÇÊ¿äÇÑ Çʼö ±â´ÉÀº ¾Æ´Ï¸ç ¼Ò½º ÄÚµå ¿Ü¿¡´Â ¿ÀÈ÷·Á ´õ ÁöÀúºÐÇØ º¸ÀÏ ¼öµµ ÀÖ´Ù. »ç¿ëÀÚÀÇ ÃëÇâ¿¡ µû¶ó ¿øÇÒ ¶§¸¸ ÁÙ¹øÈ£¸¦ º¼ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ bShowLineNum º¯¼ö¸¦ ¼±¾ðÇÏ¿´´Ù. ÀÌ º¯¼ö°¡ TRUEÀÏ ¶§¸¸ ¸¶Áø¿¡ ÁÙ¹øÈ£¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù. Å×½ºÆ®¸¦ À§ÇØ OnCreate¿¡¼­ ÀÌ º¯¼ö¸¦ TRUE·Î ÃʱâÈ­ÇÏ¿´´Ù.

hLineNumFont´Â ÁÙ¹øÈ£ Ãâ·Â¿¡ »ç¿ëÇÒ ÆùÆ®ÀÌ¸ç ±¼¸²Ã¼ÀÇ 12Çȼ¿ Å©±â·Î »ý¼ºÇß´Ù. ÁÙ¹øÈ£´Â ¾Ë¾Æº¼ ¼ö ÀÖÀ» Á¤µµ¸é µÇ°í ¸¶Áø¿µ¿ªÀÌ Á¼±â ¶§¹®¿¡ ±»ÀÌ Å« ÆùÆ®¸¦ ¾µ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ÆùÆ®·Î ¸¶Áø¿µ¿ª¿¡ ÁÙ¹øÈ£¸¦ Ãâ·ÂÇÒ °ÍÀ̸ç ÇÁ·Î±×·¥À» Á¾·áÇϱâ Á÷ÀüÀÎ OnDestroy¿¡¼­ ÆùÆ®¸¦ ÇØÁ¦ÇÏ¿´´Ù. NumColor´Â ÁÙ¹øÈ£ÀÇ »ö»óÀÌ¸ç °ËÁ¤»öÀ¸·Î ÃʱâÈ­ÇÏ¿´´Ù.

¸¶Áø ¿µ¿ª¿¡ Ãâ·ÂÇÒ ÁÙ¹øÈ£¶ó´Â °ÍÀº pLine ¹è¿­ÀÇ ÁÙ¹øÈ£¿Í´Â ´Ù¸¥ °³³äÀÌ´Ù. pLineÀº Á¤·Ä °á°ú ÇÑ Çà¿¡ Ãâ·ÂµÇ¾î¾ß ÇÒ ÁÙÀÇ ¹üÀ§¸¦ °¡Áö°í Àִµ¥ ¹®¼­ÀÇ ÁÙ¹øÈ£´Â °³ÇàÄڵ忡 ÀÇÇØ °­Á¦·Î °³ÇàµÈ ¹®´ÜÀ» ÀǹÌÇÑ´Ù. ¹®´Ü¹øÈ£°¡ ¹®¼­»óÀÇ °íÀ¯ÇÑ ÁÙ¹øÈ£À̹ǷΠ¸¶Áø¿µ¿ª¿¡´Â ¹®´Ü¹øÈ£¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù.

±×·±µ¥ ÇöÀç ApiEditÀÇ ±¸Á¶·Î´Â Á¤·Ä °á°ú »ý¼ºµÈ ÁÙ¹øÈ£¸¸ ÀÖÀ» »Ó ¹®´Ü¹øÈ£´Â µû·Î °¡Áö°í ÀÖÁö ¾Ê´Ù. ±×·¸´Ù°í Çؼ­ ÀÌ Á¤º¸¸¦ ½Ç½Ã°£À¸·Î ±¸ÇØ Ãâ·ÂÇÏ°íÀÚ ÇÑ´Ù¸é ¹«Ã´ ¼Óµµ°¡ ´À·ÁÁö¹Ç·Î Á¤·ÄÇÒ ¶§ pLine ¹è¿­¿¡ ¹®´Ü¹øÈ£¸¦ °°ÀÌ ÀúÀåÇϵµ·Ï ±¸Á¶Ã¼¸¦ È®ÀåÇÏÀÚ.

 

struct tagLine

{

     int Start;

     int End;

     int nPara;

     int nLine;

};

 

¹®´Ü¹øÈ£¸¦ ±â¾ïÇÒ nPara ¸â¹ö¿Í ¹®´Ü ³»ÀÇ ÁÙ¹øÈ£¸¦ ±â¾ïÇÒ nLine ¸â¹ö°¡ Ãß°¡µÇ¾ú´Ù. ÀÌ ¸â¹ö´Â UpdateLineInfo¿¡¼­ Á¤·ÄÇÒ ¶§ °°ÀÌ °è»êµÈ´Ù.

 

void UpdateLineInfo()

{

     int l,s,e;

     int nPara, nLine=0;

 

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

          GetLine(l,s,e);

 

          pLine[l].Start=s;

          pLine[l].End=e;

          pLine[l].nPara=nPara;

          pLine[l].nLine=nLine;

          if (s==-1) {

              TotalLine=l;

              break;

          }

 

          if (buf[e]==¡®\r¡¯) {

              nPara++;

              nLine=0;

          } else {

              nLine++;

          }

     }

}

 

ÃÖÃÊ nPara´Â 0À̸ç nLineµµ 0ÀÌ´Ù. Á¤·ÄÀ» ÁøÇàÇÏ´Ù°¡ °³ÇàÄڵ带 ¸¸³ª¸é ¹®´Ü¹øÈ£¸¦ Çϳª Áõ°¡½ÃÅ°°í nLineÀº 0ÀÌ µÈ´Ù. °³ÇàÄڵ尡 ¾Æ´Ñ ÁÙ ³¡À̸é, Áï ÀÚµ¿°³ÇàµÈ ÁÙÀ̸é nLine¸¸ Áõ°¡½ÃÅ°°í nPara´Â °ªÀ» À¯ÁöÇÑ´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ ¾î¶»°Ô ÁÙ¹øÈ£¿Í ¹®´Ü¹øÈ£°¡ °è»êµÇ´ÂÁö º¸ÀÚ.

¹è¿­ ÷ÀÚ´Â È­¸é»óÀÇ ÁÙ¹øÈ£°¡ µÇ¸ç nPara´Â ¹®¼­»óÀÇ ¹®´Ü¹øÈ£°¡ µÈ´Ù. pLine ¹è¿­¿¡ Ãâ·ÂÇÒ ¹®´Ü¹øÈ£¸¦ ÀÌ¹Ì °è»êÇصξúÀ¸¹Ç·Î ÀÌÁ¦ ÀÌ ¹øÈ£¸¦ ¸¶Áø¿µ¿ª¿¡ Ãâ·ÂÇϱ⸸ ÇÏ¸é µÈ´Ù. ¸¶Áø¿µ¿ª¿¡ ¹®´Ü¹øÈ£¸¦ Ãâ·ÂÇÏ´Â ÀÏÀº °¢ ÁÙÀ» Ãâ·ÂÇÏ´Â DrawLine¿¡¼­ ÇÑ´Ù. DrawLine¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÏÀÚ.

 

int DrawLine(HDC hdc, int Line)

{

     ....

     TCHAR szLine[10];

     UINT OldAlign;

     UINT OldBkMode;

     HFONT OldFont;

     int OldExtra;

     ....

     if (MarginWidth != 0) {

          ....

          if (bShowLineNum && pLine[Line].nLine==0) {

              wsprintf(szLine,"%d",pLine[Line].nPara+1);

              OldAlign=SetTextAlign(hdc,TA_RIGHT);

              OldBkMode=SetBkMode(hdc,TRANSPARENT);

              SetTextColor(hdc,NumColor);

              OldFont=(HFONT)SelectObject(hdc,hLineNumFont);

              OldExtra=SetTextCharacterExtra(hdc,-1);

 

              TextOut(hdc,MarginWidth-4,(FontHeight-10)/2,szLine,lstrlen(szLine));

             

              SetTextCharacterExtra(hdc,OldExtra);

              SelectObject(hdc,OldFont);

              SetTextAlign(hdc,OldAlign);

              SetBkMode(hdc,OldBkMode);

          }

     }

 

¹®´Ü¹øÈ£°¡ Ãâ·ÂµÇ±â À§Çؼ­´Â ¼¼ °¡Áö Á¶°ÇÀÌ ¸Â¾Æ¾ß ÇÑ´Ù. ÀÏ´Ü ÁÙ¹øÈ£¸¦ Ãâ·ÂÇÒ ¸¶ÁøÀÌ ÀÖ¾î¾ß ÇÏ°í bShowLineNumÀÌ TRUE¿©¾ß¸¸ ¹®´Ü¹øÈ£°¡ Ãâ·ÂµÈ´Ù. ¶ÇÇÑ °¢ ¹®´ÜÀÇ ¼±µÎ¿¡¸¸ ÁÙ¹øÈ£°¡ Ãâ·ÂµÇ¸ç ÀÚµ¿°³ÇàµÈ ÁÙ¿¡´Â ¹øÈ£¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù. nLineÀÌ 0ÀÏ ¶§ ÀÌ ÁÙÀÌ ¹®´ÜÀÇ ¼±µÎÀÌ´Ù.

Ãâ·Â¹®Àº ¾ÆÁÖ °£´ÜÇÏ´Ù. ¿À¸¥ÂÊÀ¸·Î Á¤·ÄÇϸç Åõ¸í ¹è°æÀ» »ç¿ëÇÏ¿© ÁÙ¹øÈ£ ¹®ÀÚ¿­À» ¸¶Áø¿µ¿ª¿¡ Ãâ·ÂÇÏ¿´´Ù. ÁÙ¹øÈ£´Â pLine ¹è¿­ÀÇ nPara+1À» ¹®ÀÚ¿­·Î º¯È¯ÇÏ¿© Ãâ·ÂÇÏ¸é µÇ´Âµ¥ nPara°¡ Zero BaseÀ̹ǷΠ1À» ´õÇØ¾ß ÇÑ´Ù. °¡±ÞÀû ¸¶Áø¿µ¿ªÀ» ³Ð°Ô Â÷ÁöÇÏÁö ¾Êµµ·Ï Çϱâ À§ÇØ -1ÀÚ°£À» ÁÖ¾úÀ¸¸ç ¸¶ÁøÆø°ú´Â 4¸¸Å­ÀÇ ¿©À¯¸¦ ÁÖ¾ú´Ù. ¸¶ÁøÆø¿¡¼­ 4¸¦ »°Áö¸¸ ½ÇÁ¦·Î´Â ¸¶ÁøÀÇ ¿©À¯ºÐ°ú Å׵θ®ÆøÀÌ Àֱ⠶§¹®¿¡ ¿À¸¥ÂÊ ³¡°ú 1Çȼ¿¹Û¿¡ ¶³¾îÁöÁö ¾Ê´Â´Ù. ¸¶ÁøÀÇ ±¸Á¶¸¦ ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

MarginWidth º¯¼ö°¡ °¡¸®Å°´Â ÁÂÇ¥´Â ¸¶Áø ´ÙÀ½ÀÇ º»¹®Ãâ·Â ¿µ¿ªÀÌ´Ù. ÇÑ Ä­ ¿ÞÂÊ(-1)Àº º»¹®°ú ¸¶Áø°úÀÇ ±¸ºÐÀ» À§ÇÑ ¿©¹éÀε¥ OnPaint¿¡¼­ º»¹®ÀÇ ¹è°æ»öÀ¸·Î ä¿öÁø´Ù. ´Ù½Ã ÇÑ Ä­ ¿ÞÂÊ(-2)Àº ¸¶ÁøÀÇ °æ°è¼± ¿µ¿ªÀ̸ç MarColor2·Î ¼±ÀÌ ±×¾îÁø´Ù. °æ°è¼±ÀÇ ¾ÈÂÊÀÎ -3ºÎÅÍ°¡ ¸¶Áø¿µ¿ªÀ̸ç MarColor1·Î ä»öµÈ´Ù. °æ°è¼±°ú ÁÙ¹øÈ£°¡ ³Ê¹« ºÙÁö ¾Êµµ·Ï ´Ù½Ã 1Çȼ¿ ¿©¹éÀ» ³Ö¾úÀ¸¸ç ±×·¡¼­ ÁÙ¹øÈ£ Ãâ·Â ÁÂÇ¥´Â MarginWidth-4°¡ µÇ¾ú´Ù.