用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

XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)

本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。

weixin_29041767的博客 684

自定义控件 播放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

Streamlit安装避坑指南:从零到一键启动你的第一个数据可视化应用

本文提供了一份详尽的Streamlit安装避坑指南,帮助用户从零开始快速启动第一个数据可视化应用。文章深入剖析了安装过程中常见的网络超时、依赖冲突、环境变量缺失等核心问题,并给出了使用虚拟环境、配置国内镜像源、利用.whl文件离线安装等多种经过验证的解决方案,确保安装过程顺畅无阻。

weixin_29065015的博客 615

二维码扫描与页面跳转的完整流程解析

本文详细解析了二维码扫描与页面跳转的完整流程,从核心原理到前后端实现,涵盖了二维码生成、扫码事件处理、后端验证机制及跳转逻辑等关键环节。特别介绍了如何使用qrcode.js生成二维码、WebSocket处理扫码状态以及JWT令牌验证设计,帮助开发者构建安全高效的扫码跳转系统。

cicd6pipeline的博客 1089

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

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

dvlinker的技术专栏 2350

Android开发工程师(IOT)面试指南与参考答案

【摘要】绿联科技招聘Android开发工程师(IOT方向),要求5年以上Android开发经验,精通Kotlin/Java,熟悉IOT设备交互及跨平台开发。岗位职责包括客户端开发维护、技术调研及性能优化等。核心考察点包括:Kotlin协程在IOT低功耗场景的应用、多协议设备连接层设计、音视频性能优化及离线架构实现。重点技术涉及蓝牙Mesh群控、BLE功耗优化及ReactNative混合开发。需具备GooglePlay合规经验,熟悉Android13+权限管理,并能提供量化性能优化案例。

郑伟强dev的专栏 723

COM组件开发实践

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

weixin_30765505的博客 279

药物代谢仿真软件:PKSim_(6).案例研究与实践应用

通过本章的案例研究和实践应用,我们展示了如何利用PKSim软件构建药物动力学模型、进行参数估计、仿真预测和结果分析。这些方法不仅有助于优化药物代谢研究过程,还可以在药物研发中提供重要的数据支持。通过模型的构建和验证,我们可以更好地理解药物在体内的动态变化过程,为临床试验和药物治疗提供科学依据。

kkchenjj的博客 655

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

COM组件开发实践(转载)

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

程序逍客 1166

S7-1200 PN与G120变频器控制起停及调速PROFINET实现详解

S7-1200 PLC与G120变频器通过PROFINET通信可实现高效、实时的电机控制。2. 《S7-1200与G120 CU250S-2PN的PROFINET通讯指南》- 控制器:S7-1200 PLC (如1214C DC/DC/DC)- 变频器:G120 CU250S-2PN (带PROFINET接口)- 输出区(PZD1-2):控制字(16位)、速度设定值(16位)- 输入区(PZD1-2):状态字(16位)、实际速度值(16位)- P922=1:选择报文类型为"标准报文1 (PZD2/2)"

电工 1870

alt 创建activex组件

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

sage 2302

[Dify] 实现“多知识库切换”功能的最佳实践

知识库切换是提升AI问答系统精准度的关键技术。本文介绍了Dify平台实现多知识库切换的三种方式:静态配置、元数据过滤和动态切换,分析了各自的优缺点。最佳实践建议包括:合理分库设计、意图分类、主库优先检索等。文章还提供了示例工作流程和注意事项,帮助构建更智能、精准的知识驱动型问答系统。通过合理切换知识库,可显著提升回答相关性和系统性能。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 441

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ATL和MFC,用哪种框架来创建ActiveX控件:第四部分

为控件添加功能代码 MFC和ATL在功能代码的处理上是相似的。在每一个框架里,实现控件的类具有一个名为OnDraw的虚函数。你只需将你的功能代码添加到OnDraw函数里。然而,在各框架里,OnDraw函数得工作有所不同。 MFC的OnDraw在两种上下文中调用。第一个上下文发生在控件响应一个WM_PAINT消息时。此时,传递给OnDraw函数的设备上下文是实际的设备上下文。如果控件...

yingyingol 178

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VS2008的ATL Server 及include 文件的路径

重装系统后编译一个工程,提示: Cannot open include file: ‘atlsoap.h’: No such file or directory 到 ..\Microsoft Visual Studio 9.0\VC\atlmfc\include 路径下查看,确实没有 atlcrypt.h 文件。 在网上搜索之后,得到如下答案: VS2008已经删除ATL Server的内

HuaHuaXia的专栏 2356

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

一步一步教你DIY属于自己的GIF控件

我们使用GDI+来绘图,其实方法很简单。首先,先新建一个ActiveX控件工程,因为套用了M$预置的模板,直接一个控件界面出现在我们的眼前了。我们的控件是不需要焦点的,我们先把CanGetFocus设为False,再把AutoDraw打开,此时你发现,能获取focus的控件都不能用了别担心,我们就在“控件”本身绘图就足够了。然后把scaleMode改成像素。接下来是工程图标,我小小的做了...

dingpan2042的博客 453

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值