UIGifAnim.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef GifAnimUI_h__
  2. #define GifAnimUI_h__
  3. #pragma once
  4. namespace DuiLib
  5. {
  6. class CControl;
  7. #define EVENT_TIEM_ID 100
  8. class UILIB_API CGifAnimUI : public CControlUI
  9. {
  10. public:
  11. CGifAnimUI(void);
  12. ~CGifAnimUI(void);
  13. LPCTSTR GetClass() const;
  14. LPVOID GetInterface(LPCTSTR pstrName);
  15. void DoInit() override;
  16. void DoPaint(HDC hDC, const RECT& rcPaint) override;
  17. void DoEvent(TEventUI& event) override;
  18. void SetVisible(bool bVisible = true ) override;
  19. void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) override;
  20. void SetBkImage(LPCTSTR pStrImage);
  21. LPCTSTR GetBkImage();
  22. void SetAutoPlay(bool bIsAuto = true );
  23. bool IsAutoPlay() const;
  24. void SetAutoSize(bool bIsAuto = true );
  25. bool IsAutoSize() const;
  26. void PlayGif();
  27. void PauseGif();
  28. void StopGif();
  29. private:
  30. void InitGifImage();
  31. void DeleteGif();
  32. void OnTimer( UINT_PTR idEvent );
  33. void DrawFrame( HDC hDC ); // 绘制GIF每帧
  34. Gdiplus::Image* LoadGifFromFile(LPCTSTR pstrGifPath);
  35. Gdiplus::Image* LoadGifFromMemory( LPVOID pBuf,size_t dwSize );
  36. private:
  37. Gdiplus::Image *m_pGifImage;
  38. UINT m_nFrameCount; // gif图片总帧数
  39. UINT m_nFramePosition; // 当前放到第几帧
  40. Gdiplus::PropertyItem* m_pPropertyItem; // 帧与帧之间间隔时间
  41. CDuiString m_sBkImage;
  42. bool m_bIsAutoPlay; // 是否自动播放gif
  43. bool m_bIsAutoSize; // 是否自动根据图片设置大小
  44. bool m_bIsPlaying;
  45. };
  46. }
  47. #endif // GifAnimUI_h__