用线程实现动态改变图标

VC++多线程控制动态图标:Win32 API实现与线程同步详解 多线程编程是提升桌面应用响应性和用户体验的核心技术,其原理在于将耗时任务与用户界面操作分离到不同执行流,避免主线程阻塞导致的界面卡顿。在Windows平台,通过Win32 API的CreateThread函数创建工作线程,结合事件、临界区等同步机制,可以实现高效的后台任务处理。这一技术对于需要实时反馈的应用场景价值显著,例如文件传输、数据计算或网络请求过程中的状态指示。本文聚焦于利用VC++和Win32线程模型,实现一个由工作线程驱动的动态图标控件,详细解析了从线程创建、自定义消息通信到双缓冲绘图消除闪烁的 阅读详情

用线程实现动态改变图标
作者:cj_ict

下载本文示例代码

前几天看了一个《如何在标题栏中显示动态图标》文章,作者为重庆建设集团一所 唐星彬。觉得用SetTimer实现起来麻烦,且占用资源。手头一痒将其改为线程实现,并且把线程封装在类里。使用简单,不需要设置SetTimer在OnTimer函数里调用。只需直接调用

m_animIcon.SetImageList(IDB_BITMAP_ANIM,6,RGB(0,0,0));
m_animIcon.Draw(this);

即可。
程序其他部分,是采用唐星彬的,我只是把有OnTimer实现的部分,改成用线程实现。

class CAnimateIcon
{
protected:
	//创建一个列表变量,用于保存图像列 
	CImageList m_imgList;

	//当前图像序号
	int m_iImageCounter;

	//图像总数
	int m_nMaxNumOfImages;

	//关闭线程
	bool m_bExit;   

	//拥有图标的窗口的窗口类指针
	CWnd * m_pWnd;

	//图标刷新间隔
	DWORD m_dwMilliseconds;

public:
	void ChangeInterval(DWORD dwTimes);//改变图标刷新时间间隔
	BOOL Draw(CWnd *pWnd,DWORD dwTimes=1000);
	CAnimateIcon();
	~CAnimateIcon();
	bool SetImageList(int IDOfImageListResource,int numberOfImages,COLORREF transparentColor);
protected:
	static UINT WINAPI _ThreadAnimation(LPVOID pParam);

};

BOOL CAnimateIcon::Draw(CWnd *pWnd,DWORD dwTimes)
{
	//拥有图标的窗口的窗口类指针
	m_pWnd=pWnd;
	ASSERT(m_pWnd);

	//图标刷新间隔
	m_dwMilliseconds=dwTimes;	
	
	unsigned int nDummy;
	
	//注意:传递给线程本实例的指针
	HANDLE hThread = (HANDLE) _beginthreadex(NULL,0,_ThreadAnimation,this,
		CREATE_SUSPENDED,&nDummy);

	if (!hThread)	{
		TRACE(_T("Draw: Couldn''t start a ICON animation thread/n"));
		return false;
	} 
	else {
		ResumeThread(hThread);
	}
	CloseHandle(hThread);//不再需要线程句柄,将其关闭

	return true;
}

UINT WINAPI CAnimateIcon::_ThreadAnimation(LPVOID pParam)
{
	//从传递过来的实例指针,可以操作不同的实例,
	//注意线程函数是唯一和静态的。
	CAnimateIcon &p=*(CAnimateIcon *)pParam;

	while(!p.m_bExit){
		if(p.m_imgList.m_hImageList==NULL)
			return 0;

		p.m_iImageCounter++;
		if(p.m_iImageCounter>=p.m_nMaxNumOfImages)
			p.m_iImageCounter=0;
		HICON hIcon=p.m_imgList.ExtractIcon(p.m_iImageCounter);
		HICON hPrevIcon=(HICON)p.m_pWnd->SetIcon(hIcon,false);
			
		DestroyIcon(hPrevIcon);
		Sleep(p.m_dwMilliseconds);
	}
	return 1;
}

在VC6.0+WIN2000+SP3编译通过!

mapboxGL中动态多色图标的OffscreenCanvas方案 本文详细介绍了在MapboxGL中实现动态多色图标的OffscreenCanvas方案,通过利用OffscreenCanvas的线程隔离和高效内存管理特性,结合ImageBitmap和addImage方法,解决了传统sprite图集和动态添加图标方案在性能和灵活性上的不足。该方案支持动态染色、批量处理和内存优化,显著提升了地图应用的响应速度和开发效率。 阅读详情

