. 취소 버퍼 크기 지정

레코드 크기의 상한값을 관리하는 기능을 넣었으며 당근의 설정 대화상자에는 이미 이 상한값에 대한 옵션 조정 기능이 들어 있다. SOption구조체의 UndoLimit 멤버가 상한값을 지정하는데 이 값이 변경될 때 컨트롤의 상한값을 변경하도록 하자. 즉 옵션을 적용하는 것이다. ApiEdit 컨트롤의 초기 설정을 대입하는 SetSetting에 다음 코드를 작성한다.

 

void SetSetting(CApiEdit &Ae)

{

     SOption Ori;

     HDC hdc;

     LOGFONT tFont;

 

     if (Option.Hangul) {

          MySetImeMode(Ae.hWnd,TRUE);

     }

 

    Ae.SetUndoSize(Option.GetUndoLimit());

     ....

 

다른 옵션과는 달리 디폴트 옵션과 다른지 비교하지 않고 무조건 SetUndoSize를 호출했다. 왜냐하면 ApiEdit의 디폴트값은 100KB이고 호스트의 디폴트는 1MB로 다르게 설정되어 있기 때문이다. 당근에서 ApiEdit는 문자열 편집용이라기 보다 문서라는 더 큰 대상을 다루고 있기 때문에 취소 레코드 상한값을 훨씬 더 넉넉하게 잡아 주었다. ApplyNow에서는 사용자가 선택한 크기를 이미 생성된 ApiEdit에 적용해야 한다.

 

void ApplyNow()

{

     ....

        if (Option.UndoLimit != NewOption.UndoLimit) {

           pSi->Ae.SetUndoSize(NewOption.GetUndoLimit());

        }

 

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

 

     Option=NewOption;

}

 

ApiEdit는 취소 버퍼의 크기를 개수와 용량 두 가지로 제어하지만 호스트는 오직 용량으로만 체크하도록 하였다. 개수는 컨트롤의 디폴트인 100개가 그대로 적용되어 항상 최소한 100번의 편집 동작은 기억하게 된다.