. 마진영역의 용도

텍스트 편집기는 작업영역 전체를 텍스트 편집을 위한 용도로 사용하기 때문에 그 모양이 좀 썰렁하다. 메모장이 전형적인 텍스트 편집기인데 중앙의 텍스트 편집 영역을 제외하고는 메뉴와 스크롤바 정도가 있을 뿐이다. 텍스트 편집만이 주된 용도이므로 그럴 수밖에 없다. 하지만 요즘의 텍스트 편집기들은 단순한 편집 이상의 기능을 요구하는데 줄번호 출력이라든가 북마크 기능, 그리고 다양한 마우스동작을 구비해야 한다. 사실 이런 기능은 워낙 보편화되어 있기 때문에 이제는 특별할 것도 없는 기본 기능에 속하게 되었다.

이런 고급 기능들을 구현하기 위해서는 편집 영역 외에 별도의 화면 영역을 필요로 한다. 마진(Margin)이란 편집 영역의 한쪽 변에 붙어 있는 특수한 기능을 가지는 영역인데 줄번호나 설정된 북마크를 표시하며 소스 편집기의 경우 중단점, 현재 위치 등을 보여주는 기능을 가진다. 또한 이 영역에서 마우스는 줄단위 선택이라는 특수한 기능을 가지기도 한다. 마진영역의 예를 보고 싶으면 지금 사용하고 있는 비주얼 C++ 컴파일러의 편집기를 보면 된다.

소스가 출력되는 중앙의 왼쪽에 별도의 회색 영역이 있는데 이것이 바로 마진이다. 이 영역에서 북마크 설정을 볼 수 있고 디버깅중에 참고할만한 여러 가지 정보들이 출력되며 마우스로 줄단위 선택을 할 수 있다. 마진영역이 있으면 일단 보기에도 뭔가 있어 보이고 다양한 기능들을 줄 수 있으므로 ApiEdit에도 마진을 만들어 보도록 하자.

ApiEdit6의 소스를 복사하여 ApiEdit7을 새로 만든다. 그리고 최적화를 위해 사용했던 SpeedTest 함수와 OnKey에 작성되어 있는 VK_F1~VK_F6까지의 코드를 삭제한다. OnCreate에 있는 예제 파일을 읽는 코드도 지워버리고 마진 테스트에 적당한 좀 더 짧은 예문으로 바꾸도록 하자.

 

     lstrcpy(buf,"이 문서는 마진영역 테스트와 줄번호 출력, 북마크 기능 테스트를 위해 작성된 것입니다. "

          "문서의 왼쪽에 줄번호가 나타나며 이 영역에서 다양한 마우스동작을 할 수 있습니다.\r\n\r\n"

          "\twhile(GetMessage(&Message,0,0,0)) {\r\n"

          "\t\tTranslateMessage(&Message);\r\n"

          "\t\tDispatchMessage(&Message);\r\n\t}\r\n\r\n"

          "줄번호 1\r\n줄번호 2\r\n줄번호 3\r\n줄번호 4\r\n줄번호 5");

 

 북마크와 제어코드 출력 등을 테스트해 볼 수 있는 예문을 입력해두었다. 줄번호 출력이나 북마크 같은 기능은 잠시 접어두고 이번 절에서는 마진을 출력하고 편집코드가 마진을 제대로 인식할 수 있도록 하는데 중점을 둘 것이다.