더북(TheBook)

CImageToolDoc 클래스의 OnNewDocument 함수는 소스 5-12와 같은 형태로 수정하도록 하자.

소스 5-12 영상을 새 창으로 띄우기 기능이 추가된 OnNewDocument 함수(ImageToolDoc.cpp)
BOOL CImageToolDoc::OnNewDocument()
{
    if (!CDocument::OnNewDocument())
        return FALSE;

    BOOL ret = TRUE;

    if (theApp.m_pNewDib == NULL)
    {

        CFileNewDlg dlg;
        if (dlg.DoModal() == IDOK)
        {
            if (dlg.m_nType == 0) // 그레이스케일 비트맵
                ret = m_Dib.CreateGrayBitmap(dlg.m_nWidth, dlg.m_nHeight);
            else // 트루컬러 비트맵
                ret = m_Dib.CreateRgbBitmap(dlg.m_nWidth, dlg.m_nHeight);
        }
        else
        {
            ret = FALSE;
        }
    }
    else
    {
        m_Dib = *(theApp.m_pNewDib);
        theApp.m_pNewDib = NULL;
    }

    return ret;
}

수정된 OnNewDocument 함수에서는 그림 5-33에서 설명한 조건 검사를 수행한다. if 문을 사용하여 CImageToolApp 클래스의 멤버 변수 m_pNewDibNULL인지를 검사하여, NULL이면 5.2절에서 작성한 영상 새로 만들기 대화 상자를 띄운다. 만약 m_pNewDibNULL이 아니면 m_pNewDib가 가리키는 영상을 새로 생성되는 도큐먼트의 m_Dib 멤버 변수에 복사한다. 비트맵 복사는 IppDib 클래스에 재정의한 대입 연산자를 사용하였다. 그리고 m_pNewDib 값은 다시 NULL로 설정한다.

일단 여기까지 코드를 작성하여 영상을 새 창으로 띄우는 코드는 완성되었다. 지금까지 입력한 코드에서 오타나 잘못된 사항은 없는지 F7 키를 눌러서 한 번 빌드해보자. 이제 바로 AfxNewBitmap 전역 함수를 호출하여 실제로 영상을 새 창으로 띄우는 작업을 해보자.

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