因为工作需要,我需要一个可以显示gif 动图的控件,用来在VBS中显示动图,结果找了半天发现根本没有这样的控件,所以只能搜集资料自己来制作一个。

下面记录一下步骤:

1. 下载 PictureEx.h 和 PictureEx.cpp。

这两个文件是处理gif 图片的核心,文件中读取动图并一帧一帧的保存下来然后循环显示。

2. 创建一个含有对话框界面的activeX 工程。

创建含有界面的工程主要是因为,上面处理gif 图的类是继承自CStatic的 ,在界面拖一个Picture (static)控件就可以跟这个类产生关联,从而调用类的方法在控件中显示动图。可     以不用读懂里面的代码就可以使用,对于我这种懒人来说,这种方法更实用,哈哈。

3. 调用类中的方法加载和显示图片。

1. 创建带界面的ActiveX 工程。

     1.1 新建activex 工程。

          1. 创建一个activex 工程名字为PicEx.

            

ok --> next --> next -->next : create control based on 选择默认的none :

1.2 向activex 添加mfc 窗体

            1.  打开资源视图,在Dialog 上右键add Resource :

2. 删掉对话框上的“ok” 和“cancel” 按钮。修改对话框属性:border 改为 none, control 改为 True ,Style改为Child,System Menu改为False,Visible改为True,ID改为IDD_MAIN_DIALOG,然后在对话框中双击,为对话框添加一个类,如下图:

点击“finish”。在解决方案资源管理器中新增了ViewDialog.h和ViewDialog.cpp 这两个文件就是我们新建的对话框类。

3. 在新建的对话框上拖一个Picture Control 控件,修改控件ID为IDC_PIC :

对话框建立完成,接下来就是要把它添加到ActiveX控件中去。

4.  在picExCtrl.h 文件中,定义对话框实例m_VideoDlg :

5. 然后在picExCtrl 类中定义两个消息映射:窗体创建完成消息映射和窗体改变大小消息映射。

在VS2005 中,打开类视图,选中CpicExCtrl 这个类,在属性页面中选择“Message”图标,

选择WM_CREATE  消息--> Add“OnCreate” ,选择"WM_SIZE"消息--> Add "OnSize";这样就在picExCtrl中添加了两个消息处理函数OnCreate和ONSize。

打开picExCtrl.cpp 为ONCreate 添加如下代码Create是在ActiveX控件中创建一个窗体对话框,IDD_MAIN_DIALOG就是刚刚新建的对话框:

在OnSize函数编写代码如下(MoveWindow是确定窗体对话框在ActiveX中的大小):

到此就完成了一个带界面的activeX。

1.3 调整Pictrure 控件的尺寸

Picture 控件是用来显示GIF 动图的,为了让整个界面看起来就是一个控件,而不是在一个对话框里有个控件,我们可以调整Picture 控件的尺寸跟对话框尺寸相同,并且随着对话框尺寸的变化而变化。做法如下:

首先给ViewDialog 类添加WM_SIZE 消息对应的事件:

在类视图中,选中CViewDialog 类,在属性中选择“Message”图标,在消息中选择“WM_SIZE” 添加 OnSize 函数:

打开ViewDialog.cpp 找到刚刚添加的函数OnSize ,添加如下代码(其中IDC_PIC 就是picture 控件的ID):

这样整个dialog 就被picture 控件所覆盖了,并且随着dialog 尺寸的改变而改变。

2. 图片的显示

至此,picture 控件与能处理图片的CPicuterEx 类产生了关联。(picture 控件其实是Cstatic 类型的控件,而 CPictureEx 类是继承自 CStatic 类的子类)。

内部有了CPicuterEx 的支持就可能显示GIF图片了,接下来就要定义 activex 外部接口来提供给用户来调用了。步骤如下:

在类视图中,找到picExLib ,展开前面的加号,选中_DpicEx 右键,Add---> Add Method ,添加一个外部函数Load,个参数如下:

打开picExCtrl.cpp 为刚才添加的Load函数添加代码:

函数执行正确返回0,错误返回。

另:CPictureEx 中的Draw()  函数最后返回的是FALSE ,我这里给改成了TRUE 。

到此,一个可以显示GIF 动图的activeX 控件就完成了。

