7.3.1 도큐먼트 리스트를 받아오는 방법
본격적인 구현에 앞서, 먼저 어떤 형태의 사용자 인터페이스를 사용할지를 결정해보자. 6장에서 살펴본 영상 처리 알고리즘들은 모두 하나의 입력 영상만을 사용하기 때문에 현재 활성화된 차일드 프레임 윈도우의 영상을 그대로 이용하면 되었다. 그러나 산술 및 논리 연산은 두 장의 입력 영상을 필요로 하기 때문에 조금은 다른 인터페이스가 필요하다. 여러 가지 사용자 인터페이스를 만들 수 있지만, ImageTool 프로그램에서는 현재 열려 있는 영상들 중에서 두 장의 영상을 선택할 수 있는 인터페이스를 제공하려고 한다.
그림 7-9는 이 절에서 만들려고 하는 산술 및 논리 연산을 위한 사용자 인터페이스를 보여준다. 현재 화면에 떠 있는 영상의 이름을 콤보 박스에서 선택하고, 원하는 산술 또는 논리 연산을 라디오 버튼을 이용하여 선택하도록 하였다. 이처럼 현재 프로그램에 떠 있는 영상을 사용할 경우, 클립보드를 이용하여 붙여넣기를 한 영상이나 다른 영상 처리에 의해 새롭게 생성된 영상들도 산술 및 논리 연산의 입력으로 사용할 수 있는 장점이 있다. 구현이 조금 복잡해질 수 있지만 사용하기에는 편리할 것으로 생각되므로 차분히 만들어보도록 하자.
화면에 떠 있는 영상들의 리스트를 받아오는 방법을 설명하기에 앞서, 먼저 MFC에서 도큐먼트(문서)를 어떻게 관리하는지를 알아야 한다. 그림 7-10은 MFC를 이용하여 다중 문서 인터페이스를 구축할 때 클래스 간의 관계를 보여준다. 여기서 xxx는 프로젝트의 이름을 나타낸다. 다중 문서 인터페이스의 경우, 하나의 프로그램 안에 여러 개의 도큐먼트가 떠 있을 수 있는데, 이러한 도큐먼트들은 도큐먼트 템플릿document template에 연결 리스트linked list의 형태로 관리된다. 그러므로 도큐먼트 템플릿에 연결된 모든 도큐먼트를 차례대로 방문하면 현재 화면에 떠 있는 모든 도큐먼트에 접근할 수 있게 된다.
그림 7-10을 보면 하나의 도큐먼트에 여러 개의 뷰가 붙어 있는 것을 볼 수 있다. 이 책에서 만들고 있는 ImageTool 프로그램은 도큐먼트 하나에 오직 하나의 뷰만 존재한다. 하나의 도큐먼트에 여러 개의 뷰가 붙어 있을 경우, 동일한 데이터를 여러 가지 형태로 화면에 나타낼 수 있다. 예를 들어 MS 엑셀의 경우 도큐먼트의 데이터를 표로 볼 수도 있고, 그래프의 형태로 볼 수도 있는데 이것이 하나의 도큐먼트에 여러 개의 뷰가 연결된 형태이다. 또한 CxxxApp 클래스에 두 개 이상의 도큐먼트 템플릿이 존재할 수 있는데, 이 경우 전혀 다른 형태의 도큐먼트를 하나의 프로그램에서 처리할 수 있게 된다. 그림에서는 다른 형태의 도큐먼트를 CyyyDoc으로 표현하였다. 이 책에서도 추후 16장에서 AVI 동영상 파일을 처리하기 위해 새로운 도큐먼트 템플릿을 사용하는 방법에 대하여 설명할 것이다.