. 추가된 옵션

여기까지 고급 편집기능들을 작성하면서 총 4개의 옵션 변수가 추가되었다. ApiEdit는 이 옵션들을 외부에서 읽고 변경할 수 있도록 액세스 함수를 제공해야 한다. 다음 함수들을 ApiEdit.h에 추가하도록 하자.

 

class CApiEdit

{

     ....

     BOOL GetSpaceForTab() { return bSpaceForTab; }

     void SetSpaceForTab(BOOL aSpaceForTab) { bSpaceForTab=aSpaceForTab; }

     BOOL GetAutoIndent() { return bAutoIndent; }

     void SetAutoIndent(BOOL aAutoIndent) { bAutoIndent=aAutoIndent; }

     BOOL GetBlockIndentWithTab() { return bBlockIndentWithTab; }

     void SetBlockIndentWithTab(BOOL aBlockIndentWithTab)

          { bBlockIndentWithTab=aBlockIndentWithTab; }

     BOOL GetHomeToFirstChar() { return bHomeToFirstChar; }

     void SetHomeToFirstChar(BOOL aHomeToFirstChar) { bHomeToFirstChar=aHomeToFirstChar; }

 

편집 관련 옵션들은 사용자가 편집을 할 때 적용되는 것들이라 ApiEdit의 모양에는 전혀 영향을 주지 않는다. 변경 즉시 어떤 효과가 나타날 필요가 없으므로 이 변수들의 변화에 따른 부차적인 처리가 전혀 필요없다. 그래서 Get 함수와 Set 함수 모두 다 인라인으로 작성했다.

SOption 구조체에는 이 변수들과 대응되는 설정 변수들이 이미 포함되어 있으며 설정 대화상자의 편집 페이지에는 이 옵션들을 입력받을 수 있는 컨트롤들이 배치되어 있다. 이 값들이 바뀌면 ApplyNow 함수에서 ApiEdit에게 알려 주기만 하면 된다.

 

void ApplyNow()

{

     ....

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

          ....

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

              pSi->Ae.SetSpaceForTab(NewOption.bSpaceForTab);

          }

 

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

              pSi->Ae.SetAutoIndent(NewOption.bAutoIndent);

          }

 

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

              pSi->Ae.SetBlockIndentWithTab(NewOption.bBlockIndentWithTab);

          }

 

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

              pSi->Ae.SetHomeToFirstChar(NewOption.bHomeToFirstChar);

          }

 

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

     ....

 

사용자가 설정 대화상자를 통해 이 옵션 중 하나를 변경하면 열린 모든 편집창의 편집 옵션이 바뀌며 이 후 변경된 옵션대로 편집 동작이 이루어진다. SetSetting 함수에서도 동일한 처리를 하여 앞으로 생성될 편집창도 디폴트와 다른 편집 옵션을 대입받도록 해야 한다.

 

void SetSetting(CApiEdit &Ae)

{

     ....

     if (Option.bSpaceForTab != Ori.bSpaceForTab) {

          Ae.SetSpaceForTab(Option.bSpaceForTab);

     }

 

     if (Option.bAutoIndent != Ori.bAutoIndent) {

          Ae.SetAutoIndent(Option.bAutoIndent);

     }

 

     if (Option.bBlockIndentWithTab != Ori.bBlockIndentWithTab) {

          Ae.SetBlockIndentWithTab(Option.bBlockIndentWithTab);

     }

 

     if (Option.bHomeToFirstChar != Ori.bHomeToFirstChar) {

          Ae.SetHomeToFirstChar(Option.bHomeToFirstChar);

     }

 

지금까지 만들었던 편집 옵션들을 설정 대화상자에서 조정할 수 있을 것이다.