. 검색 옵션 저장

검색 옵션과 히스토리는 한 번 선택해놓으면 다음 번 실행할 때도 그대로 사용할 수 있도록 레지스트리에 저장해두는 것이 좋다. 이전 실행시에 검색했던 문자열을 히스토리에 찾을 수 있다면 훨씬 더 편리할 것이다. OnDestroy에서 FindFlag arFind 배열 전체를 레지스트리에 저장한다.

 

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

{

    int i,j;

     ....

    SHRegWriteInt(SHCU,KEY"Search","Flag",FindFlag);

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

        wsprintf(szKey,"Find%d-num",i);

        SHRegWriteInt(SHCU,KEY"Search",szKey,arFind[i].num);

        for (j=0;j<arFind[i].num;j++) {

           wsprintf(szKey,"Find%d-%d",i,j);

           SHRegWriteString(SHCU,KEY"Search",szKey,arFind[i].Get(j));

        }

    }

 

     if (arFont)

          free(arFont);

     PostQuitMessage(0);

     SavePosition(hWnd,KEY"Position");

     Mru.SaveMRU();

}

 

검색 옵션과 히스토리는 프로그램의 동작에 영향을 미치는 설정값이 아니므로 SOption 구조체에는 포함시키지 않았으며 호스트가 직접 레지스트리에 저장하였다. 이렇게 저장된 값은 OnCreate에서 읽어온다.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

    int i,j;

     HDC hdc;

    TCHAR szTemp[256];

    TCHAR szKey[16];

     ....

     if (Option.StartAction == 1000) {

          Option.GetStyleColor();

        FindFlag=AE_FIND_WRAP | AE_FIND_RECURSIVE | AE_FIND_SHORTPATH;

        arFind[3].num=2;

        arFind[3].Set(0,"*.*");

        arFind[3].Set(1,"*.cpp;*.hpp;*.c;*.h;*.inl");

     } else {

          Option.Load(KEY);

        FindFlag=SHRegReadInt(SHCU,KEY"Search","Flag",0);

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

           wsprintf(szKey,"Find%d-num",i);

           arFind[i].num=SHRegReadInt(SHCU,KEY"Search",szKey,0);

           for (j=0;j<arFind[i].num;j++) {

               wsprintf(szKey,"Find%d-%d",i,j);

               SHRegReadString(SHCU,KEY"Search",szKey,"",szTemp,256);

               arFind[i].Set(j,szTemp);

           }

        }

 

          if (Option.bExplorerPopup) {

              RegisterPopup(TRUE);

          }

     }

 

처음 실행될 때 검색 플래그를 무난한 값으로 초기화했다. arFind[3]은 파일검색의 필터인데 가장 일반적인 두 개의 필터를 미리 등록해두었다. 이 초기화는 당근이 처음 실행될 때 딱 한 번만 하면 된다. 권장옵션으로 돌아가더라도 이 옵션들은 다시 초기화할 필요가 없다. 이제 검색에 사용된 플래그와 문자열들이 그대로 저장되고 복구될 것이다.