. 정책 수정

릴리즈에 앞서 몇 가지 정책을 수정하도록 하자. 개발중에는 잘 몰랐으나 막상 사용해보니 불편한 점이 있어 정책을 조금 변경하고자 한다. 이런 정책의 변경은 개발중에도 수시로 할 수 있는 것인데 중간에 너무 자주 변경하는 것은 바람직하지 않다. 여기서의 정책 수정은 최종 사용자의 편의성과 이후의 확장성을 고려한 것이다.

첫 번째 변경 사항은 검색결과창의 보기 상태를 저장하지 않도록 하는 것이다. 이 창은 검색을 할 때만 사용하므로 검색을 시작하기 전에만 열면 된다. 검색 후 종료했다가 다시 실행했을 때 검색결과창이 굳이 보여야 할 이유가 없는 것 같으며 가급적이면 작업영역을 크게 만들어 넓은 화면에서 편집하도록 하는 것이 좋다. Util.h SOption 구조체에 포함되어 있는 bShowOutput 멤버를 삭제하고 Init, Load, Save에서도 이 변수를 다루는 문장을 삭제한다.

대신 Dangeun.cpp bShowOutput을 새로 선언하고 Option.bShowOutput bShowOutput으로 수정한다. 이렇게 되면 bShowOutput은 최초 FALSE로 초기화되며 메뉴나 검색 명령을 통해 일부러 보이도록 하지 않는 한은 검색결과창이 보이지 않게 된다. , 이 변수는 단순한 전역변수가 되며 영구적인 생명을 주지 않겠다는 뜻이다. 단순히 변수의 위치만 옮긴 것이므로 작업에 큰 어려움은 없을 것이다. 다만 ApplyNow의 코드는 조금 다르게 수정된다.

 

void ApplyNow()

{

     ....

     if (Option.bShowFileTab != NewOption.bShowFileTab ||

          Option.bShowFileWnd != NewOption.bShowFileWnd ||

          Option.bShowStatus != NewOption.bShowStatus ||

          Option.bShowToolBar != NewOption.bShowToolBar) {

          bRelayout=TRUE;

     }

 

원래 코드는 Option.bShowOutput NewOption.bShowOutput을 비교했었으나 이제 SOption에서 이 변수가 빠졌으므로 비교를 할 필요가 없다. 그래서 기본 설정으로 돌아가더라도 검색결과창은 현재의 상태를 그대로 유지하게 된다.

두 번째 변경 사항은 북마크의 크기를 늘리는 것이다. 현재 MAXBOOKMARK 100으로 되어 있으므로 최대 100개의 북마크를 설정할 수 있는데 이 크기가 조금 부족할 수도 있을 것 같다. 그래서 이름있는 북마크 10, 이름없는 북마크 256개까지 최대 266개로 늘려 주도록 하자. ApiEdit.h에 있는 매크로 선언문을 변경하면 된다.

 

#define MAXBOOKMARK 266

 

이왕 크기를 늘리는 김에 무한대까지 설정할 수 있도록 arMark 배열을 동적으로 관리할 수도 있다. 그러나 그렇게까지 하지 않은 이유는 북마크는 많을수록 가치가 떨어지기도 하지만 차후에 북마크 설정을 파일로 저장하는 기능을 기획하고 있기 때문이다. 저장되는 정보가 가변 길이일 때와 고정 길이일 때의 비용 차이가 너무 심해서 무한대의 북마크 지원을 하지 않았다.

세 번째 변경 사항은 아주 간단하다. 설정 대화상자의 마지막 페이지 번호를 g_StartPage 전역변수에 저장하여 다음 번 설정 대화상자를 열었을 때 이 페이지를 다시 열어 주도록 되어 있다. 하지만 이 변수는 실행중에만 값을 유지하기 때문에 당근을 종료한 후 다시 실행하면 여전히 일반 페이지에서 설정을 시작한다. 이 값을 레지스트리에 저장하도록 하자.

 

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

{

     ....

    g_StartPage=SHRegReadInt(SHCU,KEY"Setting","StartPage",0);

     return 0;

}

 

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

{

     ....

    SHRegWriteInt(SHCU,KEY"Setting","StartPage",g_StartPage);

}

 

g_StartPage 변수에 영구적인 생명을 부여함으로써 종료 후 다시 실행해도 최후로 열었던 설정 페이지가 열리게 된다.

마지막으로 탐색기 팝업 옵션의 디폴트를 FALSE로 변경한다. 이 기능을 정확하게 구현하려면 탐색기와 통신할 수 있는 COM 개체를 만들어야 하나 당근은 단독 실행 파일이기 때문에 별도의 DLL을 가지지 못하므로 정석대로 팝업 메뉴를 추가하지 않고 편법을 사용했다. 개발중에는 이 편법에 별 문제가 없는 것으로 파악했으나 98에서는 이 방법대로 할 경우 파일을 더블클릭할 때마다 당근이 실행되는 큰 문제가 있다. 그래서 이 옵션의 디폴트를 변경한다.

 

 

void SOption::Init()

{

     StartAction=2;

     bExplorerPopup=FALSE;

     ....

 

이 옵션은 여기뿐만 아니라 설치 대화상자에서도 참조하기 때문에 이 옵션을 입력받는 체크 박스의 디폴트값도 수정해 주어야 한다. WM_INITDIALOG에 있는 CheckDlgButton 호출문을 삭제하고 대화상자가 닫힐 때 이 옵션을 선택했으면 Option bExplorerPopup 멤버를 TRUE로 변경하도록 수정한다.

 

BOOL CALLBACK SetupDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     TCHAR szPath[MAX_PATH];

     TCHAR szLink[MAX_PATH];

 

     switch(iMessage)

     {

     case WM_INITDIALOG:

          SetDlgItemText(hDlg,IDC_IS_MESSAGE,"당근은 텍스트를 보고 편집할 수"

              " 있는 텍스트 편집 프로그램입니다.\r\n\r\n"

              "처음 실행하셨으므로 다음 초기 설정을 선택해 주십시오.이 대화상자는 최초 "

              "실행시 한 번만 나타나며 이후부터 도구 메뉴의 기본설정 명령으로 모든 옵션을"

              " 변경할 수 있습니다. 기본으로 주어진 옵션이 가장 무난합니다.\r\n\r\n"

              "감사합니다.");

//     CheckDlgButton(hDlg,IDC_IS_POPUP,BST_CHECKED);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDOK:

          case IDCANCEL:

              if (IsDlgButtonChecked(hDlg,IDC_IS_POPUP)==BST_CHECKED) {

                   RegisterPopup(TRUE);

               Option.bExplorerPopup=TRUE;

              }

 

다음 버전에서는 분리된 DLL을 만들어 좀 더 정석적인 방법으로 팝업 메뉴를 깔끔하게 붙일 예정이다.