ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OnPaint OnDraw
    I'm a Developer/MFC 2015. 8. 18. 15:55

    OnPaint는 CWnd클래스의 멤버함수이고 OnDraw는 CView클래스의 멤버함수이다.

    즉, OnPaint함수는 윈도우창 전체에 영향을 미치는 그리기 함수이고 OnDraw는 메뉴와 같은 윈도우의 기능을 제외한 순수 View부분에 그리는 함수이다. 그렇기 때문에 OnDraw함수는 프린터에 출력되는 영역을 그리기위해 쓴다고 말하기도 한다.

    OnDraw함수의 원형은 다음과 같다.

    virtual void OnDraw( CDC* pDC )

    OnPaint함수의 원형은 다음과 같다.

    afx_msg void OnPaint( )

    afx_msg는 메시지에 의해 호출되는 함수임을 나타낸다.

    위와 같은 관계가 있기 때문에 OnDraw함수는 OnPaint함수 안에서 호출된다.

    void CTEST06View::OnDraw(CDC* pDC)

    {

    CTEST06Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    if (!pDoc)

    return;


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

    CRect rect;

    GetClientRect(rect);   

    pDC->FillSolidRect(rect,RGB(255,0,0));

    }

    위의 코드를 적어주면 아래와 같이 나온다.


    void CTEST06View::OnPaint()

    {

    // 배경화면 깔기

    CPaintDC dc(this);

    CRect rect;

    GetClientRect(rect);

    dc.FillSolidRect(rect,RGB(255,255,0));

    }


    한편 위와 같이 View에서 OnPaint() 함수를 오버로딩하여 사각형을 그려줘도 똑같이 적용이 되겠지만 위의 OnPaint를 동시에 적용한다면 OnDraw는 호출되지 않는다는점을 주의하여야 한다.



    'I'm a Developer > MFC' 카테고리의 다른 글

    Document Interface에서 Dialog 다루기  (0) 2015.08.18
    fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.  (0) 2015.08.18
    윈도우 메뉴  (0) 2015.08.17
    ComboBox  (0) 2015.08.17
    3. 윈도우 프로그램의 뼈대  (0) 2015.08.10

    댓글

Designed by Tistory.