더북(TheBook)

이제 OutputWnd.cpp 파일에서 기존 코드를 수정해보자. 기존 탭 윈도우를 생성하는 코드를 모두 거둬내고, m_wndOutputInfo 윈도우를 만드는 코드를 추가해야 한다. 이를 위해 OnCreate 멤버 함수의 코드를 다듬어야 한다. 또한 COutputWnd 윈도우의 크기가 변경될 때, 기존에는 탭 윈도우의 크기를 같이 변경했지만 탭 윈도우를 없애고 곧바로 m_wndOutputInfo 윈도우를 사용할 것이기 때문에 이 부분에서도 코드 수정이 가해져야 한다. 결과적으로 수정된 소스 코드를 소스 5-20에 나열하였다. 혹시 Windows 응용 프로그램에서 윈도우를 생성하는 Create 함수에 대해 익숙하지 않다면 다른 Visual C++ 기본 서적을 참고하기 바란다.

소스 5-20 영상 정보 출력창 구성을 위한 COutputWnd 클래스 수정(OutputWnd.cpp)
int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDockablePane::OnCreate(lpCreateStruct) == -1)
        return -1;

    CRect rectDummy;
    rectDummy.SetRectEmpty();

    // 출력 창을 만듭니다.
    const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;

    if (!m_wndOutputInfo.Create(dwStyle, rectDummy, this, 1))
    {
        TRACE0("출력 창을 만들지 못했습니다.\n");
        return -1;      // 만들지 못했습니다.
    }

    UpdateFonts();

    return 0;
}

void COutputWnd::OnSize(UINT nType, int cx, int cy)
{
    CDockablePane::OnSize(nType, cx, cy);

    // m_wndOutputInfo 크기를 COutputWnd 크기에 맞게 조정
    m_wndOutputInfo.SetWindowPos(NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
  
// FillBuildWindow(),FillDebugWindow(),FillFindWindow() 함수 정의 삭제!

void COutputWnd::UpdateFonts()
{
    m_wndOutputInfo.SetFont(&afxGlobalData.fontRegular);
}

void COutputWnd::AddString(CString message)
{
    m_wndOutputInfo.AddString(message);
    m_wndOutputInfo.SetCurSel(m_wndOutputInfo.GetCount() - 1);
}

소스 5-20에서 UpdateFonts 멤버 함수도 변경되었는데, 이 함수는 출력창의 폰트를 Windows 시스템 설정을 따르도록 설정한다. 소스 5-20의 맨 마지막에는 새로 추가한 AddString 함수가 정의되어 있다. 여기서는 단순히 CListBox 클래스의 멤버 함수인 AddString 함수를 다시 호출하여 문자열을 추가하는 작업을 수행한다. 그리고 새로 추가된 문자열이 자동으로 선택되도록 SetCurSel 함수를 호출하였다. SetCurSel 함수의 인자에 나타나는 GetCount() 함수는 리스트 박스에 존재하는 문자열의 개수를 반환한다.

일단 여기까지 코드를 수정하면 출력창의 UI가 좀 단순한 형태로 변경되었을 것이다. 실제로 F5 키를 눌러서 실행해보면 그림 5-48과 같이 하단의 탭 UI가 사라지고 오직 흰색 출력창만 나타나는 것을 확인할 수 있다. 이제 이 출력창에 영상 처리 정보를 문자열 형태로 출력하는 방법에 대해 알아보자.

그림 5-48 단순화된 영상 정보 출력창
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.