用VS2008+ATL开发Gif的ActiveX控件的步骤

MFC Picture控件图像显示全解析:静态与动态加载的四种实现方案 在Windows桌面应用开发中,图形设备接口(GDI)是图形显示的核心基础,它定义了应用程序与图形硬件之间的通信协议。其原理在于通过设备上下文(DC)抽象层,管理绘图表面与资源对象(如位图、画刷),实现图形输出的标准化。这一机制的技术价值在于提供了跨设备的图形编程接口,使得界面渲染、数据可视化等需求得以高效实现。在MFC框架的工程实践中,对话框Picture控件作为GDI的典型应用场景,常被用于仪器面板、数据监控等嵌入式上位机软件的图像展示。针对静态资源嵌入与动态文件加载两种常见需求,开发者可通过控件属性绑 阅读详情

keywords:ATL,ActiveX,gif,多线程

用VS2008+ATL开发显示Gif的ActiveX控件

base:MSDN:开发语言-VS文档-VC++-参考信息-库参考-ATL-Concepts-ATL Tutorial

1   创建解决方案

创建一个空的解决方案,名称GifSolution。将来包含控件项目和测试项目。

2   创建ATL项目

解决方案视图-右击解决方案-添加-新建项目,弹出的对话框中选ATL项目,名称为GifAnimate确定。弹出的对话框中选择DLL服务器(可选允许合并代理存根,这样不会产生代理dll),完成后编译,这样工程框架就完成了。

3   添加新组件

3.1 一点要说明的

组件分有窗口的和无窗口的,这里应该用有窗口的,所以添加组件的时候,外观不要基于none,最好基于CStatic。因为gif是动态的,应该用另一个线程绘制,这样不影响主线程响应消息,绘图更加流畅。

两种窗口的区别:无窗口的控件用父窗口做自己的窗口;用父窗口的DC绘图;通过DEFAULT_REFLECTION_HANDLER()把消息反馈给父窗口以进行响应。有窗口的控件,多一个CContainedWindow m_ctlStatic变量作为显示窗口;在BEGIN_MSG_MAP / END_MSG_MAP之间,通过ALT_MSG_MAP(1)宏映射消息处理(1为控件m_ctlStatic构造时候的内部标记,因为可能有多个窗口,默认1个,用户可以自己添加)。

3.2 添加组件对象

为GifAnimate项目添加类-选择ATL控件,点击添加,弹出对话框。

第一卡:组件名称GifAniControl

第二卡:支持连接点(因为要通知客户端)

第三卡:默认接口

第四卡:外观基于Static,可插入(在注册表注册为OLE插入对象,可以插入Office)

第五卡:实现固有属性-背景色、边框色、边框可见性

确定后,编译通过。

3.3 为组件添加方法

类视图-右键点击控件接口-添加-方法,分别添加Play Stop Pause Continue PrevFrame NextFrame函数,以操作gif图片。添加IsPlaying函数,添加LoadGifFromFile LoadGifFromStream函数

3.4 为组件添加属性

注意:在idl文件里定义一个枚举,指明播放方向。

 

类视图-右键点击控件接口-添加-属性,分别添加Loop(循环次数) DelayTimeFactor(时间因子) PlayDirection(播放方向)等属性。

 

对于每一个属性,控件类增加了一对函数,去读写属性get/put_XXX,真正的变量要我们自己写的。

4   实现绘图

添加GifImage类,用于实现绘图功能。

在控件类里,添加一个GifImage类型的变量,主要用于对图片的控制。

完成组件接口函数和属性的调用。

把窗口的句柄给GifImage,让它实现绘图。

(对于无窗口控件,修改组件的OnDraw函数,实现绘图)

编译通过就可以测试了(由于用到了GDI+,用ActiveX控件测试容器无法调用函数)。

5   添加测试项目

右键点击解决方案-添加-新建项目,弹出的对话框中选MFC EXE项目,名称GifTestDlg。创建一个基于对话框的项目。

导入DLL:#import "../GifAnimate/Debug/GifAnimate.dll"

初始化COM和GDI+

在对话框初始化的时候创建控件,并设置属性等。

编译运行成功。

6   添加事件

第二步已经支持连接点,idl文件里会有事件接口

6.1 为事件接口添加函数(声明)

类视图-右键点击lib接口里的事件接口-添加-方法,添加一个Click函数,参数为long型的x,y坐标。产生的效果是,在idl文件里,向导为事件接口添加了一个点击函数。

6.2 生成代理类函数

生成一个代理类,实现函数。[Only in VC6, VS2008自动完成]

类视图-右键点击控件类-添加-添加连接点,在对话框选中以上提到的连接点,确定。

代理类会包装一个函数Fire_Click,触发客户端。

6.3 触发事件(调用函数)

响应控件类的WM_LBUTTONDOWN消息,调用代理类的Fire_Click函数。

6.4 客户端关注事件

客户端用ATL或者MFC完成一个接收器GifSink,连接、工作、断开。

7   添加属性页

完全可以不做而通过程序设置属性,做这个是给懒程序员用的,或者只是让组件使用更方便。

7.1 添加属性页卡片

添加-类-ATL属性页-确定,弹出对话框中添加简称,修改组件属性和标题,确定。

系统生成相关的对话框卡片资源、对应对卡片类、idl相关内容、注册脚本等。卡片类有一个Apply函数,用于接受属性设置。

7.2 设置属性

修改对话框,增加新控件等等。然后处理数据变化,例如:处理Edit的EN_CHANGE事件,设置page组件的脏数据标记(修改但没有确定)。最好并完成Apply函数。

7.3 手工把属性页添加到控件

在控件类.h添加如下代码

PROP_ENTRY("Sides", 1, CLSID_GifProp)

8   说明

1.  本文只是举例说明开发过程,抛砖而已。

2.  样例只是框架,不能直接使用,所有代码没有经过测试

3.  样例接收器GifSink和属性页卡片没有完成,懒了,呵呵

4.  样例背景等很多属性没有实现

5.  使用了GDI+,但GDI+的Image类的SetActiveFrame函数有问题,网上貌似没有解决办法。Debug版本不影响使用,Release版本没有测试。如果有兴趣,可以使用IPicture接口,网上很多。

6.  本文和本样例版权crybird所有,引用处请标记crybird。

 

 

在Word中实现动态GIF显示的ANIGIF控件 ANIGIF控件是一个特殊的ActiveX控件,它的主要功能是能够在支持ActiveX的应用程序中展示动态GIF文件。这种控件在早期的Web浏览器和桌面应用程序中相当常见,用于增强用户界面的互动性和视觉效果。由于GIF格式广泛支持动画,并且在早期的互联网上非常流行,ANIGIF控件因此成为了在Microsoft Office文档,尤其是Word和PowerPoint中展示动画内容的一个简单途径。 阅读详情

相关推荐

VB Animation GIF ActiveX控件

VB Animation GIF ActiveX控件 YQSoft公司开发的一款功能强大的OCX控件,让你在Visual Basic程序中实现GIF动画,程序很小但功能强大而且是纯VB代码开发,没有使用任何其他的控件,控件仅40K,安装包只有12K,不妨一试。 VB Animation GIF ActiveX控件主要特色: 支持多数GIF89a标准,包括动画,延迟时间等 分析GIF的每一帧 自动调整大小,自动缩放 支持JPEG, BMP和任何支持VB的其他图片格式 纯VB代码开发,没有使用任何其他的控件 文件小,控件仅40K,安装包只有12K 支持VB6和VB5

基于GDI+的gif ActiveX控件(ATL)

本文给出一个基于gdi+的gif ActiveX控件的主要实现源码。本控件虽然冠名为gif,实际上可以用于显示多种格式的图像文件,bmp,jpeg,gif等等。由于时间关系,不多说明,同时只给出主要代码。1. CTimeWndTimeWnd.h------------------------------------------#ifndef X_TIMEWND__H#define X_TIMEWN

larrin的Blog 2324

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

自定义控件 播放GIF动画

代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; /

Jia_ShengJie 2324

Element-cascader级联选择器增加全选功能

element el-cascader

weixin_44384273的博客 3728

C#上位机与OneNET云平台数据交互实战——基于HTTP与JSON解析

本文详细介绍了使用C#开发上位机软件与OneNET物联网云平台进行数据交互的实战方法。通过构建HTTP请求、解析JSON数据,实现设备数据的实时获取、界面展示与本地存储,为工业监控与数据采集提供了一套完整高效的C#解决方案。

kkk56的博客 220

用VS ATL工程开发播放Gif图片控件的步骤

1 创建解决方案 创建一个空的解决方案,名称GifSolution。将来包含控件项目和测试项目。 2 创建ATL项目 解决方案视图-右击解决方案-添加-新建项目,弹出的对话框中选ATL项目,名称为GifAnimate确定。弹出的对话框中选择DLL服务器(可选允许合并代理存根,这样不会产生代理dll),完成后编译,这样工程框架就完成了。 3 添加新组件 3.1 一点要说明的

dvlinker的技术专栏 2350

在Ubuntu 22.04上从零搭建FVCOM环境:手把手搞定Linux、Intel编译器与NetCDF库

本文详细指导在Ubuntu 22.04上从零搭建FVCOM环境,涵盖Linux系统配置、Intel编译器安装、NetCDF库编译及常见问题解决。通过手把手教程,帮助科研人员高效完成水动力数值模拟环境的部署,特别适合水环境研究领域的初学者。

weixin_30613727的博客 651

COM组件开发实践

Preface 因为项目需要,开始从事ActiveX方面的工作,看了一些资料,可惜都是些COM原理方面的,没有切合实际动手的东西,在CodeProject上读完David Marcionek的文章【1】后,收获良多,但也遇到一些恼人的小问题,因此在其基础上就一些易错点做些小注解。本文版权归David Marcionek所有。 简介 本文目的在于让你快速掌握Active...

weixin_30765505的博客 279

从网口变压器到TVS管:手把手设计通过4KV浪涌的以太网电路

本文详细解析工业级以太网接口4KV浪涌防护设计,从网口变压器选型到TVS管布局,提供通过IEC61000-4-5标准测试的完整方案。重点介绍Bob Smith电路优化和PCB设计技巧,帮助工程师有效应对雷电感应和设备开关瞬态干扰,确保工业设备稳定运行。

study的专栏 287

服务器搭建原神私服教程

项目的稳定版分支提供了编译好的服务端程序,但是博主觉得还是用dev版本的比较好。dev版本需要自己编译的,不要听到编译这两个字就头大,相反,这个服务端的编译相当简单。把文件中的两个IP地址127.0.0.1修改为你服务器的地址,修改完成后按 esc 输入 :wq。Mongodb作为服务端的数据库使用,我们这里安装最新版的Mongodb5。注意:如果想要使用最新版的服务端,必须安装>=17版本的java。tmux可以保证你关掉控制台的时候,程序依然继续运行。至此,服务端所需要的运行环境全部配置完成。

用最简单的方式说最重要的事!服务器、存储、云计 算、A智能的大数据产品、游戏开发技术。致力于广 大开发者、政企用户、各项机构等,构建云上世界提供全方位云计算解决方案。旨在打造差异化的开放式闭环生态系统帮助用户快速构建稳定、安全的云计算环境。 1万+

COM组件开发实践(转载)

Preface       因为项目需要,开始从事 ActiveX 方面的工作,看了一些资料,可惜都是些 COM 原理方面的,没有切合实际动手的东西,在 CodeProject 上读完 David Marcionek的 文章【1】后,收获良多,但也遇到一些恼人的小问题,因此在其基础上就一些易错点做些小注解。本文版权归 David Marcionek 所有。 简介  本文目的在于让你快速掌

程序逍客 1166

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1670

使用ALT创建activex控件时标记安全方法

// DogKey.h : Declaration of the CDogKey#ifndef __DOGKEY_H_#define __DOGKEY_H_#include "resource.h" // main symbols///////////////////////////////////////////////////////////////////

sage 974

一[3.3]、ubuntu18.04环境 利用 yolov8 实现列车轨道检测,并提取正确的轨道线【全网最详细】

【代码】一[3.3]、ubuntu18.04环境 利用 yolov8 实现列车轨道检测,并提取正确的轨道线【全网最详细】

努力努力努力 258

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用VC2008中ATL开发浏览器控件

使用VC2008中ATL开发浏览器控件2011.03.02freecnjet@gmail.com 介绍本文将介绍使用VC2008中的ATL开发一个用于网络部署的cab控件包的过程。 建立ATL项目打开VS2008,建立一个ATL项目,如下图:考虑到简介性,选择了"Allow merging of proxy/stub code" 添加ATL控件(建议先编译一下真个project,保证编译成功并顺利注册了控件)之后添加一个ATL的控件,注意正确的对象类型。右键选择项目“Add”->"Add Class"一定要

自由空间,实现思想的自由之地 3945

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ATL 组件的使用(vs2008)

新建一个工程:          点击OK,其它都是Next一直到Finish.           工程建好后,可以看到如下类视图:         点击Project->Add Class…     选择ATL Simple Object           在Short name输入新加类名:

一个为生活而拼搏的女人 3055

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

alt 创建activex组件

实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部单击将会使多边形的边数在当前的基础上-1,并能改变多边形的颜色.最后举了两个例子说明了如何使用这个刚刚生产得控件.一个是把该控件应用到网页中,一个则是用于一个基于对话框的程序中.详细代码请下载压缩包.(一) 创建工程(1) 打开VC6集成开发环境,按新建按钮,选择PRO

sage 2302

VS2008 ATL控件开发

1,新建项目->ATL->ATL项目:VSAtlPlayer 2,Project->add class->Atl Control 完成设置向导: [插入] 事实上我们在这里选定的“仅适用于窗口的”并没有生效,需要在CPlayerCtrl的构造函数里加一句,才能显示我们下面将要加的Atl Dialog CPlayerCtrl() { m_bWindowOnly

3590
上一篇: 闲来无事,写了一个简单的智能指针
下一篇: Word退出时报错 "此文件正由另一个应用程序或用户使用"
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值