VC++ 在任务栏图标上显示进度条效果

2023-11-07

该功能主要是通过COM接口ITaskbarList3* 来实现进度效果显示功能。

头文件定义(CSWTaskBarList.h):

#pragma once

#include <Windows.h>
#include <Shobjidl.h>
#include <Commctrl.h>
#pragma comment(lib, "Comctl32.lib")

namespace sw {
	class CSWTaskBarList
	{
		typedef struct tagTASKBARBUTTON {
			HBITMAP		hBitmap;
			wchar_t*	szTip;
			UINT		ID;
		}TASKBARBUTTON;

	public:
		CSWTaskBarList();
		~CSWTaskBarList();

	private:
		HIMAGELIST		m_hImageList;					// 按钮的图标
		ITaskbarList3*	m_pTaskBarlist;
		HWND			m_hWnd;

	public:
		// 关联窗体
		void Attach(HWND hWnd);

		// 添加按钮
		BOOL AddButton(TASKBARBUTTON* pButtonsInfo, UINT nButtons);

		// 设置进度
		void SetProgressValue(ULONGLONG ullCompleted, ULONGLONG ullTotal);

		// 设置状态
		void SetProgressState(TBPFLAG tbpFlags/* = TBPF_NOPROGRESS*/);
	};
}

源码实现(CSWTaskBarList.cpp):

#include "pch.h"
#include "CSWTaskBarList.h"

using namespace sw;
 
CSWTaskBarList::CSWTaskBarList()
{
	m_hImageList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 0);
}

CSWTaskBarList::~CSWTaskBarList()
{
	ImageList_Destroy(m_hImageList);
}

// 关联窗体
void CSWTaskBarList::Attach(HWND hWnd)
{
	m_hWnd = hWnd;
	if (NULL == m_pTaskBarlist)
	{
		CoCreateInstance(
			CLSID_TaskbarList, NULL, CLSCTX_ALL,
			IID_ITaskbarList3, (void**)&m_pTaskBarlist);
	}
	m_pTaskBarlist->SetProgressState(m_hWnd, TBPF_INDETERMINATE);
}

// 添加按钮
BOOL CSWTaskBarList::AddButton(TASKBARBUTTON* pButtonsInfo, UINT nButtons)
{
	THUMBBUTTON* pThumbButtons = (THUMBBUTTON*)malloc(nButtons * sizeof(THUMBBUTTON));

	DWORD dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
	for (UINT i = 0; i < nButtons; i++) {
		ImageList_Add(m_hImageList, pButtonsInfo[i].hBitmap, NULL);
		pThumbButtons[i].dwMask = (THUMBBUTTONMASK)dwMask;
		pThumbButtons[i].iId = pButtonsInfo[i].ID;
		pThumbButtons[i].iBitmap = 0;
		memset(pThumbButtons[i].szTip, 0, sizeof(wchar_t) * 260);
		CopyMemory(pThumbButtons[i].szTip, pButtonsInfo[i].szTip, sizeof(wchar_t) * wcslen(pButtonsInfo[i].szTip));
		pThumbButtons[i].dwFlags = THBF_ENABLED;
	}

	HRESULT hr = CoInitialize(NULL);
	hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pTaskBarlist));
	if (FAILED(hr))
		return FALSE;

	hr = m_pTaskBarlist->ThumbBarSetImageList(m_hWnd, m_hImageList);
	hr = m_pTaskBarlist->ThumbBarAddButtons(m_hWnd, nButtons, pThumbButtons);

	free(pThumbButtons);
	return TRUE;
}

// 设置进度
void CSWTaskBarList::SetProgressValue(ULONGLONG ullCompleted, ULONGLONG ullTotal)
{
	m_pTaskBarlist->SetProgressValue(m_hWnd, ullCompleted, ullTotal);
}

