Win32xx下使用gdiplus编写GIF控件

最近学习Win32xx的使用,想要实现一个GIF控件于是学习一下(其实Win32xx是由自带的类的。),主要通过自绘来实现,主要用到了下面的几个知识点:

  • CStatic需要SS_OWNERDRAW,CButton需要BS_OWNERDRAW。
  • 通过gdiplus读取gif图片的帧,然后通过OnTimer来切换下一帧。

对于添加样式在Win32xx下可以通过重载PreCreate方法,代码如下:

GIFAnimate_PreCreate.cpp

CGIFAnimate继承CStatic类,Win32xx没有OnDrawItem方法,所以查看源码发现可以重载OnMessageReflect方法,然后自己映射到OnDrawItem方法,下面是完整代码:

GIFAnimate.h

GIFAnimate.cpp

测试代码以及演示:

GIFAnimate_Test.cpp

截图:

20160908更新:

  • 更新下代码以及演示图片。
  • 控件必须添加ID,CWnd是通过ID来获取句柄然后把消息分发到子窗口的OnMessageReflect方法的。

参考链接:
http://www.codeproject.com/Articles/27387/Play-GIF-using-GDI
Win32xx源码以及例子代码.
一堆复制粘贴的文章.

没有评论: