设为首页 加入收藏

TOP

c++编写gif动画现实控件(一)
2012-11-13 13:24:09 】 浏览:1300
Tags:编写 gif 动画 现实 控件

    gif.h
   
    [cpp]
   
    class CGIFImage : public CStatic
   
    {
   
    // Construction
   
    public:
   
    CGIFImage();
   
    void LoadGIF(WCHAR *);
   
    void Pause();
   
    void Resume();
   
    int m_state;
   
    // Attributes
   
    private:
   
    struct _sTHPar
   
    {
   
    Image *m_Img;
   
    PropertyItem *m_item;
   
    int m_Count;
   
    HWND m_hWnd;
   
    }sThPar;
   
    Image *m_Img;
   
    DWORD m_ThreadId;
   
    public:
   
    // Operations
   
    public:
   
    // Overrides
   
    // ClassWizard generated virtual function overrides
   
    //{{AFX_VIRTUAL(CGIFImage)
   
    //}}AFX_VIRTUAL
   
    // Implementation
   
    public:
   
    virtual ~CGIFImage();
   
    // Generated message map functions
   
    protected:
   
    //{{AFX_MSG(CGIFImage)
   
    afx_msg void OnPaint();
   
    //}}AFX_MSG
   
    static DWORD WINAPI DrawGIF(LPVOID);
   
    DECLARE_MESSAGE_MAP()
   
    };
   
    gif.cpp
   
    [cpp]
   
    CGIFImage::CGIFImage()
   
    {
   
    m_ThreadId=0;
   
    m_Img=0;
   
    m_state=-1;
   
    }
   
    CGIFImage::~CGIFImage()
   
    {
   
    if(m_ThreadId)
   
    {
   
    ::PostThreadMessage(m_ThreadId,WM_GIFSTOP,0,0);
   
    }
   
    }
   
    BEGIN_MESSAGE_MAP(CGIFImage, CStatic)
   
    //{{AFX_MSG_MAP(CGIFImage)
   
    ON_WM_PAINT()
   
    //}}AFX_MSG_MAP
   
    END_MESSAGE_MAP()
   
    /////////////////////////////////////////////////////////////////////////////
   
    // CGIFImage message handlers
   
    void CGIFImage::OnPaint()
   
    {
   
    CPaintDC dc(this); // device context for painting
   
    // TODO: Add your message handler code here
   
    if(m_ThreadId && m_Img)
   
    {
   
    RECT rWin;
   
    GetClientRect(&rWin);
   
    RectF rF(rWin.left,rWin.top,rWin.right,rWin.bottom);
   
    Graphics   gh(dc.m_hDC);
   
    gh.DrawImage(m_Img,rF,0,0,m_Img->GetWidth(),m_Img->GetHeight(),UnitPixel);
   
    }
   
    // Do not call CStatic::OnPaint() for painting messages
   
    }
   
    void CGIFImage::LoadGIF(WCHAR *wzFile)
   
    {
   
    if(m_ThreadId)
   
    {
   
    ::PostThreadMessage(m_ThreadId,WM_GIFSTOP,0,0);
   
    }
   
    m_Img=Image::FromFile(wzFile,FALSE);
   
    UINT count=m_Img->GetFrameDimensionsCount();
   
    GUID *pDimensionIDs=(GUID*)new GUID[count];
   
    m_Img->GetFrameDimensionsList(pDimensionIDs, count);
   
    WCHAR strGuid[39];
   
    StringFromGUID2(pDimensionIDs[0], strGuid, 39);
   
    UINT frameCount=m_Img->GetFrameCount(&pDimensionIDs[0]);
   
    delete []pDimensionIDs;
   
    UINT   FrameDelayNums=m_Img->GetPropertyItemSize(PropertyTagFrameDelay);
   
    PropertyItem *  lpPropertyItem=new  PropertyItem[FrameDelayNums];
   
    m_Img->GetPropertyItem(PropertyTagFrameDelay,FrameDelayNums,lpPropertyItem);
   
    _sTHPar  *sP=new _sTHPar ;
   
    sP->m_hWnd=m_hWnd;
   
    sP->m_Img=m_Img;
   
    sP->m_Count=frameCount;
   
    sP->m_item=lpPropertyItem;
   
    CreateThread(0,0,DrawGIF,sP,0,&m_ThreadId);
   
    m_state=1;
   
    }

   

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目