더북(TheBook)

2.3.6 CFirstView 클래스 분석

CFirstView 클래스는 데이터의 출력을 담당하는 뷰 클래스이다. 뷰 영역은 차일드 프레임 윈도우 안의 흰색 영역이며 이 영역 안에 글씨를 출력하거나 그림을 그리는 작업을 CFirstView 클래스에서 담당한다. CFirstView 클래스는 CView 클래스의 자식 클래스이며 FirstView.h와 FirstView.cpp 파일에 구현되어 있다.

그림 2-39는 클래스 뷰에 나타난 CFirstView 클래스의 멤버 함수 목록을 보여준다. 생성자 함수와 GetDocument, OnBeginPrinting, OnDraw, OnEndPrinting 등의 함수가 만들어져 있는데, 이 책에서는 프린팅 관련된 내용은 설명하지 않을 것이다. 여기서는 오직 OnDraw 함수에 대해서만 자세히 알아보도록 하자.

그림 2-39 CFirstView 클래스의 멤버 함수

OnDraw 함수를 이해하는 것은 매우 중요하다. CFirstView 클래스의 OnDraw 함수는 뷰 영역을 다시 그려야 할 필요가 있을 때 자동으로 실행된다. 즉, 응용 프로그램의 크기가 변경되거나 다른 응용 프로그램에 의해 일부 가려졌던 부분이 다시 전면으로 나올 때 호출된다. 또는 내부 데이터가 변경되어 프로그래머가 Invalidate 또는 UpdateAllViews 등의 함수를 사용하여 강제로 다시 그리기를 시도할 때도 OnDraw 함수가 호출된다. 이 함수는 CView 클래스에 가상 함수로 선언되어 있고, 실제 구현은 프로그래머가 생성한 CFirstView 클래스에서 작성해야 한다. MFC 응용 프로그램 마법사가 자동으로 생성해주는 OnDraw 함수는 다음과 같다.

void CFirstView::OnDraw(CDC* /*pDC*/)
{
    CFirstDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if(!pDoc)
        return;

    // TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
}

OnDraw 함수의 인자를 보면 CDC 클래스의 포인터를 넘겨주는 것을 볼 수 있다. CDC 클래스는 윈도우에서 그림을 그릴 때 필요한 디바이스 컨텍스트DC, Device Context를 추상화한 클래스이다. 디바이스 컨텍스트는 글씨, 그림, 비트맵 등 출력에 관련된 모든 정보를 모아둔 데이터 구조체이다. 현재 뷰 영역에 특정 색의 선을 그리거나, 특정 폰트를 사용하여 글씨를 출력하려면 디바이스 컨텍스트 정보를 변경해주어야 한다. OnDraw 함수의 인자로 넘어온 CDC 클래스는 윈도우에서 기본적으로 사용하는 출력 방법에 대한 정보를 가지고 있다. MFC 응용 프로그램 마법사가 만들어준 OnDraw 함수의 코드에는 기본적으로 함수의 인자 pDC 변수 앞 뒤로 주석 처리가 되어 있는데, 실제 그리기 동작을 수행할 때에는 주석 지시자(/* */)를 삭제하고 사용한다.

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