DuiLib中的GifAnim控件无法加载或者播放Gif动画的解决办法
一、无法加载gif图片的问题,因为GifAnim控件加载图片使用的是Gdi+,然而在控件中并没有初始化Gdi+,所以只需要在自己的主窗口类中添加如下代码:
1 // 全局 2 Gdiplus::GdiplusStartupInput gdiplusStartupInput; 3 ULONG_PTR gdiplusToken; 4 // 初始化函数中 5 //初始化GDI+. 6 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
二、gif图片无法播放的原因是在自己窗口中响应了WM_TIMER消息,但是没有把不属于自己定义的定时器返回给系统,导致GifAnim控件无法捕获到播放Gif的定时器。所以讲HandleMessage函数中的内容修改如下即可:
1 LRESULT lRes = 0; 2 BOOL bHandled = TRUE; 3 switch (uMsg) { 4 case WM_CREATE: lRes = OnCreate(uMsg, wParam, lParam, bHandled); break; 5 case WM_CLOSE: lRes = OnClose(uMsg, wParam, lParam, bHandled); break; 6 case WM_DESTROY: lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break; 7 case WM_NCACTIVATE: lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break; 8 case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break; 9 case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break; 10 case WM_NCHITTEST: lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break; 11 case WM_SIZE: lRes = OnSize(uMsg, wParam, lParam, bHandled); break; 12 case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break; 13 case WM_SYSCOMMAND: lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break; 14 case WM_TIMER: 15 if (wParam == 122) 16 { 17 18 } 19 else 20 { 21 bHandled = FALSE; 22 } 23 break; 24 default: 25 bHandled = FALSE; 26 } 27 if (bHandled) return lRes; 28 if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes; 29 return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
只获取自己的定时器,非自己的定时器再返回给系统即可。