더북(TheBook)

COutputWnd 클래스에는 하나의 탭 윈도우와 세 개의 리스트 박스 윈도우가 멤버로 선언되어 있다. COutputList 클래스는 CListBox 클래스를 상속받은 클래스이며, CListBox 기능에 단순히 컨텍스트 메뉴 기능만 추가되어 있다. CMFCTabCtrlCListBox는 모두 MFC에서 제공하는 클래스이다. 이 네 개의 윈도우는 모두 COutputWnd 클래스의 멤버 함수인 OnCreate에서 생성된다. OnCreate 함수에서 이들 윈도우를 생성하는 코드만 요약하면 아래와 같다.

m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 1);
m_wndOutputBuild.Create(dwStyle, rectDummy, &m_wndTabs, 2);
m_wndOutputDebug.Create(dwStyle, rectDummy, &m_wndTabs, 3);
m_wndOutputFind.Create(dwStyle, rectDummy, &m_wndTabs, 4);

m_wndTabs.AddTab(&m_wndOutputBuild, strTabName, (UINT)0);
m_wndTabs.AddTab(&m_wndOutputDebug, strTabName, (UINT)1);
m_wndTabs.AddTab(&m_wndOutputFind, strTabName, (UINT)2);

즉, m_wndTabs 윈도우를 COutputWnd 클래스의 자식 윈도우로 생성하고, 세 개의 리스트 박스 윈도우 m_wndOutputBuild, m_wndOutputDebug, m_wndOutputFind를 각각 m_wndTabs 윈도우의 자식 윈도우로 생성한다. 그리고 세 리스트 박스를 m_wndTabs 윈도우에 붙이는 작업을 수행한다.

ImageTool 프로그램에서는 하나의 리스트 박스 출력창만 있으면 충분하다. 탭도 굳이 필요 없다. 그러므로 앞의 코드에서 탭 윈도우 및 빌드, 디버그, 찾기 리스트 박스 생성 코드를 모두 지워버리고, 새로운 리스트 박스 윈도우를 하나 만들어서 COutputWnd에 붙이면 될 것 같다. 자, 이제 본격적으로 COutputWnd 클래스를 수정하는 작업을 시작해보자.

먼저 COutputWnd 클래스의 멤버 변수를 정리하자. 소스 5-19는 OutputWnd.h 파일에서 COutputWnd 클래스의 정의를 수정한 결과 코드이다. 기존의 멤버 변수들을 모두 지워버리고, COutputList 클래스 타입의 멤버 변수 m_wndOutputInfo 하나를 새로 추가하였다. 그리고 클래스 선언 맨 뒤에 public 속성의 AddString이라는 멤버 함수를 새로 추가하였다. 이 함수를 이용하여 CImageToolDoc 클래스에서 영상 처리 정보 문자열을 출력창에 나타나게끔 할 것이다.

소스 5-19 영상 정보 출력창 구성을 위한 COutputWnd 클래스 수정(OutputWnd.h)
class COutputWnd : public CDockablePane
{
// 생성입니다.
public:
    COutputWnd();

    void UpdateFonts();

// 특성입니다.
protected:
    COutputList m_wndOutputInfo;

protected:
    void AdjustHorzScroll(CListBox& wndListBox);

// 구현입니다.
public:
    virtual ~COutputWnd();

protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);

    DECLARE_MESSAGE_MAP()

public:
    void AddString(CString message);
};
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.