当前位置:首页 > c++ > 正文内容

C++实现任务栏图标进度条显示

xuwenyan2年前 (2021-02-07)c++341
ITaskbarList3* m_pTaskBarlist;
VOID CALLBACK OnTimer(HWND hWnd, UINT, UINT_PTR id, DWORD) {
  if (id == 1) {
    static int progress = 0;
    if (progress > 100) {
      m_pTaskBarlist->SetProgressState(hWnd, TBPF_NOPROGRESS);
      FlashWindow(hWnd,true);
      ::KillTimer(hWnd, 1);
    }
    else {
      if (progress > 50) {
        m_pTaskBarlist->SetProgressState(hWnd, TBPF_PAUSED);
        ::KillTimer(hWnd, 1);
      }
      else {
        m_pTaskBarlist->SetProgressValue(hWnd, ++progress, 100);
      }
    }
  }
}

void CreateTaskBarList(HWND hWnd) {
  if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (LPVOID*)&m_pTaskBarlist))
    || FAILED(m_pTaskBarlist->HrInit())) {
    m_pTaskBarlist->Release();
  }
  else {
    m_pTaskBarlist->SetProgressState(hWnd, TBPF_INDETERMINATE);
    m_pTaskBarlist->SetProgressValue(hWnd, 0, 100);
    ::SetTimer(hWnd, 1, 50, OnTimer);
  }
}

// 伪代码
void InitWindow(HWND hWnd) {
  CreateTaskBarList(hWnd);
  SetTimer(hWnd,1,OnTimer);
}

SetProgressValue设置进度:https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist3-setprogressvalue
SetProgressState设置状态:https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist3-setprogressstate
    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    扫描二维码推送至手机访问。

    版权声明:本文由艺文笔记发布,如需转载请注明出处。

    本文链接:https://www.xuwenyan.com/archives/138

    分享给朋友:

    “C++实现任务栏图标进度条显示” 的相关文章

    C++如何实现远程注入dll

    C++如何实现远程注入dll

    如何把我们的代码放到别人的进程里面运行?我们需要做一个dll动态库,然后使用远程注入技术,将我们的dll注入到别人的进程里面,然后加载起来。这样我们的代码就可以在别人的进程里面工作了。注入代码#include "stdafx.h" int EnableD...

    C++指针*为什么靠后会比较好?

    C++指针*为什么靠后会比较好?

    大多数书中和大神的代码里,往往指针的*都是靠变量而不是靠类型的,这主要是为了不造成我们第一眼对变量类型的误解和对指针类型的误解,比如: int* p1,p2 我们一眼看上去是不是通常会觉得p1、p1都是一个int*的指针呢?因为我们通常会误把int*当作一个类型,然而无论int*还是i...

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    例如,我用VC2015的工程向导新建一个ATL的工程名字叫myAtl,那么VC会同时给我生成一个叫做myAtlPS的工程。这个myAtlPS工程是做什么的?什么情况下可以不需要它?什么情况下它又是必须存在的? PS工程是什么?可以不要吗? 这个PS工程叫做代理与存根(proxy&nbs...

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    现象:程序在xp系统上面总是莫名其妙的崩溃,检查代码看不出任何问题,感觉代码都很好。即使你远程调试,找到了崩溃的点,当你注释了崩溃点之后,还是会崩溃到别的地方。当你遇到了这种情况的时候,不妨参照一下下面的方法看看,说不定可以解决问题。如何解决?将崩溃程序相关的所有工程代码全部关闭全局变量的线程安全检...

    ATL实现windows右键菜单扩展(ContextMenu)

    ATL实现windows右键菜单扩展(ContextMenu)

    右键菜单,即用户右击shell对象时弹出的上下文菜单(context menu)。本文记录了如何创建右键菜单的基本过程,跟着步骤一步一步来,即可创建出一个右键菜单工程。第一步,新建一个ATL工程Visual Studio—>新建项目—>ATL—>使用默认配置(一直按下一步即可)。注...

    C++ 获取进程所在目录(进程全路径)

    C++ 获取进程所在目录(进程全路径)

    打开windows任务管理器,会看到很多的进程在运行,随机挑选一个,如何通过c++代码获取某一个进程的所在全路径呢?这也是在windows软件开发中经常遇到的需求。通过进程名获取进程全路径由于可能很多进程叫同一个名字,所以获得的结果也有可能是多个#include <windows.h...