在ATL无窗口ACTIVEX控件中响应timer消息

  最近,在尝试着写一个能够显示静态和动态图片的ACTIVEX控件,就像QQ的一样,能插入到RICHEDIT控件中。由于只是在尝试,很多功能都没有实现,只实现显示。如果单单显示静态图片,是很简单的。但要是显示动态GIF图片,就有一定的难度,首先要分析图片的帧数,还要控件图片按顺序显示。如果写成控件,还要保证插入到RICHEDIT控件中还能动起来,就更有难度了,因为ATL在响应TIMER事件的时候有很多困难要克服。

  对于图片的显示,由于只是在尝试,我只提供一个接口函数Play(),图片是写死在控件里的。让控件显示图片只要调用该函数即可。基于原理是,在Play()中,载入图片,判断图片是不是动态的GIF图片,不是,则直接显示,是动态的GIF,则创建一个TIMER对象,将TIMER的时间间隔设置为图片的第一帧的应该显示的时间长度,在OnTimer()中,则将图片应该显示的帧切换到下一帧,并修改TIMER的时间间隔为该帧应该显示的时间长度。至于如何显示动态GIF图片,可以看我写的另一篇文章。

  网上有文章说,要让ATL控件响应TIMER消息,只要将控件设为有窗口,然后调用SetTimer()来设置TIMER,然后在OnTimer()中响应timer消息即可。我照着做了,当要生成的控件显示动态图片时,在测试容器中测试的时候是会动的,但当把控件插入到richedit控件中时,图片就不会动了。据检查,原因应该是窗口句柄为NULL。(明明设为有窗口控件了,m_hWnd仍然为NULL,真的不知道为什么。如果有人知道的话,希望你能告诉我。因为我也是刚刚接触COM组件的开发&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值