相关推荐

MFC实战篇——线程的创建和多线程简单示例

文章目录一、基本概念1.1 进程1. 程序和进程2. 进程组成3. 进程的组成1.2 线程1. 线程组成2. 线程运行3. 单线程程序和多线程程序二、线程创建函数2.1 声明2.2 参数三、简单多线程实例四、线程同步4.1 火车站售票模拟程序4.2 多线程程序容易出现的问题4.3 利用互斥对象实现线程同步1. CreateMutex函数2. ReleaseMutex函数3. WaitForSingleObject函数 一、基本概念 1.1 进程 1. 程序和进程 程序是计算机指令的集合,它以文件的形式存储在

WaitFoF 5798

android 后台线程 状栏通知,Android开发高级进阶——Service与Notification

众所周知,Service是Android中实现程序后台运行的解决方案,非常适合于执行不需要和用户交互而且要求长期运行的任务。Notification是显示在手机状态栏的通知,通过Notification和startForeground可以将Service后台服务设置为前台服务。一. Service的分类按种类分为LocalService和RemoteServiceLocalService:当前进程...

weixin_32579395的博客 1310

Akamai-3.0补环境逆向-DHL快递查询

那么我们的请求过程就是:1.请求首页的html文件,通过re或xpath,提取到这个url,拼接官网地址,得到这个js文件的地址。返回的_abck为0,表示环境正确,请求搜索接口返回200,说明返回的_abck正确,如果过程错误或环境补的有问题会返回403或428这两个状态码。那么,就是这个包返回的,而且这个包需要请求两次,第一次get请求,返回的这个-1的cookie,第二次请求,带上一个sensor_data的参数,进行post请求,最终返回这个0的cookie,代表你过了akamai这个盾。

2302_76420666的博客 2858

MFC更换运行窗口图标

找到一张后缀名我.ico的图片,放置在项目所在目录的res文件夹内 在资源视图右击icon文件夹,添加资源->导入->选择刚才的ico文件,即可自动生成资源ID,默认为IDI_ICON1 将xxDlg.cpp代码中LoadIcon函数的参数更换成自己设置的ico文件的ID,点击运行即可完成图标的更换。 ...

Scarlett的博客 1465

别再傻傻分不清了!用Design Compiler和PrimeTime实操对比PBA与GBA模式

本文深度解析静态时序分析(STA)中Design Compiler与PrimeTime工具的PBA与GBA模式差异,通过实际案例演示两种模式在转换时间计算、时钟路径分析等方面的对比,并提供工程实践中模式选择的策略与调试技巧,帮助工程师在芯片设计流程中平衡精度与效率。

weixin_42552315的博客 415

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数   二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结...

weixin_34200628的博客 4568

移动应用开发技术-实验4.1

1、应用程序启动后,显示界面如图 1 所示。 2、创建一个后台服务,该服务启动后在一个新的线程中持续地以 1 秒间隔更新 通知栏,交替显示两个不同的图标,如图 2、图 3 所示。(图不整了。。。) 启动服务的方式有两种:一种是通过startservice来启动,不过这样的方式的最为普通的方式,通过这样方式启动的服务不能由用户来控制其随意的开启和暂停,只能通过stopservice来暂定;还有一种方式是通过绑定服务bindservice来启动,这种启动方式用户可..

qq_53932746的博客 1642

卷积码和Turbo码

通信原理相关博文目录:目录我们常在移动通信中遇到的卷积码就是一种非分组码,卷积码和信号处理中的卷积运算有关系吗?是不是就是信号处理中的卷积运算,先看看编码器的编码原理再说:下面是一个比较实用的卷积码编码器:它有三个移位寄存器D0,D1,D2和三个模2加法器,以及一个旋转开关组成,编码前,先将各级移位寄存器清零:现在假设输入的信息码元是1101:当输入的第一个码元为1时,三个模2加法器计算的结果都为...

Reborn Lee 2万+

【例20.2】让窗口中的图标动起来(线程Thread类)

【例20.2】让窗口中的图标动起来(线程Thread类)

qq_43118674的博客 89

