. 기본 설정

설정을 마음대로 바꿀 수 있도록 하면 사용자들은 이리 저리 설정을 주물러 볼 것이고 그러다 보면 빨간색 바탕에 주황색 글자 따위의 엉뚱한 조합이 나올 수도 있다. 이럴 때는 원래대로 설정을 되돌릴 수 있는 기능이 있어야 한다. 사용자가 일일이 디폴트 설정을 기억할 수 없기 때문이다. 다음 함수는 컨트롤의 디폴트 설정으로 맞추어 준다.

 

void CApiEdit::SetDefaultSetting()

{

     if (buf) {

          SetLineRatio(120);

          SetWrap(2);

          SetTabWidth(4);

          SetShowState(SHOWMARGIN,TRUE);

     } else {

          LineRatio=120;

          nWrap=2;

          TabWidth=4;

          MarginWidth=25;

     }

     logfont.lfHeight=0;

     SetFont(&logfont);

     nShowCurLine=0;

     HideSelType=1;

     bShowEnter=FALSE;

     bShowTab=FALSE;

     bShowSpace=FALSE;

     bShowLineNum=FALSE;

     bNoFirstSpace=FALSE;

     MarColor1=RGB(192,192,192);

     MarColor2=RGB(160,160,160);

     NumColor=RGB(0,0,0);

     MarkColor=RGB(255,255,0);

     ShowTabType=1;

     ShowEnterType=1;

     ShowSpaceType=0;

     CodeColor=RGB(128,128,128);

     CurColor=RGB(255,255,0);

     cBack=GetSysColor(COLOR_WINDOW);

     cFore=GetSysColor(COLOR_WINDOWTEXT);

     cSelFore=GetSysColor(COLOR_HIGHLIGHTTEXT);

     cSelBack=GetSysColor(COLOR_HIGHLIGHT);

}

 

최초 이 함수가 호출될 때는 단순히 변수값만 초기화하면 되지만 실행중에 기본 설정으로 돌아갈 때는 관련된 처리를 같이 해야 한다. 예를 들어 nWrap이 변경되면 수평 스크롤바를 숨겨야 하고 탭 크기가 변경되면 정렬을 다시 해야 한다. 그래서 buf NULL이면 변수값만 바꾸고 그렇지 않으면 Set 함수를 불러 관련된 처리도 같이 하도록 했다. 기본 설정을 이 함수에서 설정하므로 OnCreate의 코드는 다시 대폭 줄어들며 SetDefaultSetting 함수 호출문만 삽입되었다.

 

BOOL CApiEdit::OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     bComp=FALSE;

     bCapture=FALSE;

     bSelLine=FALSE;

     SelStartLine=0;

     bDragSel=FALSE;

     bWantTab=TRUE;

     SumDelta=0;

     bHideCaret=FALSE;

 

    SetDefaultSetting();

     InitDoc();

 

     return TRUE;

}

 

OnCreate의 첫 줄에 있던 MySetImeMode 함수 호출문도 삭제하도록 하고 헤더 파일과 구현 파일에서 아예 이 함수를 삭제하도록 하자. 지금까지 이 함수는 테스트의 편의를 위해 계속 사용해왔는데 이 코드도 호스트로 옮길 것이다. 컨트롤은 호스트가 설정하는 초기 상태대로 동작하기만 하면 된다. MySetImeMode 함수를 Util.cpp로 옮긴다.