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 ¼³Á¤´ë·Î Ç¥½ÃµÉ °ÍÀÌ´Ù.