¿©±â¼ ¸»ÇÏ´Â °Ë»ö °ü·Ã ¿É¼ÇÀº ´ë¼Ò¹®ÀÚ ±¸ºÐ, °Ë»ö ¹æÇâ µîÀÇ °Ë»ö½Ã Àû¿ëµÇ´Â ¿É¼ÇÀÌ ¾Æ´Ï´Ù. °Ë»ö ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â ¿É¼Ç(FindFlag)µéÀº ã±â/¹Ù²Ù±â ´ëÈ»óÀÚ¿¡¼ Á÷Á¢ º¯°æÇÏ°í Á¶Á¤ÇÒ ¼ö ÀÖÁö¸¸ ¿©±â¼ ¸»ÇÏ´Â °Ë»ö °ü·Ã ¿É¼ÇµéÀº ã±â ´ëÈ»óÀÚ°¡ ¿¸®±â Àü¿¡ Àû¿ëµÇ¾î¾ß ÇÏ´Â °ÍµéÀÌ´Ù. ã±â ´ëÈ»óÀÚ ÃʱâÈ¿Í °ü·ÃµÈ ¿É¼ÇÀ̱⠶§¹®¿¡ ã±â ´ëÈ»óÀÚ¿¡¼´Â ÀÌ ¿É¼ÇÀ» Á¶Á¤ÇÒ ¼ö ¾øÀ¸¸ç ±âº» ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ ÀÌ ¿É¼ÇµéÀ» Á¶Á¤ÇØ¾ß ÇÑ´Ù. SOption ±¸Á¶Ã¼¿¡ µÎ °³ÀÇ °Ë»ö °ü·Ã ¿É¼Ç º¯¼ö°¡ Æ÷ÇԵǾî ÀÖ´Ù.
struct SOption
{
....
BOOL bInitFind;
BOOL bInitNextFind;
void SOption::Init()
{
bInitFind=TRUE;
bInitNextFind=FALSE;
ÀÌ µÎ ¿É¼ÇÀº ¾à°£ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù. bInitFind´Â ã±â ´ëÈ»óÀÚÀÇ Ã£À» ³»¿ë ÄÞº¸¹Ú½º¸¦ ÇöÀç ij·µ À§Ä¡ÀÇ ´Ü¾î ¶Ç´Â ¼±Åÿµ¿ªÀ¸·Î ÃʱâÈÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ TRUEÀ̸é ã±â ´ëÈ»óÀÚ°¡ ¿¸± ¶§ ij·µ À§Ä¡ÀÇ ´Ü¾î¸¦ ¹Ì¸® ¼±ÅÃÇϸç FALSEÀ̸é Ç×»ó ¸¶Áö¸· °Ë»öÇÑ ´Ü¾î(arFind[0].Get(0))¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. ãÀ» ´ë»óÀÌ Ä³·µ À§Ä¡¿¡ ÀÖÀ» È®·üÀÌ ³ô±â ¶§¹®¿¡ ÀÌ ¿É¼ÇÀÇ µðÆúÆ®°ªÀº TRUE·Î ÃʱâÈÇÏ¿´´Ù.
bInitNextFind´Â ´ÙÀ½ ã±â, ÀÌÀü ã±â ´ë»óÀ» µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î ÃʱâÈÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é ´ÙÀ½ ã±â(<F3>)´Â »ç½Ç»ó ´ÙÀ½ ´Ü¾î ã±â(<Ctrl+F3>)¿Í ±â´ÉÀÌ °°¾ÆÁø´Ù. ´Ü¾î À§¿¡¼ ¶Ç´Â °Ë»öÇÒ ´ë»óÀ» ¼±ÅÃÇسõ°í ¹Ù·Î <F3>À» ´©¸£¸é ´ÙÀ½ À§Ä¡¸¦ ã¾Æ ÁֹǷΠÆí¸®ÇÏ´Ù. ÀÌ ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ´õ¶óµµ °Ë»ö ÈÄ ´ÙÀ½ ã±â¿¡ º° ¹®Á¦´Â ¾ø´Ù. ¿Ö³ÄÇÏ¸é °Ë»ö°á°ú°¡ ÀÌ¹Ì ¼±ÅõǾî ÀÖ´Â »óÅ¿¡¼ ÀÌ ¸í·ÉÀ» »ç¿ëÇÏ´Â °æ¿ì°¡ ¸¹±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ °Ë»ö ÈÄ À̵¿ÇÏ´Ù°¡ ´ÙÀ½ °Ë»ö À§Ä¡·Î °¡°íÀÚ ÇÒ ¶§´Â ÀÌ·± µ¿ÀÛÀÌ ºÒÆíÇÒ ¼öµµ Àֱ⠶§¹®¿¡ µðÆúÆ®°ªÀº FALSEÀÌ´Ù.
µÎ ¿É¼ÇÀÇ Àû¿ëÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. bInitFind´Â ´ëÈ»óÀÚ°¡ ¿¸± ¶§ È°¼ºÃ¢ÀÇ ÇöÀç ´Ü¾î¸¦ °¡Á®¿Í ÄÞº¸¹Ú½º¿¡ ´ëÀÔÇϱ⸸ ÇÏ¸é µÈ´Ù.
BOOL CALLBACK FindDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hActive;
SInfo *pSi;
int s,e;
....
switch(iMessage)
{
case WM_INITDIALOG:
....
RefillHistory(GetDlgItem(hDlg,IDC_FIND_WHAT),arFind[0]);
if (Option.bInitFind) {
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
pSi=(SInfo *)GetWindowLong(hActive,0);
pSi->Ae.GetSelect(s,e);
if (s==e) {
pSi->Ae.GetNowWord(pSi->Ae.GetOffset(),s,e);
}
if (abs(s-e) <= 255 && abs(s-e) > 0) {
pSi->Ae.GetText(szTemp,256,s,e);
SetDlgItemText(hDlg,IDC_FIND_WHAT,szTemp);
}
}
RefillHistory(GetDlgItem(hDlg,IDC_FIND_TO),arFind[1]);
SendMessage(GetDlgItem(hDlg,IDC_FIND_WHAT), CB_LIMITTEXT, (WPARAM)255, 0);
SendMessage(GetDlgItem(hDlg,IDC_FIND_TO), CB_LIMITTEXT, (WPARAM)255, 0);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);
return TRUE;
....
RefillHistory ÇÔ¼ö¿¡ ÀÇÇØ Ã£À» ³»¿ë ÄÞº¸¹Ú½º¿¡ arFind[0] È÷½ºÅ丮 ¸ñ·ÏÀÌ ´ëÀԵǴµ¥ ÀÌ ¸ñ·ÏÀÇ Ã¹ ¹ø° Ç׸ñÀ» ¹«½ÃÇÏ°í È°¼ºÃ¢ÀÇ ¼±ÅÃµÈ ´Ü¾î, ¶Ç´Â ÇöÀç ´Ü¾î¸¦ °¡Á®¿À´Â °ÍÀÌ´Ù. bInitNextFind´Â ´õ °£´ÜÇÏ´Ù. F3=Ctrl+F3, Shift+F3=Ctrl+Shift+F3°ú °°¾ÆÁö¹Ç·Î ¸Þ½ÃÁö¸¸ ¹Ù²ã¼ º¸³»ÁÖ¸é µÈ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_SEARCH_NEXT:
if (Option.bInitNextFind) {
SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_SEARCH_WORD,0),0);
} else if (lstrlen(arFind[0].Get(0))) {
tFlag=FindFlag;
tFlag &= ~AE_FIND_UP;
if (pSi->Ae.FindText(-1,arFind[0].Get(0), tFlag) == FALSE) {
MessageBox(hWnd,"ã´Â ¹®ÀÚ¿ÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);
}
}
break;
case IDM_SEARCH_PREV:
if (Option.bInitNextFind) {
SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_SEARCH_WORDUP,0),0);
} else if (lstrlen(arFind[0].Get(0))) {
tFlag=FindFlag;
tFlag |= AE_FIND_UP;
if (pSi->Ae.FindText(-1,arFind[0].Get(0), tFlag) == FALSE) {
MessageBox(hWnd,"ã´Â ¹®ÀÚ¿ÀÌ ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);
}
}
break;
¼³Á¤ ´ëÈ»óÀÚ¿¡´Â ÀÌ¹Ì ÀÌ ¿É¼ÇÀ» Á¶Á¤ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·Î±×·¡¹ÖµÇ¾î ÀÖÀ¸¸ç ÀÌ ¿É¼ÇÀÌ ¹Ù²ï´Ù°í Çؼ Áï½Ã ¾î¶² Á¶Ä¡¸¦ ÇÒ ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î ApplyNow¿¡¼´Â ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.