더북(TheBook)

5.3.1 영상을 새 창으로 띄우기 위한 프로그램 구조

앞서 5.2절에서는 ImageTool 프로그램에서 [파일] > [새로 만들기] 메뉴를 선택하여 임의의 크기의 새 영상을 만드는 방법을 설명하였다. 기본적으로 새 차일드 프레임 윈도우를 띄우는 작업은 [새로 만들기] 메뉴 선택과 같은 작업이 있어야 가능하다. [새로 만들기] 메뉴 항목을 선택하면 ImageTool 프로그램은 새 도큐먼트를 새로 생성하고, 이를 새로운 차일드 프레임 윈도우로 나타내기 위한 작업을 수행한다. 특정 영상을 새 창으로 띄우기 위해서는 새 도큐먼트를 생성하는 과정에서 m_Dib 멤버 변수의 값을 설정해주어야 한다.

그림 5-33은 특정 영상을 새 창으로 띄우는 방법을 순서도의 형태로 보여준다. 그림 5-33에서 주의 깊게 보아야 할 부분은 중앙의 마름모꼴의 조건 분기문이다. 이 조건 검사는 CImageToolDoc 클래스의 OnNewDocument 함수에 들어가는 내용이며, 여기서 CImageToolApp 클래스의 멤버 변수 m_pNewDib의 값을 조사하여 두 가지 동작을 선택하게 된다. m_pNewDibNULL이면 일반적인 영상 새로 만들기 기능을 수행한다. 그러나 m_pNewDibNULL이 아니면 새로 만들어지는 도큐먼트의 m_Dibm_pNewDib가 가리키는 영상을 복사하여 새로 만들게 될 것이다. 그러므로 특정 영상을 새 창으로 나타내기 위해서는 CImageToolApp 클래스의 멤버 변수 m_pNewDib에 해당 영상 데이터의 포인터를 저장한 후, 파일 새로 만들기 명령을 강제로 발생시키면 된다.

그림 5-33 영상을 새 창으로 띄우기 위한 프로그램 구조도

그림 5-33에서 맨 위에 나타난 파일 새로 만들기 명령이란 기본적으로 ImageTool 프로그램 메뉴 중에서 [파일] > [새로 만들기] 메뉴 항목을 선택하는 것을 의미한다. 그러나 필요한 경우 사용자가 직접 메뉴를 선택하지 않아도 해당 메뉴를 선택한 것처럼 윈도우 메시지를 발생시킬 수 있다. 이러한 작업을 수행하는 함수가 SendMessage 함수이며, 이 함수의 기본형은 다음과 같다.

LRESULT SendMessage(
    UINT message,
    WPARAM wParam = 0,
    LPARAM lParam = 0
);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.