설정 대화상자의 첫 페이지에 있는 옵션들은 만들어만 놓고 아직 옵션들을 구현하지는 않았다. 이 옵션들은 모두 레지스트리에 저장되어 있는 정보를 바탕으로 동작하기 때문에 설정 저장 기능이 먼저 작성되어야 비로소 구현할 수 있다. 설정 저장 기능이 완성되었으므로 이제 Option 구조체에 기억된 내용대로 동작하도록 코드를 작성해보자. 최근 파일 개수 옵션은 바로 직전에 MRU를 구현하면서 같이 작성했으며 나머지 옵션들을 구현해보자.

. 처음 열리는 창 최대화

Dangeun은 사용자의 편의를 위해 처음 열리는 창은 무조건 최대화하는 서비스를 하고 있다. 이 코드는 Dangeun1에서 작성되었으며 구체적으로 New 함수가 기능의 핵심이다. 그러나 이것이 오히려 불편할 수도 있으므로 원하지 않을 경우 처음 창을 노말 상태에서 열 수 있도록 옵션을 만들었다. SOption bMaxFirstChild 변수가 이 옵션을 기억하며 초기값은 TRUE이나 설정 대화상자에서 바꿀 수 있다. 이 옵션은 New 함수가 참조하며 이 값이 TRUE일 때만 처음 열리는 창을 최대화한다.

 

HWND New()

{

    if ((hActive == NULL && Option.bMaxFirstChild==TRUE) || bMax == TRUE) {

           mcs.style |= WS_MAXIMIZE;

     }

     return (HWND)SendMessage(g_hMDIClient, WM_MDICREATE, 0,

          (LPARAM)(LPMDICREATESTRUCT)&mcs);

}

 

hActive NULL인 경우, 즉 기존에 활성창이 없으며 현재 생성되는 창이 첫 차일드인 경우라도 bMaxFirstChild 옵션이 FALSE이면 최대화를 하지 않도록 했다. New 함수에서만 이 옵션을 참조하므로 플래그만 넣어주면 옵션 적용이 완료된다. 옵션 변경 후 곧바로 적용되는 것도 아니므로 ApplyNow에서는 아무것도 할 필요가 없다.

다음은 파일을 저장할 때의 디폴트 확장자를 적용해보자. 현재 코드상으로는 사용자가 파일의 확장자를 지정하지 않을 때 txt 확장자를 붙여주도록 하드 코딩되어 있는데 이 기본 확장자를 Option.DefExt로만 변경하면 된다. 수정할 대상은 SaveAs 함수뿐이다.

 

BOOL SaveAs(HWND hChild)

{

     ...

    OFN.lpstrDefExt=Option.DefExt;

     if (GetSaveFileName(&OFN)==FALSE) {

          return FALSE;

     }

 

DefExt의 디폴트값이 txt로 되어 있으므로 기본 확장자는 여전히 txt이지만 설정 대화상자에서 이 값을 log cpp로 변경할 수 있게 되었다. 이 옵션도 마찬가지로 변경 후 곧바로 적용할 필요가 없으므로 ApplyNow에서는 처리할 필요가 없다. 이 두 옵션은 적용 범위가 좁기 때문에 정말 쉽게 구현되었다.