.실습 정리

간단하게나마 C언어와 API 사용한 벡터 드로잉 예제 제작 실습을 마친다. 실습에서 구현한 외에도 다양한 기능을 추가할 있는데 자신있는 사람은 다음 개작 실습을 계속 진행해 보기 바란다.

 

캔버스의 배경 색상이 COLOR_WINDOW 시스템 색상으로 설정되어 있는데 사용자가 원할 경우 배경 색상을 변경할 있도록 보자. 캔버스의 배경 색상을 기억하는 COLORREF 변수를 선언하고 OnPaint FillRect에서 색상으로 배경을 칠하기만 하면 된다. 색상 공통 대화상자를 사용하면 색상을 쉽게 입력받을 있다.

도형에 다양한 속성들을 추가해 보자. 선이 무조건 실선으로만 나오는데 점선이나 일점 쇄선 등으로 그릴 수도 있고 면에 색상 이외의 무늬를 넣을 수도 있다. 또한 선의 부분에 화살표 등의 장식을 달아 지시선으로 사용할 수도 있다. 도형 뒤쪽에 옅은 회색으로 그림자를 출력하는 기능을 덧붙이면 훨씬 예쁜 문서를 만들 수도 있을 것이다.

비트맵, 텍스트의 경우는 추가 선택 상태로 돌아오지만 타원, 사각형은 그렇지 않아 방금 그린 도형을 이동하거나 크기를 변경하기에 불편한 면이 있다. 그렇다고 해서 모든 도형에 대해 한번 추가한 바로 선택툴로 돌아오도록 만들어 버리면 같은 도형을 연속적으로 추가하기 불편하다. 이런 선택 사항은 옵션으로 정의하여 사용자가 필요에 따라 모드를 바꿔 가며 있도록 하는 것이 좋다.

그리드의 설정 상태나 배경색, 선택 모드 등의 옵션 설정 상태를 레지스트리에 저장하도록 하자. 사용자가 매번 옵션을 변경하는 것은 무척 번거로우므로 한번 설정한 옵션을 다음 번에도 계속 있도록 하는 것이 좋다. ApiDraw 자체의 화면 위치와 최대화 상태 등도 레지스트리에 저장해 보자.

현재 도형을 하나만 선택할 있는데 다중 선택이 가능하도록 확장해 보자. Shift Ctrl키를 누른 상태로 개별 도형의 선택을 토글하도록 하거나 아니면 마우스로 선택할 도형을 감싸는 마키 셀렉션을 사용할 수도 있다. 다중 선택이 가능해지면 이동, 삭제, 복사 등의 코드도 동시에 여러 개의 객체에 대해 적용될 있도록 대폭적으로 수정되어야 한다. 선택된 도형의 목록을 기억하기 위해 첨자 배열을 사용하는 방법을 수도 있지만 개별 도형의 선택 상태를 DObject 구조체에서 관리하는 것이 편리하다.

여러 개의 도형을 하나의 도형으로 묶어서 관리할 있는 그룹핑 기능을 작성해 보자. 그룹에 속한 도형은 같이 움직이고 같이 확대되어야 하며 클립보드에도 하나의 도형으로 기록되어야 한다. 묶여진 그룹을 다시 있는 그룹 해제 기능도 물론 작성해야 한다.

■ 클립보드로 교환할 수 있는 데이터가 오로지 ClipFormat뿐인데 다른 종류의 프로그램과도 데이터를 교환할 수 있도록 해 보자. 타원, 비트맵, 메타 등은 비트맵으로 복사하여 그림판 등의 래스터 그래픽 툴에 붙여 넣을 수 있다면 편리하다. 또한 텍스트를 붙여 넣으면 텍스트 객체를 생성하고 비트맵을 붙여 넣으면 비트맵 객체를 생성하는 기능도 있다면 훨씬 더 좋은 프로그램이 될 것이다.

 

외에 캔버스의 크기를 일정한 크기로 제한한다거나 도형의 좌표를 픽셀이 아닌 논리 단위를 쓰도록 확대/축소(Zoom) 기능을 작성할 수도 있다. 확대가 가능하면 프린터로 인쇄해도 깔끔하게 확대되어 벡터 그래픽의 이점이 드러난다. 확대, 축소가 가능해지면 스크롤 기능도 당연히 들어가야 하며 캔버스 바깥으로 도형이 나가지 않도록 예외 처리도 해야 한다.

다각형, 곡선 그릴 있는 도형도 늘려 보고 다른 프로그램에 데이터를 제공하는 OLE 서버로 만들 수도 있다. 그러나 상태에서 이상 기능을 늘리는 것보다는 발전된 개발 방법인 객체 지향 프로그래밍 방법을 도입하는 것이 훨씬 효율적이다. 프로그램이 일정 규모 이상 커지면 구조적인 개발 방법으로는 코드를 유지하기가 어려워진다.

이상으로 ApiDraw 제작 실습을 마친다. 기능만으로 비교한다면 상용 프로그램에 비할 바는 못되지만 윈도우즈 프로그램이 어떤 식으로 작성되고 실행된다는 것을 느끼기에는 충분한 실습이 되었을 것이다. 사실 많은 기능을 넣어 보고 싶었지만 몇몇 사람들에게 원고를 테스트해 결과 너무 어렵다는 평이 있어서 난이도를 쉽게 조절했다. 기능이 작다하여 깔보지 말고 정도라도 직접 만들 있도록 열심히 학습하기 바라며 차후에 훨씬 좋은 프로그램을 만들 있는 탁월한 프로그래머가 되기를 바란다.