. 설정

설정(Setting)이란 컨트롤의 모양이나 동작방식에 변화를 줄 수 있는 값이다. 표준 컨트롤들은 LBS_MULTIPLESEL, ES_NOHIDESEL 같은 스타일로 동작 옵션을 지정하는데 설정값은 이런 스타일과 동일하다. 스타일은 주로 생성할 때 지정하는데(실행중 변경도 가능하다) 비해 설정값은 실행중에도 언제든지 변경할 수 있다는 점에 있어서 약간 의미가 다르기는 하지만 거의 동일한 개념이라고 할 수 있다. 설정을 다른 말로 옵션(Option)이라고도 하는데 두 용어는 결국 같은 뜻이므로 여기서는 이 용어들을 별다른 구분없이 같이 사용하도록 한다.

설정은 하나의 컨트롤을 여러 가지 다른 모양으로 보이게 하며, 취향에 따라 동작방식에 변화를 줄 수 있어 컨트롤의 활용성을 극대화한다. 똑같은 버튼 컨트롤이라도 BS_PUSHBUTTON, BS_RADIOBUTTON, BS_CHECKBOX 등의 스타일에 따라 다양한 형태의 컨트롤을 만들 수 있고 여러모로 활용할 수 있다. 컨트롤은 실행중에 항상 자신에게 주어진 설정값을 참고하여 설정된 대로 동작하도록 프로그래밍되어 있다.

많은 옵션을 제공하는 것이 사용자의 다양한 욕구를 만족시킬 수 있으므로 가급적이면 설정 가능한 값을 늘려 주는 것이 좋다. 고정된 방식으로만 동작하는 컨트롤보다는 프로그래밍 가능한 컨트롤이 더 좋으며 사용자가 변경할 수 있는 설정의 범위가 넓을수록 좋다. 물론 변경 가능한 모든 설정값에 대한 처리가 필요하므로 코드량은 더 많아질 것이고 사용자들이 컨트롤의 모든 설정값에 익숙해지는데 시간이 많이 걸린다는 단점은 있다.

ApiEdit는 이미 많은 설정값을 가지고 있으며 앞으로 더 늘릴 수 있는 여지도 많다. 당장 생각나는 것만 해도 줄간, 제어코드 보기, 마진 보기, 정렬방식, 현재행 보기, 포커스 잃을 때 선택영역 숨기기 등이 이미 완벽하게 프로그래밍되어 있으며 아직 구현되어 있지는 않지만 배경색 바꾸기, 글꼴 바꾸기 등도 가능하다. 컨트롤은 설정을 변경할 수 있는 기능을 제공하기는 하지만 사용자가 직접 바꿀 수 있는 UI는 제공하지 않으며 프로그래밍 인터페이스만 제공하는 것이 원칙이다.

컨트롤의 모든 설정값을 사용자가 직접 조작할 수 있어야 하는 것은 아니며 설정을 바꿀 수 있도록 할 것인가 아닌가는 호스트 프로그램이 결정한다. 설정상태를 보여주고 변경하는 UI를 제공하는 것도 호스트가 할 일이다. 설정 변경 기능을 넣기 위해 Dangeun3 프로젝트를 복사하여 새로 만들자. 이 프로젝트가 완성되면 실행중에 모든 설정값을 사용자가 직접 변경할 수 있게 될 것이다.