• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 怎樣實現動畫背景旗幟

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    作者:賈旭濱(譯) //原著:Juan Carlos Urbina //譯者:重慶大學光電工程學院賈旭濱 //歡迎大家批評指教,謝謝! 以下代碼是關于用類CmdiMainClient來顯示動畫背景旗幟的一個例子。原理是很簡單的,我們只需要一系列連續的位圖,并且讓它連續顯示。在這個例
    作者:賈旭濱(譯)

    //原著:Juan Carlos Urbina
    //譯者:重慶大學光電工程學院  賈旭濱
    //歡迎大家批評指教,謝謝!

        以下代碼是關于用類CmdiMainClient來顯示動畫背景旗幟的一個例子。原理是很簡單的,我們只需要一系列連續的位圖,并且讓它連續顯示。在這個例子中你可以用鼠標的右鍵來開始/停止這個動畫,如果點左鍵的話,就可以顯示一個子窗口,來保持動畫是繼續。為了你的方便,你可以把代碼直接從瀏覽器中拷貝下去,并且插到你的代碼中就行了。以下是代碼:


    #include "stdafx.h"
    #include "banner.h"
    #include "mainfrm.h"

    #include "resource.h"

    #ifdef _DEBUG
    #undef THIS_FILE
    static char BASED_CODE THIS_FILE[] = __FILE__;
    #endif

    /////////////////////////////////////////////////////////////////////////////
    // CMdiMainClient

    CMdiMainClient::CMdiMainClient()
        :    m_sizeClient(0, 0)
            
    {
        VERIFY (m_bmpBackGround.LoadBitmap(IDB_BCKGRD));
        ASSERT (m_bmpBackGround.GetSafeHandle());

        VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP0));
        ASSERT (m_bmpBackGround2.GetSafeHandle());

        BmpLoaded = 1;
        StopRotation = FALSE;
    }

    CMdiMainClient::~CMdiMainClient()
    {
        if(m_bmpBackGround.GetSafeHandle())
            m_bmpBackGround.DeleteObject();

        if(m_bmpBackGround2.GetSafeHandle())
            m_bmpBackGround2.DeleteObject();
    }


    BEGIN_MESSAGE_MAP(CMdiMainClient, CWnd)
        //{{AFX_MSG_MAP(CMdiMainClient)
            // NOTE - the ClassWizard will add and remove mapping macros here.
        ON_WM_TIMER()
        ON_WM_ERASEBKGND()
        ON_WM_RBUTTONDOWN()
        ON_WM_LBUTTONDOWN()
        ON_WM_SIZE()
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()


    /////////////////////////////////////////////////////////////////////////////
    // CMdiMainClient message handlers
    BOOL CMdiMainClient::OnEraseBkgnd(CDC* pDC)
    {
        // Erase only the area needed
        CRect rect;
        GetClientRect(&rect) ;
       
        SetTimer(0,300,NULL);
                                           
        // Place the bitmap
        BITMAP bm ;
        CDC dcMem ;

        BITMAP bm2 ;
        CDC dcMem2;

         
        VERIFY(m_bmpBackGround.GetObject(sizeof(bm), (LPVOID)&bm));
        dcMem.CreateCompatibleDC(NULL);
        CBitmap* pbmpOld = (CBitmap*)dcMem.SelectObject(&m_bmpBackGround);
        ASSERT(pbmpOld) ;
        // Display red background
        pDC->StretchBlt(0, 0, rect.right, rect.bottom, &dcMem, 0,
                    0, bm.bmWidth, bm.bmHeight,SRCCOPY);

        VERIFY(m_bmpBackGround2.GetObject(sizeof(bm2), (LPVOID)&bm2));
        dcMem2.CreateCompatibleDC(NULL);
        dcMem2.SelectObject(&m_bmpBackGround2);
        // Display picture background
        pDC->StretchBlt(200,100,400, 200, &dcMem2, 0,0, bm2.bmWidth, bm2.bmHeight,
                        SRCCOPY);

        // Display Instructions
        pDC->SetBkColor(RGB(255,0,0));
        pDC->SetTextColor(RGB(192,192,192));
        pDC->TextOut(480, 500, "Mouse Right Click to Stop/Start Special Effects");
        pDC->TextOut(480, 515, "Mouse Left-Click to Show Child Window");

        // CleanUp
        dcMem.SelectObject(pbmpOld) ;

        return TRUE;
    }      

    ////////////////////////////////////////////////////////////////////
    //
    void CMdiMainClient::OnSize(UINT nType, int cx, int cy)
    {
        Default() ;                
        // if the app is just starting up, save the window
        // dimensions and get out

        if ((m_sizeClient.cx == 0) && (m_sizeClient.cy==0))
            {
            m_sizeClient.cx = cx;
            m_sizeClient.cy = cy;

            return ;
            }

        // if the size hasn't changed, break and pass to default

        if ((m_sizeClient.cx == cx) && ( m_sizeClient.cy == cy))
        {
            return ;
        }

        // window size has changed so save new dimensions and force
        // entire background to redraw, including icon backgrounds

        m_sizeClient.cx = cx;
        m_sizeClient.cy = cy;
                 
        RedrawWindow(NULL, NULL,
            RDW_INVALIDATE|RDW_ERASE|RDW_ERASENOW|RDW_ALLCHILDREN);    
                
        return ;                
    }

    void CMdiMainClient::OnTimer(UINT nIDEvent)
    {
        DisplayNextLogoFrame();
        CWnd::OnTimer(nIDEvent);
    }


    void CMdiMainClient::DisplayNextLogoFrame()
    {
            CRect rect;
            GetClientRect(&rect) ;
        
            BITMAP bm2 ;
            CDC dcMem2;

            CDC *pDC = GetDC();

            if (!StopRotation)
            {
                // Select next logo frame to be displayed
                switch (BmpLoaded)
                {
            case 1:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP1));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 2:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP2));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 3:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP3));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 4:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP4));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 5:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP5));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 6:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP6));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 7:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP7));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 8:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP8));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                case 9:    if(m_bmpBackGround2.GetSafeHandle())
                        m_bmpBackGround2.DeleteObject();
                VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP9));
                ASSERT (m_bmpBackGround2.GetSafeHandle());
                break;
                }
                // Change Bitmap index
                if (BmpLoaded == 9)
                    BmpLoaded = 0;
                else
                    BmpLoaded++;
            }
              
        VERIFY(m_bmpBackGround2.GetObject(sizeof(bm2), (LPVOID)&bm2));
        dcMem2.CreateCompatibleDC(NULL);
        dcMem2.SelectObject(&m_bmpBackGround2);
        pDC->StretchBlt(200,100,400, 200, &dcMem2, 0,0, bm2.bmWidth, bm2.bmHeight,
            SRCCOPY);

        ReleaseDC(pDC);
    }

    void CMdiMainClient::OnRButtonDown(UINT nFlags, CPoint point)
    {
        if (StopRotation)
            StopRotation = FALSE;
        else
            StopRotation = TRUE;

        CWnd::OnRButtonDown(nFlags, point);
    }

    void CMdiMainClient::OnLButtonDown(UINT nFlags, CPoint point)
    {
        m_Hide_Logo = TRUE;
        KillTimer(0);

        // Display Application
        ((CBannerApp*)AfxGetApp())->pDocTemplate->OpenDocumentFile(NULL);

        CWnd::OnLButtonDown(nFlags, point);
    }

    // MdiMainClient.h : header file
    //

    /////////////////////////////////////////////////////////////////////////////
    // CMdiMainClient window

    extern BOOL m_Hide_Logo;

    class CMdiMainClient : public CWnd
    {
    // Construction
    public:
        CMdiMainClient();

    // Attributes
    protected:
        CBitmap m_bmpBackGround2;
        CBitmap m_bmpBackGround;

        int BmpLoaded;
    public:
        BOOL StopRotation;
        CSize m_sizeClient;

    // Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMdiMainClient)
        //}}AFX_VIRTUAL

    // Implementation
    public:
        void Display_Blank_Bitmap();
        void DisplayNextLogoFrame();
        virtual ~CMdiMainClient();
        // Generated message map functions
    protected:
        //{{AFX_MSG(CMdiMainClient)
            // NOTE - the ClassWizard will add and remove member functions here.
            afx_msg BOOL OnEraseBkgnd(CDC* pDC);
            afx_msg void OnSize(UINT nType, int cx, int cy);
            afx_msg void OnTimer(UINT nIDEvent);
            afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
            afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    }; 

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>