³ª. ¼±Åÿµ¿ªÀÇ »ö»ó

HideSelType ¿É¼ÇÀº Æ÷Ä¿½º¸¦ ÀÒ¾úÀ» ¶§ ¼±Åÿµ¿ªÀ» ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤Çϴµ¥ È帮°Ô Ç¥½ÃÇϰųª ¾Æ´Ï¸é ¾Æ¿¹ ¼±Åÿµ¿ªÀ» ¼û±æ ¼ö ÀÖ´Ù. ÀÌ ¿É¼ÇÀº º¸ÅëÀÇ °æ¿ì¶ó¸é º° ¹®Á¦°¡ ¾øÁö¸¸ ã±â ´ëÈ­»óÀÚ°¡ °Ë»ö°á°ú¸¦ º¸¿©ÁÙ ¶§´Â ¹®Á¦°¡ µÈ´Ù. ã±â ´ëÈ­»óÀÚ°¡ ¶° ÀÖ´Â µ¿¾È¿¡´Â ApiEdit°¡ Æ÷Ä¿½º¸¦ °¡Áø °ÍÀÌ ¾Æ´Ï¹Ç·Î ÀÌ ¿É¼ÇÀÇ ¿µÇâÀ» ¹Þ¾Æ °Ë»ö°á°ú°¡ È帮°Ô º¸ÀÏ °ÍÀÌ´Ù. È帮°Ô¶óµµ º¸ÀÌ¸é ´ÙÇàÀε¥ HideSelTypeÀÌ 0ÀÌ¸é ¾Æ¿¹ °Ë»ö°á°ú°¡ º¸ÀÌÁö ¾Ê°Ô µÉ °ÍÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ã±â¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀº HideSelType ¼³Á¤»óÅÂ¿Í Æ÷Ä¿½º¿¡ »ó°ü¾øÀÌ Ç×»ó º¸À̵µ·Ï ÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ Á÷Á¢ ¼±ÅÃÇÑ ºí·Ï°ú ã±â ±â´É¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀÌ ±¸ºÐµÇ¾î¾ß ÇÑ´Ù´Â ¾ê±âÀε¥ ApiEdit´Â ´Ü ÇϳªÀÇ ¼±Åÿµ¿ª¸¸ Çã¿ëÇϹǷΠºí·Ï ÀÚü¸¦ ´Ù¸£°Ô Ãë±ÞÇÒ ¼ö´Â ¾ø´Ù. ´Ù¸¸ Ç÷¡±×¸¦ µÎ°í ã±â¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀº ´Ù¸£°Ô ±×¸®µµ·Ï ÇÒ ¼ö´Â ÀÖ´Ù. ´ÙÀ½ Ç÷¡±×¸¦ Ãß°¡ÇÏ°í »ý¼ºÀÚ¿¡¼­ FALSE·Î ÃʱâÈ­ÇÑ´Ù.

 

class CApiEdit

{

     ....

     BOOL bFindSelect;

 

CApiEdit::CApiEdit()

{

     bFindSelect=FALSE;

}

 

bFindSelect´Â Áö±Ý ¼±ÅÃµÈ ºí·ÏÀÌ Ã£±â¿¡ ÀÇÇØ ¼±ÅÃµÈ °ÍÀÎÁö »ç¿ëÀÚ°¡ ¼±ÅÃÇسõÀº °ÍÀÎÁö¸¦ ±¸ºÐÇÏ´Â Ç÷¡±×ÀÌ´Ù. ÀÌ °ªÀÌ TRUEÀ̸é ã±â¿¡ ÀÇÇØ ºí·ÏÀÌ ¼±ÅÃµÈ °ÍÀÌ´Ù. ºí·ÏÀ» ¼±ÅÃÇÏ´Â SetSelect ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ¿© ¼±Åÿµ¿ªÀÌ Ã£±â¿¡ ÀÇÇÑ ¼±ÅÃÀÎÁö¸¦ Àμö·Î Àü´Þ¹Þµµ·Ï ÇÑ´Ù.

 

void CApiEdit::SetSelect(int s, int e, BOOL bFind)

{

     if (s <= doclen && e <= doclen) {

          SelStart=s;

          if (e == -1)

              e=doclen;

          SelEnd=e;

     }

     off=SelEnd;

     SetCaret();

    if (bFind) {

        bFindSelect=TRUE;

    }

     Invalidate(-1);

}

 

ÀÌ ÇÔ¼ö´Â ÇÑÂü ¿¾³¯¿¡ GetSelect ÇÔ¼ö¸¦ ¸¸µé ¶§ °°ÀÌ ¸¸µé¾î µÎ¾ú´ø °ÍÀ̸ç FindText ÇÔ¼ö¿¡¼­ óÀ½ »ç¿ëÇߴµ¥ ¹ú½á ¿øÇüÀÌ ¹Ù²î¾ú´Ù. ÀÌ·² ÁÙ ¾Ë¾ÒÀ¸¸é ¾Æ¿¹ ¸¸µé¾î µÎÁö ¸»°É ¾à°£ ¾ï¿ïÇÏ´Ù. Àμö·Î Àü´ÞµÈ bFind¸¦ bFindSelect ¸â¹öº¯¼ö¿¡ ÀúÀåÇÒ »Ó º°´Ù¸¥ ÀÏÀº ÇÏÁö ¾Ê´Â´Ù. FindText¿¡¼­ ã±â¿¡ ¼º°øÇÑ ÈÄ ÀÌ Ç÷¡±×¸¦ TRUE·Î º¯°æÇÏ¿© Áö±Ý ¼±ÅÃÇÑ ºí·ÏÀº ã±â¿¡ ÀÇÇØ ¼±ÅÃµÈ °ÍÀÓÀ» Ç¥½ÃÇسõ´Â´Ù.

 

BOOL CApiEdit::FindText(int nPos, TCHAR *what, DWORD dwFlag)

{

     ....

     if (pFound) {

          SetSelect(pFound-buf,pFound-buf+lstrlen(what),TRUE);

          return TRUE;

     }

     return FALSE;

}

 

»ç¿ëÀÚ°¡ Á÷Á¢ ºí·ÏÀ» ¼±ÅÃÇßÀ¸¸é bFindSelect´Â FALSE °ªÀ» °¡Áú °ÍÀ̸ç FindText¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀ̸é bFindSelect°¡ TRUE°¡ µÉ °ÍÀÌ´Ù. ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÏ´Â °÷Àº ¼±Åÿµ¿ªÀ» Á÷Á¢ ±×¸®´Â DrawLine ÇÔ¼öÀÌ´Ù.

 

