设为首页 加入收藏

TOP

c++编写gif动画现实控件(三)
2012-11-13 13:24:09 来源: 作者: 【 】 浏览:824
Tags:编写 gif 动画 现实 控件


    
    DWORD WINAPI CGIFImage::DrawGIF(LPVOID l)
   
    {
   
    _sTHPar *par=(_sTHPar*)l;
   
    int FrameCount=0;
   
    long lPause=0;
   
    HDC dc=::GetWindowDC(par->m_hWnd);
   
    RECT rWin;
   
    ::GetClientRect(par->m_hWnd,&rWin);
   
    RectF rF(rWin.left,rWin.top,rWin.right,rWin.bottom);
   
    GUID    Guid = FrameDimensionTime;
   
    par->m_Img->SelectActiveFrame(&Guid,FrameCount);
   
    Graphics   gh(dc);
   
    gh.DrawImage(par->m_Img,rF,0,0,par->m_Img->GetWidth(),par->m_Img->GetHeight(),UnitPixel);
   
    DWORD dTick=GetTickCount();
   
    lPause = ((long*)par->m_item->value)[FrameCount]*10;
   
    while(1)
   
    {
   
    Sleep(1);
   
    MSG msg;
   
    if(PeekMessage(&msg,0,0,0,PM_REMOVE))
   
    {
   
    if(msg.message==WM_GIFSTOP)
   
    {
   
    ::ReleaseDC(par->m_hWnd,dc);
   
    delete par->m_Img;
   
    delete[] par->m_item;
   
    delete par;
   
    return 0;
   
    }
   
    }
   
    else
   
    {
   
    if(par->m_Count>1)
   
    {
   
    if(GetTickCount()-dTick>=lPause)
   
    {
   
    if ((FrameCount+1)==par->m_Count)
   
    {
   
    FrameCount=0;
   
    par->m_Img->SelectActiveFrame(&Guid,0);
   
    }
   
    else
   
    {
   
    par->m_Img->SelectActiveFrame(&Guid,++FrameCount);
   
    }
   
    Graphics   gh(dc);
   
    gh.DrawImage(par->m_Img,rF,0,0,par->m_Img->GetWidth(),par->m_Img->GetHeight(),UnitPixel);
   
    lPause = ((long*)par->m_item->value)[FrameCount]*10;
   
    dTick=GetTickCount();
   
    }
   
    }
   
    }
   
    }
   
    return 0;
   
    }
   
    void CGIFImage::Pause()
   
    {
   
    if(m_ThreadId)
   
    {
   
    typedef HANDLE  (WINAPI  *OPENTHREAD) (DWORD , BOOL , DWORD );
   
    OPENTHREAD lpfnOpenThread = (OPENTHREAD)GetProcAddress(LoadLibrary(“kernel32.dll”),“OpenThread”);
   
    HANDLE hThread = lpfnOpenThread(THREAD_ALL_ACCESS, FALSE, m_ThreadId);
   
    SuspendThread(hThread);
   
    m_state=0;
   
    }
   
    }
   
    void CGIFImage::Resume()
   
    {
   
    if(m_ThreadId)
   
    {
   
    typedef HANDLE (WINAPI  *OPENTHREAD) (DWORD , BOOL , DWORD );
   
    OPENTHREAD lpfnOpenThread = (OPENTHREAD)GetProcAddress(LoadLibrary(“kernel32.dll”),“OpenThread”);
   
    HANDLE hThread = lpfnOpenThread(THREAD_ALL_ACCESS, FALSE, m_ThreadId);
   
    ResumeThread(hThread);
   
    m_state=1;
   
    }
   
    }

      

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇矩阵链乘法 下一篇由点集序列或数组创建凸边形

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: