制作可以显示GIF动图的activeX 控件
因为工作需要,我需要一个可以显示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 控件的更多相关文章
- C#制作ActiveX控件及部署升级(摘自网络)
使用C#开发ActiveX控件 控件开发.制作CAB包.签名.部署 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序 ...
- 使用C#开发ActiveX控件(新)
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- 使用C#开发ActiveX控件
使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...
- ActiveX 控件漏洞挖掘之方法
ActiveX是微软公司提出,并在1996年被正式命名的组件技术.该技术提供了一种通用的开放程序接口,使用这种技术开发的ActiveX控件可以直接集成到IE浏览器或第三方应用程序中,但由于第三方编程等 ...
- 使用C#开发ActiveX控件[new]
文章出处:http://www.cnblogs.com/yilin/p/csharp-activex.html 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以 ...
- C#开发Activex控件(转载别人的只为再看时方便放在自己里边了)
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能, 以增强浏览器端的动态处理能力.通常ActiveX控件都 ...
- 开发ActiveX控件调用另一个ActiveX系列3——ActiveX调用另一个ActiveX
终于进入正题了,怎样在ActiveX中调用另一个ActiveX.我们的项目需要调用华视电子身份证识别仪的ActiveX控件 在这里有很多识别仪ActiveX插件下载:http://www.idukaq ...
- ArcGIS“一个或多个ActiveX控件无法显示...”问题的解决方案
ArcMap启动时的一个警告信息“一个或多个ActiveX控件无法显示...”,如图 出现这种情况,有可能的原因是IE浏览器的安全选项设置被修改了.比如被手动修改过,或者被第三方系统杀毒优化软件修改了 ...
- 用delphi制作无界面的activex控件
首先,您要了解: •COM的基本原理 •能被网页调用的非可视ActiveX控件必须是一种至少实现了IOleObject接口的TAutoObject组件 •利用Delphi向导生成的ActiveX控件必 ...
随机推荐
- ASP.NET Core中使用日志组件NLog
上一篇文章描述了如何在ASP.NET Core中使用Log4Net记录日志.本篇将使用另外一个组件NLog在ASP.NET Core中记录日志. 1.引入程序集 NLog.Web.AspNetCore ...
- vs2010 项目属性窗口
配置一些项目编译输出的类型(比如是编库还是编demo).编译输出结果的名字.编译输出结果的路径等等 Configuration Properties->General 配置在编译工程所需要的头文 ...
- 最好用的 vue v-for直接循环案例
vue v-for直接循环数字,也就是固定次数 项目中需要做一个酒店星级,酒店星级就是固定的5星,根据后台返回的数据来显示几星级 <!--星级,循环固定次数 5次 根据酒店等级显示亮的星星和灰色 ...
- WDA学习(18):UI Element:TabStrip使用
1.11 UI Element:Tabstrip使用 本实例显示UI Element:Tabstrip的使用. 1.创建Component; 2.选择Layout页签,设置页面: 创建UI Eleme ...
- linux离线安装gcc 和g++
1.先到有网的机器上下载依赖包 sudo yum install --downloadonly --downloaddir=/home/mjb/soft/gcc gcc sudo yum instal ...
- 构建一个自己的CocoaPods库
1.首先去github 创建一个项目 .然后将你的代码传到github 2.终端 进入项目根目录 生成podspec pod spec create SJTestPod 注意生成的pod一定要唯一.不 ...
- 051_Lightning 定义 直接翻译来的
那么为什么要命名为"Lightning"?那么,想一想关于实际Lightning,你在暴风雨中看到的那种.想想它的速度有多快,如果你眨眼,你可能会想念它.想想它是多么美丽; Lig ...
- MAC使用Graphviz包报错 failed to execute PosixPath('dot')
在使用LightGBM进行可视化时,用到了Graphviz包,在安装Graphviz包时遇到了以下问题. 错误描述: ExecutableNotFound: failed to execute Pos ...
- *args、**kwargs参数组
'''def test(*args): # *agrs接收的是N个位置参数,不能接受关键字参数,转化成元祖 print(args)test(1,2,3,4,5,6)test(*[1,2,4,5,5]) ...
- KinectFusion算法论文解读/代码解读随笔
--2021.6.8 上图是kinectfusion的流程图,是整个系统的工作流.我们对上面的流程进行分析以及相关代码的解读,使用的代码库是pcl的Kinectfusion复现.(ps:因为我只在ub ...