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++ 在任务栏图标上显示进度条效果 的相关文章

  • OpenCV 人脸检测(HAAR/DNN)

    1 HAAR级联检测 include
  • WTL 界面设计篇(CSkinHyperLink)

    头文件声明 CSkinHyperLink h pragma once include SkinManager h class CSkinHyperLink public CWindowImpl
  • WTL 界面设计篇(CImageEx)

    头文件声明 CImageEx h pragma once include
  • 多语言版本 OPENFILENAME过滤器设置问题

    正常的时候 打开并选择一个文件这样写代码 char szFileName MAX PATH 0 OPENFILENAME ofn memset szFileName 0 MAX PATH memset ofn 0 sizeof ofn of
  • VC++ 程序启动即隐藏

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

    头文件声明 CSkinDialog h pragma once include
  • sapi 实现语音朗读

    头文件定义 CSpeechSpeekImpl h pragma once include sphelper h class CSpeechSpeekImpl public CSpeechSpeekImpl void CSpeechSpeek
  • VC++ 设定Windows程序自启动(非管理员权限)

    Windows程序自启动方式有很多种 任务计划 注册表 启动项等等 创建任务计划和启动项 都需要程序具有管理员权限才能写入 在此略过 只介绍启动项方式 要实现启动项方式 必须要知道当前用户下启动项方式的目录 我们才好将程序或程序的快捷方式存
  • 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
  • TightVNC H264编解码(二)之硬编码库的编译

    AVCodec codec avcodec find encoder by name nvenc h264 如果是默认的ffmpeg库 返回结果是NULL 看来是不带有硬编码功能的 重新编译分支ffnvcodec 不到半个小时编译完成 返回
  • GDI+ 显示GIF图像

    头文件定义 pragma once include
  • 高精度时间差值

    引用 解决GetTickCount的时间精度不够的问题 1 类声明 pragma once define WIN32 LEAN AND MEAN include
  • Node.js EventEmitter事件

    Node js EventEmitter Node js 所有的异步 I O 操作在完成时都会发送一个事件到事件队列 Node js 里面的许多对象都会分发事件 一个 net Server 对象会在每次有新连接时触发一个事件 一个 fs r
  • OpenSSL RSA加密和解密

    rsa加密的密钥格式常见的有两种 一种是PKCS 1 密钥头为 BEGIN RSA PUBLIC KEY 一种是PKCS 8 密钥头为 BEGIN PUBLIC KEY 以字符串公钥为例 对PKCS 1格式的密钥加载使用的函数是PEM re
  • VC++ Gdiplus::Bitmap抠图

    void SetBackgroundMaskImage LPCTSTR lpszImageName COLORREF crAlpha RGB 255 0 0 Gdiplus Bitmap pBkgrMaskBitmap CImageFact
  • GmSSL 在Windows上的使用(编译和使用)

    1 源码的下载 GitHub guanzhi GmSSL 支持国密SM2 SM3 SM4 SM9 SSL的密码工具箱 2 编译工具的下载 首先安装VS开发工具 接着下载ActivePerl 打开VS命令提示符 管理员权限 并切换到 Acti
  • VC++ CComboBox自绘(颜色下拉列表框)

    使用前 请将控件的Style属性设置为DropdownList 下拉列表 Owner Draw设置为Fixed Has Strings设置为TRUE 效果图如下 头文件声明 CSWColorComboBox h pragma once in
  • CStdioFile扩展(支持Ansi、Unicode、Utf-8等文本格式)

    头文件声明 CStdioFileEx h StdioFileEx h interface for the CStdioFileEx class Version 1 1 23 August 2003 Incorporated fixes fr
  • VC++ OpenCV+ZBar二维码识别

    利用OpenCV处理图像的优势 结合ZBar提高二维码识别结果 接口定义 include
  • VC++ CComboBox自绘阶段性总结

    在绘制列表框左侧的时候 本来说是采用的CImageList接口进行绘制 结果发现绘制后的图标不干净 有锯齿或者黑色背景存在 于是采用了GDI 来实现左侧图标的绘制 代码如下 GDI是完全可以通过图像处理彻底解决图标不干净问题的 之前文章有介

随机推荐

  • 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