. 기타 옵션

이 외에도 ApiEdit는 아주 많은 옵션들을 제공하는데 이 옵션들에 대해서도 Get/Set 함수를 만들어야 한다. 이 옵션들은 이미 앞에서 실습한 것들이라 어떤 의미인지는 잘 알고 있을 것이며 코드를 변경하는 것도 아주 쉽다.

 

     BOOL GetNoFirstSpace() { return bNoFirstSpace; }

     void SetNoFirstSpace(BOOL aNoFirstSpace);

     BOOL GetWantTab() { return bWantTab; }

     void SetWantTab(BOOL aWantTab) { bWantTab=aWantTab; }

     int GetShowTabType() { return ShowTabType; }

     void SetShowTabType(int aShowTabType);

     int GetShowEnterType() { return ShowEnterType; }

     void SetShowEnterType(int aShowEnterType);

     int GetShowSpaceType() { return ShowSpaceType; }

     void SetShowSpaceType(int aShowSpaceType);

     COLORREF GetMarColor1() { return MarColor1; }

     void SetMarColor1(COLORREF acol);

     COLORREF GetMarColor2() { return MarColor2; }

     void SetMarColor2(COLORREF acol);

     COLORREF GetMarkColor() { return MarkColor; }

     void SetMarkColor(COLORREF acol);

     COLORREF GetCodeColor() { return CodeColor; }

     void SetCodeColor(COLORREF acol);

     COLORREF GetCurColor() { return CurColor; }

     void SetCurColor(COLORREF acol);

     COLORREF GetNumColor() { return NumColor; }

     void SetNumColor(COLORREF acol);

 

bWantTab 옵션이 변경되어도 추가 동작이 전혀 필요없으므로 Set 함수도 인라인으로 바로 작성했다. 변수값만 바꿔 놓으면 OnGetDlgCode에서 이 값을 실시간으로 사용하게 된다. bNoFirstSpace 옵션이 변경되면 정렬 상태가 바뀌므로 정렬을 다시 해야 한다. , 자동개행 상태가 아닐 때는 이 옵션이 정렬 상태에 영향을 주지 않으므로 그럴 필요가 없다.

 

void CApiEdit::SetNoFirstSpace(BOOL aNoFirstSpace)

{

     bNoFirstSpace=aNoFirstSpace;

     if (nWrap != 0) {

          UpdateLineInfo();

          UpdateScrollInfo();

          SetCaret();

          Invalidate(-1);

     }

}

 

색상이 바뀔 때는 이 색상이 실제로 사용될 때만 화면을 다시 그려주면 된다.

 

void CApiEdit::SetShowTabType(int aShowTabType)

{

     ShowTabType=aShowTabType;

     if (bShowTab) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetShowEnterType(int aShowEnterType)

{

     ShowEnterType=aShowEnterType;

     if (bShowEnter) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetShowSpaceType(int aShowSpaceType)

{

     ShowSpaceType=aShowSpaceType;

     if (bShowSpace) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetMarColor1(COLORREF acol)

{

     MarColor1=acol;

     if (MarginWidth != 0) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetMarColor2(COLORREF acol)

{

     MarColor2=acol;

     if (MarginWidth != 0) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetMarkColor(COLORREF acol)

{

     MarkColor=acol;

     Invalidate(-1);

}

 

void CApiEdit::SetCodeColor(COLORREF acol)

{

     CodeColor=acol;

     if (bShowEnter || bShowSpace || bShowTab) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetCurColor(COLORREF acol)

{

     CurColor=acol;

     if (nShowCurLine == 3 || nShowCurLine == 4) {

          Invalidate(-1);

     }

}

 

void CApiEdit::SetNumColor(COLORREF acol)

{

     NumColor=acol;

     if (bShowLineNum && MarginWidth!=0) {

          Invalidate(-1);

     }

}

 

예를 들어 줄번호의 색상은 마진이 있고 줄번호 보기 옵션이 선택되어 있을 때만 무효화를 하며 그 외의 경우는 색상값만 바꿔 놓으면 된다. 이렇게 바뀐 색상값은 차후에 줄번호 옵션이 켜질 때 사용될 것이다. 북마크는 지금 화면에 보이는 상태인지 아닌지를 판단하기가 어렵기 때문에 무조건 무효화하였다.