参考文献:https://blog.csdn.net/arv002/article/details/113739928

制作可以显示GIF动图的activeX 控件的更多相关文章

  1. C#制作ActiveX控件及部署升级(摘自网络)

    使用C#开发ActiveX控件 控件开发.制作CAB包.签名.部署 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序 ...

  2. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  3. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  4. 使用C#开发ActiveX控件

    使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...

  5. ActiveX 控件漏洞挖掘之方法

    ActiveX是微软公司提出,并在1996年被正式命名的组件技术.该技术提供了一种通用的开放程序接口,使用这种技术开发的ActiveX控件可以直接集成到IE浏览器或第三方应用程序中,但由于第三方编程等 ...

  6. 使用C#开发ActiveX控件[new]

    文章出处:http://www.cnblogs.com/yilin/p/csharp-activex.html 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以 ...

  7. C#开发Activex控件(转载别人的只为再看时方便放在自己里边了)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能, 以增强浏览器端的动态处理能力.通常ActiveX控件都 ...

  8. 开发ActiveX控件调用另一个ActiveX系列3——ActiveX调用另一个ActiveX

    终于进入正题了,怎样在ActiveX中调用另一个ActiveX.我们的项目需要调用华视电子身份证识别仪的ActiveX控件 在这里有很多识别仪ActiveX插件下载:http://www.idukaq ...

  9. ArcGIS“一个或多个ActiveX控件无法显示...”问题的解决方案

    ArcMap启动时的一个警告信息“一个或多个ActiveX控件无法显示...”,如图 出现这种情况,有可能的原因是IE浏览器的安全选项设置被修改了.比如被手动修改过,或者被第三方系统杀毒优化软件修改了 ...

  10. 用delphi制作无界面的activex控件

    首先,您要了解: •COM的基本原理 •能被网页调用的非可视ActiveX控件必须是一种至少实现了IOleObject接口的TAutoObject组件 •利用Delphi向导生成的ActiveX控件必 ...

随机推荐

  1. CSOL大灾变移植记录

    在2019年,我玩u3d把玩了一段时间,并制作了一些Demo,其中包括FPSDemo,RPG动作游戏Demo,一些截图如下: 时间到了2020年5月底,我开始玩之前大学研究过的jMonkeyEngin ...

  2. 049_Search Lookup (二)

    其实就是 在父object中 设置,search setting 中选中 enhanced lookup, and select the dialoge & Filter  默认looukp搜 ...

  3. 宽字符集(unicode)操作函数 (转)

    字符分类: 宽字符函数 普通C函数 描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() isc ...

  4. nodejs中的kafkajs,消费顺序,不重复消费

    参考:https://kafka.js.org/docs 确保同一个消息发送到同一个partition,一个topic,一个partition,一个consumer,内部单线程消费1.封装kafkaU ...

  5. 基于 Docker 安装 Nginx 搭建静态服务器

    最近一直在准备家里的服务器部署一个自己用的网站玩玩,一来是用来学习部署的基础知识,二来,后面有空学点前端,可以部署到自己网站玩玩. 参考链接:https://juejin.cn/post/705740 ...

  6. shell中产生随机字符串的方法

    random变量 echo $RANDOM 8746 生成0-32767之间的整数随机数,若超过5位可以加个固定10位整数,然后进行求余. 再结合md5生成字符串 echo $RANDOM |md5s ...

  7. mysql 8/oracle 登录失败处理,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施

    1 mysql 8 先安装密码插件 install plugin CONNECTION_CONTROL soname 'connection_control.so';install plugin CO ...

  8. 【逆向】HWP文档 分析调试技巧

    前言 HWP(Hangul Word Processor)文件是韩国主流文字处理软件Hangul Office(한글)专用的文档格式,Hangul 是一款由韩软公司(Hansoft)开发,在韩国人人皆 ...

  9. 解决mikumikudance丢失dxdx_43.dll问题

    首先是MMD软件下载 我的操作系统是win10-x64 设备是19版小新pro13 mmd官网地址https://learnmmd.com/downloads/ 或者戳这里 链接:https://pa ...

  10. ceph 集群 健康状态报 clock skew detected on mon.tg-ceph-mon-2

    1.现象: health: HEALTH_WARN no active mgr mons are allowing insecure global_id reclaim clock skew dete ...