. 선택 관련 변수

선택에 관련된 변수는 다음 7가지가 필요하다. 선택은 동작임과 동시에 문서의 상태이기도 하므로 현재 상태를 저장할 변수가 많이 필요하다.

 

int SelStart, SelEnd;

BOOL bCapture;

COLORREF SelFore, SelBack;

int HideSelType;

 

SelStart, SelEnd는 이름에서도 알 수 있듯이 현재 선택되어 있는 블록의 시작 오프셋과 끝 오프셋이다. 이 두 오프셋 사이의 문자열이 선택 상태가 되며 두 값이 같으면 선택영역이 없는 상태가 된다. 예를 들어 SelStart 7이고 SelEnd 15라면 이때 문서의 선택 상태는 다음과 같을 것이다.

마우스나 키보드 선택 루틴에서 이 두 변수의 값을 적절히 바꾸는 것이 선택 기능의 주된 작업이다. 출력루틴은 이 두 변수로부터 선택영역의 범위를 구해 반전시켜 보여줄 것이며 클립보드 관련 루틴도 이 변수로부터 복사할 영역을 구해낸다. 주의할 것은 선택의 시작점은 선택영역에 포함되며 선택의 끝점은 선택영역에 포함되지 않는다는 점이다. 이런 원칙에 대해서는 앞에서도 이미 논한 적이 있다.

bCapture는 마우스 버튼을 클릭한 채로 드래그할 때 커서를 캡처하기 위한 변수이며 SelFore, SelBack은 선택영역을 그릴 때 사용할 전경색과 배경색이다. HideSelType은 편집기가 포커스를 잃었을 때 선택영역을 어떻게 처리할 것인가를 지정하는 옵션값이며 잠시 후에 실습해 볼 것이다. 이 변수들은 OnCreate OnSetFocus에서 다음과 같이 초기화한다.

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     SelStart=SelEnd=0;

     bCapture=FALSE;

     HideSelType=1;

 

     return TRUE;

}

 

void OnSetFocus(HWND hWnd, HWND hwndOldFocus)

{

     SetCaret(FALSE,FALSE);

 

     SelFore=GetSysColor(COLOR_HIGHLIGHTTEXT);

     SelBack=GetSysColor(COLOR_HIGHLIGHT);

}

 

최초 선택영역은 없으며 캡처도 되어 있지 않다. 선택영역의 배경색과 전경색은 시스템 색상으로부터 구하는데 보통 배경색은 파란색이고 전경색은 흰색이다. 하지만 그렇다고 해서 RGB매크로로 파란색과 흰색을 직접 지정하는 것은 바람직하지 않으면 반드시 GetSysColor 함수로 시스템 색상을 조사해야 한다. 사람마다 좋아하는 색상이 다른데 이 설정상태를 무시하면 안된다.