더북(TheBook)

5.3.4 복사 및 붙여넣기 기능 구현

새 창으로 영상을 띄우는 기능을 이용하여 클립보드로부터 비트맵 영상을 붙여넣기 하는 기능을 구현해보자. 더불어 ImageTool에서 비트맵을 클립보드로 복사하는 기능도 만들어보자. 이미 IppDib 클래스에 클립보드로 복사하거나 클립보드로부터 비트맵을 불러오는 기능을 만들어놓았기 때문에, 여기서는 편집 관련 메뉴 이벤트 처리기를 추가하여 IppDib 멤버 함수를 호출만하면 쉽게 기능 구현이 완료될 것이다.

대부분의 Windows 응용 프로그램은 [편집] 메뉴를 가지고 있기 때문에 MFC 응용 프로그램 마법사도 [편집] 메뉴를 기본으로 만들어준다. 그러나 MFC 응용 프로그램 마법사는 오직 메뉴 항목을 생성해줄 뿐이며, 해당 메뉴를 선택했을 때 수행해야 할 클립보드를 이용한 복사, 붙여넣기, 잘라내기 등의 기능은 프로그래머가 직접 코드를 작성해야 한다.

먼저 클립보드를 이용한 복사하기 기능을 만들 것이다. [편집] > [복사] 메뉴에 대한 이벤트 처리기 함수를 추가해보자. [편집] > [복사] 메뉴는 기본적으로 존재하기 때문에 [복사] 메뉴 항목에 대한 이벤트 처리기만 추가하면 된다. [복사] 메뉴에 대한 이벤트 처리기 정보는 표 5-7에 나타내었다. ImageTool 프로그램에서 복사할 대상은 m_Dib에 저장된 비트맵 영상이기 때문에 CImageToolDoc 클래스가 이벤트를 처리하기에 적합하다.

표 5-7 [복사] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_EDIT_COPY

CImageToolDoc

COMMAND

OnEditCopy

OnEditCopy 함수에 추가할 내용은 소스 5-14에 나타내었다. 이미 IppDib 클래스에 클립보드 관련 기능을 멤버 함수로 만들어 놨기 때문에 OnEditCopy 함수에서 작성할 코드는 매우 간단하다. m_Dib가 정상적인 비트맵 객체를 가지고 있는지 검사한 후, CopyToClipboard 멤버 함수를 호출하여 해당 DIB를 클립보드로 복사하고 있다.

소스 5-14 [복사] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
void CImageToolDoc::OnEditCopy()
{
    if (m_Dib.IsValid())
        m_Dib.CopyToClipboard();
}

이로써 영상을 클립보드로 복사하는 기능이 추가되었다. 이번에는 클립보드에서 비트맵 영상을 ImageTool 프로그램으로 가져와 새 창으로 띄우는 붙여넣기 기능을 구현해보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.