. 검색 실패 메시지

앞장에서 만들었던 검색 기능은 검색에 실패할 경우 메시지박스로 찾는 문자열이 없음을 보여준다. 검색결과를 확실하게 보여주는 것은 좋지만 메시지박스는 확인 버튼을 클릭해야 한다는 점에서 불편한 면이 있다. 상태란이 완성되었으므로 검색결과를 상태란에 보여주도록 수정해보자. 0번 파트가 이런 목적으로 준비되어 있다.

 

void OnUser2(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     case 1:

          if (pSi->Ae.FindText(-1,arFind[0].Get(0), FindFlag) == FALSE) {

           wsprintf(Mes, "찾는 문자열 \"%s\"가 없습니다",arFind[0].Get(0));

           if (Option.bSoundFindFail) {

               MessageBeep(MB_ICONASTERISK);

           }

           SetStatusText(1,Mes);

              ....

     case 2:

          if (pSi->Ae.ReplaceText(-1,arFind[0].Get(0), FindFlag,arFind[1].Get(0)) == 0) {

           wsprintf(Mes, "찾는 문자열 \"%s\"가 없습니다",arFind[0].Get(0));

           if (Option.bSoundFindFail) {

               MessageBeep(MB_ICONASTERISK);

           }

           SetStatusText(1,Mes);

              ....

     case 3:

          ....

          pSi->Ae.EndUndoGroup();

          if (i==0) {

              wsprintf(Mes, "찾는 문자열 \"%s\"가 없습니다",arFind[0].Get(0));

              if (Option.bSoundFindFail) {

                   MessageBeep(MB_ICONASTERISK);

              }

          } else {

              wsprintf(Mes, " %d개의 \"%s\"문자열을 \"%s\"로 바꾸었습니다",

                   i,arFind[0].Get(0), arFind[1].Get(0));

          }

        SetStatusText(1,Mes);

          break;

     }

}

 

MessageBox 호출문 대신 SetStatusText가 대신 사용되었으며 문자열만 출력되면 사용자가 결과를 미처 확인하지 못할 수도 있으므로 비프음을 내도록 하였다. 다음 찾기와 이전 찾기도 마찬가지 방법으로 수정한다.

 

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) {

               wsprintf(Mes, "찾는 문자열 \"%s\"가 없습니다",arFind[0].Get(0));

               if (Option.bSoundFindFail) {

                   MessageBeep(MB_ICONASTERISK);

               }

               SetStatusText(1,Mes);

              }

          }

          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) {

               wsprintf(Mes, "찾는 문자열 \"%s\"가 없습니다",arFind[0].Get(0));

               if (Option.bSoundFindFail) {

                   MessageBeep(MB_ICONASTERISK);

               }

               SetStatusText(1,Mes);

              }

          }

          break;

 

이제 메시지박스가 열리지 않으므로 찾는 문자열이 발견되지 않더라도 확인 버튼을 클릭하지 않고도 다음 편집작업을 계속할 수 있다.