          if (bInSel && (GetFocus()==hWnd || HideSelType!=0 || bFindSelect)) {

           if (bFindSelect) {

               fore=cSelFore;

               back=cSelBack;

           } else {

                   fore=SelFore;

                   back=SelBack;

           }

          } else {

              if (len==0) {

          ....

 

¼±Åÿµ¿ªÀÇ »ö»óÀ» Àû¿ëÇÒ Á¶°Ç¿¡ bFindSelect°¡ Çϳª ´õ Ãß°¡µÇ¾ú´Ù. Æ÷Ä¿½º¸¦ °¡Áö°í Àְųª ¼±Åÿµ¿ª ¼û±è »óÅ°¡ ¾Æ´Ï°Å³ª °Ë»ö¿¡ ÀÇÇØ Ã£Àº ¹®ÀÚ¿­ÀÌ¸é ¼±Åÿµ¿ª »ö»óÀ¸·Î ºí·ÏÀ» ±×¸°´Ù. Áï Æ÷Ä¿½º°¡ ¾ø°í HideSelTypeÀÌ 0ÀÌ´õ¶óµµ bFindSelect°¡ TRUEÀ̱⸸ ÇÏ¸é ¼±Åÿµ¿ªÀ» Á¦´ë·Î(È帮°Ô Ç¥½ÃÇÏÁö ¾Ê°í) ±×¸®µµ·Ï ÇÏ¿´´Ù. µû¶ó¼­ ã±â¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀº Ç×»ó Á¦´ë·Î º¸ÀÌ°Ô µÈ´Ù. ¿©·¯ °³ÀÇ Á¶°ÇÀÌ º¹ÇÕÀûÀ¸·Î Æò°¡µÇ±â ¶§¹®¿¡ Á¶±Ý º¹ÀâÇغ¸ÀÌÁö¸¸ Á¶±Ý¸¸ »ý°¢Çغ¸¸é ´ç¿¬ÇÑ Á¶°ÇµéÀÌ´Ù.

bFindSelect Ç÷¡±×´Â ¾îµð±îÁö³ª ÀÓ½ÃÀûÀÎ »óÅÂÀ̹ǷΠ»ç¿ëÀÚ°¡ Á÷Á¢ ¼±ÅÃÀ» ÇÒ ¶§´Â Áï½Ã ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù. ±×·¡¾ß¸¸ »ç¿ëÀÚÀÇ ºí·ÏÀÌ HideSelType ¿É¼Ç°ªÀ» Á¦´ë·Î ¹Ý¿µÇÑ´Ù. ÀÌ Ç÷¡±×¸¦ ÇØÁ¦ÇÏ´Â ½Ã±â´Â µÎ ±ºµ¥°¡ ÀÖ´Ù.

 

void CApiEdit::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)

{

     ....

    bFindSelect=FALSE;

     bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

 

void CApiEdit::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)

{

     ....

     if (fDown==FALSE)

          return;

 

    bFindSelect=FALSE;

     ....

 

¸¶¿ì½º ¹öÆ°À» Ŭ¸¯Çϱ⸸ ÇÏ¸é °Ë»ö ¹®ÀÚ¿­ »óÅ°¡ ÇØÁ¦µÈ´Ù. Å°º¸µå·Î ¾î¶² ¹®ÀÚ¶óµµ ÀÔ·ÂÇϸé ÇØÁ¦µÇ´Âµ¥ ¿¹¸¦ µé¾î ã±â¸¦ ÇÑ »óÅ¿¡¼­ ij·µÀ» ¿òÁ÷À̰ųª ´Ù¸¥ ¹®ÀÚ¸¦ ÀÔ·ÂÇϸé ÀÌ ºí·ÏÀº Áï½Ã ÇØÁ¦µÈ´Ù. µÎ ÇÔ¼ö´Â »ç¿ëÀÚÀÇ Á÷Á¢ÀûÀÎ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö¶ó´Â Á¡¿¡¼­ °øÅëÀûÀÌ´Ù. ÀÌÈÄ ¼±ÅõǴ ºí·ÏÀº HideSelType ¼³Á¤´ë·Î Ç¥½ÃµÉ °ÍÀÌ´Ù.