³ª. »õ ¹®¼­

ÆÄÀÏ ÀÔÃâ·Â ±â´ÉÀÌ µé¾î°¡¸é ¹®¼­¸¦ ¸¸µé´ø Áß¿¡ ÆíÁýÀ» Ãë¼ÒÇÒ ¼öµµ ÀÖ°í ´Ù¸¥ ¹®¼­¸¦ ºÒ·¯ ¿Ã ¼öµµ ÀÖ´Ù. À̶§¸¶´Ù ApiEdit´Â »õ ¹®¼­¸¦ ¸¸µé±â À§ÇØ ÃʱâÈ­µÇ¾î¾ß ÇÑ´Ù. Áö±Ý±îÁö´Â ¸ðµç ÃʱâÈ­¸¦ OnCreate¿¡¼­ Çß¾ú´Âµ¥ ÄÁÆ®·Ñ »ý¼º ÈÄ ¹®¼­¸¦ »õ·Î ¸¸µé°Å³ª ±âÁ¸ ¹®¼­¸¦ Àоî¿Ã ¼ö ¾ø¾ú±â ¶§¹®¿¡ º° ¹®Á¦°¡ ¾ø¾ú´Ù. ÇÏÁö¸¸ ÀÌÁ¦´Â ÆíÁýÁß¿¡ »õ ¹®¼­¸¦ ¸¸µé ¼ö Àֱ⠶§¹®¿¡ OnCreate¿¡ ÀÖ´Â ÃʱâÈ­ ÄÚµå Áß ÀϺδ ½ÇÇàÁß¿¡µµ È£ÃâµÇ¾î¾ß ÇÑ´Ù.

Áï, ÄÁÆ®·Ñ Àü¿ªÀûÀÎ ÃʱâÈ­¿Í ¹®¼­ÆíÁýÀ» À§ÇÑ ÃʱâÈ­ Äڵ尡 ³ª´©¾îÁ®¾ß ÇÑ´Ù. ¹®¼­¿Í °ü·ÃµÈ ÃʱâÈ­ Äڵ带 º°µµÀÇ ÇÔ¼ö¿¡ ÀÛ¼ºÇÏ°í »õ ¹®¼­¸¦ ¸¸µé ¶§¸¶´Ù ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ¹Ù²Ù¾î º¸ÀÚ. InitDocÀ̶ó´Â ¸â¹öÇÔ¼ö¸¦ Ãß°¡ÇÏ°í OnCreate¿¡ ÀÖ´Â ÃʱâÈ­ ÄÚµå Áß ¹®¼­¿Í °ü·ÃµÈ Äڵ带 ¸ðµÎ °¡Á® ¿Â´Ù. ApiEdit.h¿¡ ÇÔ¼öÀÇ ¿øÇüÀ» ¼±¾ðÇÏ°í ApiEdit.cpp¿¡ ÇÔ¼öÀÇ Äڵ带 ÀÛ¼ºÇÏ¸é µÈ´Ù. ¸â¹öÇÔ¼ö°¡ Ãß°¡µÉ ¶§ Çì´õ ÆÄÀÏ¿¡ ¿øÇü ¼±¾ðÀ» »©¸ÔÁö ¸»µµ·Ï ÇÏÀÚ.

 

void CApiEdit::InitDoc()

{

     int i;

 

    if (buf) {

        free(buf);

    }

     buflen=1024;

     buf=(TCHAR *)malloc(buflen);

     memset(buf,0,buflen);

     doclen=0;

     Linelen=100;

    if (pLine) {

        free(pLine);

    }

     pLine=(tagLine *)malloc(sizeof(tagLine)*Linelen);

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

          pLine[i].Start=-1;

     }

     bReadOnly=FALSE;

     bOvr=FALSE;

     off=0;

     PrevX=0;

     bLineEnd=FALSE;

     xMax=1024;

     xPos=0;

     yPos=0;

     SelStart=SelEnd=0;

     bModified=FALSE;

     ClearBookmark();

     UpdateLineInfo();

     UpdateScrollInfo();

    if (GetFocus()==hWnd) {

        SetCaret();

    }

    Invalidate(-1);

}

 

»õ·Î ¸¸µé¾îÁö´Â ¹®¼­À̹ǷΠoff´Â ´ç¿¬È÷ ¹®¼­ óÀ½ÀÎ 0À¸·Î º¯°æµÇ¾î¾ß ÇÏ¸ç ºÏ¸¶Å©´Â ¸ðµÎ ÇØÁ¦ÇÏ°í ½ºÅ©·Ñ À§Ä¡µµ ¹®¼­ Á»ó´ÜÀ¸·Î º¯°æÇØ¾ß ÇÑ´Ù. º¸´Ù½ÃÇÇ OnCreate¿¡ ÀÖ´Â ÄÚµå Áß ¹®¼­ ÃʱâÈ­¿Í °ü·ÃµÈ ÄÚµåµéÀÌ ÀÌ ÇÔ¼ö·Î ¸ðµÎ ¿Å°ÜÁ³´Ù. ¿Å°ÜÁø ÄÚµå ¿Ü¿¡ Ãß°¡µÈ Äڵ嵵 Àִµ¥ ±½°Ô Ç¥½ÃµÈ ÄÚµå´Â »õ·Î Ãß°¡µÈ ÄÚµåÀÌ´Ù.