智能家居系统设计:基于MATLAB的智能家居系统设计和仿真,包括智能家居控制、家庭能源管理和家庭安全监控

基于 MATLAB 的智能家居系统设计方法可以有效地解决各类智能家居问题。

走向CTO的路上... 1775

Arduino ESP32S3 基础入门教学大纲

ESP32环境、Arduino

追梦 3549

Android模拟器学framework和driver之battery & backlight-----9. use backlight to show battery capacity .

http://blog.youkuaiyun.com/zhangjie201412/article/details/7340165 ok,我们已经把battery和backlight在android中的相关代码都已经介绍的差不多的,除了应用层没有涉及到,这里我们来完成一个小功能,在最初的时候也有讲到过,就是说我们的android模拟器没有真正的battery和backlight设备,我们把这2个玩意结合起来

landishu的专栏 601

在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开

摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2393

android动态修改桌面图标,android动态改变桌面图标

在我们的使用Android系统时,经常能看到很多图标上线会标有一些数字,比如短信数量,邮件数量等等,这很好奇, 这是怎么实现的呢?且他会根据实际情况不断的变化,很是神奇呀,默认Android是不支持的,那我们今天就来慢慢的讲讲,他是怎么实现的。今天介绍两种方法,一种是应用快捷方式, 第二种是修改Iauncher 代码来达到动态icon的效果,配合其他应用来实现。在应用中发现,普通的应用都可以,这就...

weixin_39903176的博客 512

SAP BOM批量反查代码分享

SAP BOM反查批量查询代码分享

我小时候很黑的博客 4973

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++ Builder高手进阶 (四)动态显示任务栏图标

C++ Builder高手进阶  (四)动态显示任务栏图标nxyc_twz@163.com      在应用程序运行时,有时可能会因为要处理的数据量很大而暂时失去反应,这样给用户的感觉极其不好,影响了软件的更广泛应用。利用多线程技术固然可以解决这个问题,可这里我并想使用多线程,我想示范一下如何编制动态任务栏图标。  我的编程思路是:通过设置Timer时钟控件使应用程序在规定的时间间隔内

开心果的专栏 2551

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android开发相关资料整理【2011-10-02】

GridView显示联系人头像的问题 ListView中嵌套checkbox实现多选 如何让按钮变成圆形? android:id="@*android:id/seekbar" 注意*号 png 图形文件数据生成Drawable报解码失败 如何给ListView设置背景色或者背景图片啊? 有办法将wm系统的手机移植到android系统吗? 請問如何在EditText输...

weixin_30497527的博客 134

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java线程实现图片滚动_线程与Swing相结合实现图标滚动功能

实现图标滚动功能:详细代码及注释:package com.lixiyu;import java.awt.Container;import java.net.URL;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax....

weixin_29838911的博客 291

实现动态系统托盘图标

  Frm_Main.cs View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using S...

weixin_33989780的博客 223

java案例之动态流星(多线程的实现)

所需的背景素材与流星素材如下: 背景图: 静态流星: 动态流星: 代码实现: package duoxinacheng; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.ImageObserve...

巴胡子 2285

Android launcher动态Icon的实现方法

在我们的使用Android系统时,经常能看到很多图标上线会标有一些数字,比如短信数量,邮件数量等等,这很好奇, 这是怎么实现的呢?且他会根据实际情况不断的变化,很是神奇呀,默认Android是不支持的,那我们今天就来慢慢的讲讲,他是怎么实现的。     今天介绍两种方法,一种是应用快捷方式, 第二种是修改Iauncher 代码来达到动态icon的效果,配合其他应用来实现。     在应

mrleeapple的专栏 2499

python绘制动态图表怎么存下来_python3 桌面右下角图标动态显示数据如何做,做下生手党!...

我想实现动态读取串口数据,当收到数据时,已经在桌面右下角建立的图标闪烁显示有数据开始处理,无数据时显示等待图标,我弄了下,只能手动点击触发,对这个类有点不太明白如何实现收到数据自动切换图标,请论坛高手给指点一下,在此谢过!代码如下#encoding:utf-8import osimport sysimport timeimport win32apiimport win32conimport win...

weixin_39540744的博客 97
上一篇: Windows 2000/XP中对窗口进行透明化
下一篇: 不规则对话框的又一实现
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值