// 设置状态
void CSWTaskBarList::SetProgressState(TBPFLAG tbpFlags = TBPF_NOPROGRESS)
{
	m_pTaskBarlist->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC++ 在任务栏图标上显示进度条效果 的相关文章

  • JS 元素遍历

    1 循环遍历从getElementsByClassName返回的所有元素 var elements document getElementsByClassName classname Array prototype forEach call
  • VC++ GDI+将CDC保存为图片文件(bmp、jpg、png)

    int GetEncoderClsid const wchar t format CLSID pClsid UINT num 0 UINT size 0 ImageCodecInfo pImageCodecInfo NULL GetImag
  • 多语言版本 OPENFILENAME过滤器设置问题

    正常的时候 打开并选择一个文件这样写代码 char szFileName MAX PATH 0 OPENFILENAME ofn memset szFileName 0 MAX PATH memset ofn 0 sizeof ofn of
  • C++类上使用属性(__declspec property)

    原始代码如下 class A private int m nIndex public int getIndex return m nIndex void setIndex int value m nIndex value 如果采用属性方式实
  • OpenGL GLFW入门篇 - 画点集

    效果图 主体代码 void DrawPoints void int i GLfloat x y glPushMatrix 另一个相对的Z平移可以分离对象 glLoadIdentity glTranslatef 0 0 0 0 0 f 设置点
  • VC++ 程序启动即隐藏

    所谓的隐藏是程序启动后不显示主窗体 网上介绍了很多方法 是否达到效果 众说纷纭 这里只介绍一种在项目中实际应用到的切实可行的方法 这里假设主窗体为CMainDialog 1 变量声明 BOOL m bShowWindow 2 给变量赋初始值
  • C++ 结束进程

    有时候进程未正常退出 导致进程列表遗留僵尸进程 程序启动需要杀死这种僵尸进程 include TLHELP32 H void TerminateSelfApplication TCHAR szFileName MAX PATH 0 TCHA
  • WTL 界面设计篇(CSkinListCtrl)

    头文件声明 CSkinListCtrl h pragma once include
  • VC++ 源码实现通达信公式管理器

    效果图 前段时间 因业务需要 写了这样一个软件 同样的页面已经是第2次写了 第1次大约5年前的事情了 因为代码遗失 于是重新写 页面看似复杂 实现起来非常简单 第一步 参照通达信的公式管理器核心文件TCalc dll 导出资源文件 TCal
  • sapi 实现语音朗读

    头文件定义 CSpeechSpeekImpl h pragma once include sphelper h class CSpeechSpeekImpl public CSpeechSpeekImpl void CSpeechSpeek
  • OpenGL GLFW入门篇 - 画矩形

    效果图 主体代码 void DrawRectangle void GLfloat xl yt xr yb w h glPushMatrix glLoadIdentity glTranslatef 0 0 0 0 0 f w 1 2 h 1
  • VC++ CSWDirectoryListCtrl磁盘文件列表

    效果图 头文件定义 CSWDirectoryListCtrl h pragma once include afxwin h include
  • C/C++ 打印菱形图案

    设计思路 以n行菱形为例 n为奇数 图形分为上下2部分 左上角坐标为 0 0 顶点坐标为 0 n 2 图形上半部分 0 n 2 从第1行到第n 2行 每行菱形数递增1个单位 同时每行菱形的起始坐标递减1个单位 图形下半部分 n 2 1 n
  • EAN13条形码绘制(Delphi版)

    单元声明 unit UnitEAN https wenku baidu com view d61eec0dc4da50e2524de518964bcf84b9d52d0d html 共有95 18 113条数据模块 1表示黑 0表示白 左侧
  • live555 流媒体开源库

    live555对每一个从事过流媒体开发的从业者而言 都不曾陌生 就像每一个从事音视频行业的从业者而言 ffmpeg也不曾陌生 随着行业需求的发展 live555也是越见强大 因前几天帮朋友项目查找问题 重拾live555 没想到时隔10年
  • VC++ 源码实现通达信公式管理器2

    前面我们介绍了如何加载显示公式列表 本篇章介绍如何格式化显示公式内容 常用的CEdit或CRichEdit是不支持这种格式显示的 这里需要借助第三方控件SciLexer 没错 Notepad 就是使用的这个控件 它支持不同的文本内容支持不同
  • CFileDialog 多文件选择注意事项

    当选择文件数量比较多的时候 发现CFileDialog返回文件名并不完整 翻阅MSDN发现文件名长度是有限制的 解决思路 CFileDialog dlgOpen TRUE T txt NULL OFN HIDEREADONLY OFN RE
  • VC++ OpenCV+ZBar二维码识别

    利用OpenCV处理图像的优势 结合ZBar提高二维码识别结果 接口定义 include
  • WTL 界面设计篇(CSkinEdit)

    头文件声明 CSkinEdit h pragma once include SkinManager h 不支持滚动条皮肤 图片背景支持不完整 Edit控件必须是ES MULTILINE风格 SetMarginsEx才能生效 ES MULTI
  • C++ StrCmpLogicalW文件名排序

    打开资源管理器 文件列表如下 搜索文件列表 include

随机推荐

  • C++的const关键字

    文章目录 一 C 的const关键字 二 const在类中的含义 一 C 的const关键字 这里可以分为两种情况 一种是类似与C语言里面的 const char char const 一种是C 用于类里面限定函数的 const int c
  • GGally

    GGally包安装失败 这是直接在Rstudio里安装GGally时的情况 用rattle采用Pairs需要安装GGally包 但是自动安装也不行 会出现下图所示的现象 请问大神们怎么办
  • python pyinstaller封装成exe, 本地执行正常, 放入服务器执行报错

    执行报错信息如下 报错信息 Failed to extract MSUCP140 1 dll decompression resulted in return code 1 报错信息 Failed to extract PIL imagin
  • 漫话:如何给女朋友解释什么是撞库、脱库和洗库?

    最近 安全圈又有一个大新闻 微博名为 安全 云舒的微博用户在发文称 很多人的手机号码泄露了 根据微博账号就能查到手机号 已经有人通过微博泄露查到我的手机号码 来加我微信了 并且 据说微博CEO的手机号码也被泄露了 微博CEO 微博名 来去之
  • ctfshow信息收集Web18(玩游戏)

    不要着急 休息 休息一会儿 玩101分给你flag 点进去是一个游戏 查看游戏的js代码 查看js代码 查看通过游戏后会展示的内容是一个Unicode编码的 查看 110 php 得到Flag
  • Android启动模式

    其中MainActivity是所有操作的第一个Activity 1 A为standard B为singleInstance C为standard A B C 由下面的结果可知 B会单独创建一个任务站 且里面只能有他一个任务 即使是他启动的A
  • maven pom文件详解

  • 记一次sql优化经历(优化in语句)

    业务背景 根据客户群组查询标签 群组和标签的对应关系在tb biz type tags中 根据标签查询客户的手机号和机构标识 tb customer tags 根据手机号和机构标识 筛选出符合要求的客户信息 tb account 已知 客户
  • 加列法计算lower unit matrix inversion

    include
  • vscode配置文件在哪?

    在这里 看图 文件file 首选项 设置 点那个图标
  • 【C++】STL-函数对象 + 谓词

    1 函数对象使用 include
  • 在 window 上安装GPU版本的torch

    pip install https download pytorch org whl cu80 torch 1 0 0 cp37 cp37m win amd64 whl i https pypi tuna tsinghua edu cn s
  • fdisk 命令实现磁盘分区详细教程

    目录 分区步骤 1 添加新的磁盘 2 查看新的磁盘 3 使用fdisk命令分区 4 重新读取分区表信息 5 格式化分区 6 建立挂载点并挂载 总结 fdisk命令来自于英文词组 Partition table manipulator for
  • 华为OD机考20220622

    考试时间 2022 06 22 总分 136分 第一题 字符串分割 水仙花数 用例通过率 11 1 第二题 内存资源分配 用例通过率 95 8 第三题 模拟内存分配 用例通过率 15 之前在网上也看了很多分享 虽然机考没通过 不过也分享一下
  • CentOS 安装opencv3.4.12教程,一次编译通过,避免踩坑

    1 下载和安装 在官方网址 Home OpenCV 下载该3 x版本的opencv和opencv contrib的zip源码文件 本文以opencv3 4 12为例 然后解压该zip文件 即得到 unzip opencv 3 4 12 zi
  • 回调函数详解

    一 什么是回调函数 回调函数是指 使用者自己定义一个函数 实现这个函数的程序内容 然后把这个函数 入口地址 作为参数传入别人 或系统 的函数中 由别人 或系统 的函数在运行时来调用的函数 函数是你实现的 但由别人 或系统 的函数在运行时通过
  • 使用Glide对网络图片进行圆形和圆角的处理

    在开发中欧经常会遇见对图片的圆形和圆角的处理 头像一般圆形较多 之前使用的还是Volley ImageLoader来进行的加载网络图片 当时遇见这个需求找了许多资料 后来朋友一致推荐我将Volley ImageLoader换成Glide 不
  • 计算机毕设之基于SSM框架仓库管理系统

    1 简介 博主介绍 全网粉丝30W csdn特邀作者 博客专家 CSDN新星计划导师 编程领域优质创作者 博客之星 各平台优质作者 专注于Java python等技术领域和毕业项目实战 文末获取源码联系 计算机毕设之基于SSM框架仓库管理系
  • chatgpt赋能python:Python如何实现中文SEO的优化

    Python如何实现中文SEO的优化 伴随着互联网的发展 中文网站数量不断增多 而如何让中文网站在搜索引擎中更好的展现 就成为了一个很热门的问题 SEO 搜索引擎优化 是实现网站流量增长甚至盈利的关键 在这里 我们将介绍如何使用Python
  • VC++ 在任务栏图标上显示进度条效果

    该功能主要是通过COM接口ITaskbarList3 来实现进度效果显示功能 头文件定义 CSWTaskBarList h pragma once include