Àü¿¡´Â ¹öÆÛ¸¦ ÇÑ ¹ø ÇÒ´çÇسõ°í °è¼Ó »ç¿ëÇß¾ú´Âµ¥ ÀÌÁ¦´Â ¹®¼­°¡ ¸¸µé¾îÁú ¶§¸¶´Ù ÇÒ´çÀ» ÇØÁ¦ÇÏ°í ´Ù½Ã ÇÒ´çÇØ¾ß ÇÒ ÇÊ¿ä°¡ »ý°å´Ù. ÀÌÀü ¹®¼­°¡ 10MB Å©±â¶ó°í Çؼ­ »õ·Î ¸¸µå´Â ¹®¼­µµ À̸¸Å­ÀÇ ¸Þ¸ð¸®°¡ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ buf°¡ ÇÒ´çµÇ¾î ÀÖÀ¸¸é ¸ÕÀú ÇØÁ¦ÇÏ°í ÀÛÀº Å©±â·Î ´Ù½Ã ÇÒ´çÇϵµ·Ï Çß´Ù. ¹®¼­°¡ »õ·Î ¸¸µé¾îÁö¹Ç·Î ij·µµµ ´ç¿¬È÷ Á»ó´ÜÀ¸·Î À̵¿ÇØ¾ß ÇÑ´Ù. Á¦ÀÏ ³¡¿¡ ÀÖ´Â Invalidate¹®Àº È­¸éÀ» ¿ÏÀüÈ÷ Áö¿ì°í ´Ù½Ã ±×¸®µµ·Ï Çϴµ¥ OnCreate¿¡¼­´Â ÀÌ Ã³¸®°¡ ÇÊ¿ä¾ø¾úÁö¸¸ ¹®¼­ÆíÁýÁß¿¡ ÃʱâÈ­¸¦ ÇÏ´Â °ÍÀ̹ǷΠÀÌÀü ¹®¼­ ³»¿ëÀ» È­¸é¿¡¼­ Áö¿ö¾ß ÇÑ´Ù.

OnCreate´Â ¸¹Àº ¾çÀÇ Äڵ带 InitDoc¿¡°Ô »¯±â°í ÀÚ½ÅÀº InitDocÀ» È£ÃâÇÔÀ¸·Î½á »ý¼º½ÃÀÇ ÃʱâÈ­¸¦ ´ë½ÅÇÑ´Ù.

 

BOOL CApiEdit::OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     HDC hdc;

     TEXTMETRIC tm;

 

     MySetImeMode(hWnd,TRUE);

     bComp=FALSE;

     hdc=GetDC(hWnd);

     GetTextMetrics(hdc,&tm);

     FontHeight=tm.tmHeight;

     LineRatio=120;

     LineHeight=int(FontHeight*LineRatio/100);

     FontWidth=tm.tmAveCharWidth;

     PrepareCharWidth(hdc);

     ReleaseDC(hWnd,hdc);

     nWrap=2;

     bNoFirstSpace=FALSE;

     TabWidth=4;

     TabSize=FontWidth*TabWidth;

     bCapture=FALSE;

     HideSelType=1;

     MarginWidth=25;

     MarColor1=RGB(192,192,192);

     MarColor2=RGB(160,160,160);

     bShowLineNum=FALSE;

     NumColor=RGB(0,0,0);

     MarkColor=RGB(255,255,0);

     bShowTab=FALSE;

     bShowEnter=FALSE;

     bShowSpace=FALSE;

     ShowTabType=1;

     ShowEnterType=1;

     ShowSpaceType=0;

     CodeColor=RGB(128,128,128);

     nShowCurLine=0;

     CurColor=RGB(255,255,0);

     bSelLine=FALSE;

     SelStartLine=0;

     bDragSel=FALSE;

     bWantTab=TRUE;

     SumDelta=0;

     bHideCaret=FALSE;

    InitDoc();

 

     return TRUE;

}

 

³²Àº ÄÚµå´Â ÁÙ°£, ÅÇÅ©±â µîÀÇ º¯¼ö ÃʱâÈ­¿Í ÆùÆ® »ý¼º, ¹®ÀÚÆø °è»ê µî°ú °°ÀÌ ¹®¼­¿Í Á÷Á¢ÀûÀÎ »ó°üÀÌ ¾ø´Â ÄÚµåµé»ÓÀÌ´Ù. ÀÌ ÄÚµåµéµµ Àá½Ã ÈÄ¸é ´Ù¸¥ ¼³Á¤ º¯°æ ÇÔ¼ö¿¡°Ô °ñ°í·ç ³ª´©¾îÁÖ°Ô µÉ °ÍÀÌ´Ù. È£½ºÆ®¿¡¼­ InitDoc¸¸ È£ÃâÇÏ¸é ¾ðÁ¦µçÁö »õ ¹®¼­¸¦ ÆíÁýÇÒ ¼ö ÀÖ´Ù.