. 탭의 폭

TabWidth는 탭의 폭을 몇 개의 문자폭으로 할 것인가를 기억하는 변수이며 이 변수로부터 픽셀 단위의 실제 탭 폭인 TabSize를 계산해 낸다. 이때 TabWidth에 어떤 값을 곱하는가에 따라 탭의 실제 폭이 달라지는데 두 가지 방식이 있다. 첫 번째는 문자의 평균폭을 곱하는 것이고 두 번째는 공백의 폭을 곱하는 것인데 지금까지는 평균폭을 곱하는 것으로 고정되어 있었다.

문자의 평균폭을 곱하는 것이 합리적이지만 소스를 편집할 때는 탭과 공백을 번갈아 사용하므로 탭의 폭이 공백과 같은 것이 더 보기에 좋다. TabWidth 4일 때 탭문자 하나의 폭과 공백 4개의 폭이 일치하면 들여쓰기가 제대로 정렬되어 보기에 좋다. bCalcTabWithAvg는 문자의 평균폭을 곱할 것인가 아니면 공백폭을 곱할 것인가를 지정하는 옵션이며 디폴트값은 TRUE이므로 문자의 평균폭이 곱해진다. 이 옵션을 FALSE로 바꾸면 공백폭의 배수로 탭의 폭을 계산하게 될 것이다. 탭을 계산하는 방식이 바뀌면 탭의 실제폭이 변경되므로 SetTabWidth 함수를 호출한다.

 

void CApiEdit::SetTabWidth(int aTabWidth)

{

     TabWidth=aTabWidth;

    if (bCalcTabWithAvg) {

        TabSize=FontWidth*TabWidth;

    } else {

        TabSize=arChWidth[‘ ‘]*TabWidth;

    }

     UpdateLineInfo();

     UpdateScrollInfo();

     Invalidate(-1);

     SetCaret();

}

 

이 함수는 TabWidth bCalcTabWithAvg 옵션을 참조하여 TabSize를 다시 계산하며 재정렬 및 스크롤 정보 갱신을 한다. 폰트가 변경될 때도 탭이 다시 계산되므로 SetFont에도 이 옵션을 적용해야 한다.

 

void CApiEdit::SetFont(LOGFONT *alogfont)

{

     if (bCalcTabWithAvg) {

          TabSize=FontWidth*TabWidth;

     } else {

          TabSize=arChWidth[‘ ‘]*TabWidth;

     }

     ....

 

옵션을 변경하면 탭의 폭이 다시 설정되고 필요할 경우 재정렬하게 된다.