ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Animation - MFC
    GUI/GDI 2008. 12. 10. 01:37
    class CPractice7_2View : public CView
    {
    ...
    protected:

    // Generated message map functions
    protected:
        //{{AFX_MSG(CPractice7_2View)
    ...
        afx_msg void OnAnimationStart();
        afx_msg void OnAnimationStop();
        afx_msg void OnTimer(UINT nIDEvent);
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

    private:
        static int bitmap_inc;            // 애니메이션 카운터 증가변수
        void ShowCharacter( );
        int m_nBitmapMode;
    };

    int CPractice7_2View::bitmap_inc;            // 애니메이션 카운터 증가변수

    void CPractice7_2View::OnAnimationStart()
    {
        // TODO: Add your command handler code here
        SetTimer(0, 200, NULL);     // 타이머 설정       
        ShowCharacter(); // 비트맵을 0.2초마다 출력   
    }

    void CPractice7_2View::OnAnimationStop()
    {
        // TODO: Add your command handler code here
        KillTimer(0);         // 타이머 해제       
    }

    void CPractice7_2View::OnTimer(UINT nIDEvent)
    {
        // TODO: Add your message handler code here and/or call default
    // {
        ShowCharacter(); // 비트맵을 0.2초마다 출력   
    // }   
        CView::OnTimer(nIDEvent);
    }

    void CPractice7_2View::ShowCharacter()
    {
        CClientDC dc(this);            // 비트맵이 출력된 DC 생성
        CDC memdc;                // 메모리의 DC 생성
        memdc.CreateCompatibleDC(&dc);        // 호환성있는 메모리를 생성
       
        // 리소스에서 비트맵 읽기
        CBitmap bitmap, *oldbitmap, bitmapMask, bitmapBack;
        bitmap.LoadBitmap(IDB_CHARACTER);            // 캐릭터 비트맵
        bitmapMask.LoadBitmap(IDB_CHARACTER_MASK);    // 마스크 미트맵
        bitmapBack.LoadBitmap(IDB_BACKGROUND);        // 배경 비트맵

        // 배경 출력
        oldbitmap = memdc.SelectObject(&bitmapBack);
        dc.BitBlt(0, 0, 256, 256, &memdc, 0, 0, SRCCOPY);

        // 마스크 출력
        memdc.SelectObject(&bitmapMask);
        dc.BitBlt(80, 80, 90, 85, &memdc, 90*bitmap_inc, 0, SRCAND);
       
        // 비트맵 출력
        memdc.SelectObject(&bitmap);
        dc.BitBlt(80, 80, 90, 85, &memdc, 90*bitmap_inc, 0, SRCPAINT);

        // 애니메이션 카운터 증가시킴
        bitmap_inc++;
        if(bitmap_inc > 4)
            bitmap_inc = 0;

        // DC를 복원
        memdc.SelectObject(oldbitmap);
    }


    참조 사이트:
Designed by Tistory.