如何使用NotifyIconData在Windows系统中显示自定义托盘图标?

作者:内蒙古淘贝游戏开发公司 阅读:116 次 发布时间:2023-05-15 17:44:35

摘要:  作为Microsoft Windows系统中的一项重要功能,托盘常常被程序开发者用于展示程序运行情况、提供一些常用功能等。在Windows系统中,托盘图标使用的是NotifyIconData结构体。本文将会介绍如何使用NotifyIconData在Windows系统中显示自定义托盘图标。  1.获取托盘图标的句...

  作为Microsoft Windows系统中的一项重要功能,托盘常常被程序开发者用于展示程序运行情况、提供一些常用功能等。在Windows系统中,托盘图标使用的是NotifyIconData结构体。本文将会介绍如何使用NotifyIconData在Windows系统中显示自定义托盘图标。

如何使用NotifyIconData在Windows系统中显示自定义托盘图标?

  1.获取托盘图标的句柄

  在初始化托盘图标前,需要先获取托盘图标的句柄。句柄可以用来检索托盘图标并与之交互。获取方法如下所示:

  ```c++

  HWND trayHwnd = FindWindow(_T("Shell_TrayWnd"), NULL);

  HWND trayNotify = FindWindowEx(trayHwnd, NULL, _T("TrayNotifyWnd"), NULL);

  HWND trayItem = FindWindowEx(trayNotify, NULL, _T("SysPager"), NULL);

  trayItem = FindWindowEx(trayItem, NULL, _T("ToolbarWindow32"), NULL);

  ```

  2.初始化NotifyIconData

  NotifyIconData是一个结构体,可以用来设置托盘图标的属性。初始化NotifyIconData结构体时,需要设定一些基础属性,包括版本号、句柄、消息等。具体示例代码如下:

  ```c++

  NOTIFYICONDATA nid;

  nid.cbSize = sizeof(NOTIFYICONDATA);

  nid.hWnd = hwnd;

  nid.uID = ID_TRAY_ICON;

  nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

  nid.uCallbackMessage = WM_TRAY_ICON;

  nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TRAY_ICON));

  ```

  其中,cbSize字段需要设置为结构体的大小,hWnd字段是托盘图标所在窗口的句柄,uID字段是托盘图标的ID,uFlags字段是一个标志位,它用来指定NotifyIconData结构体中哪些字段包含有效数据,uCallBackMessage字段是用来接收托盘图标相关消息的窗口消息ID。

  3.显示托盘图标

  显示托盘图标的方法非常简单。只需要在初始化NotifyIconData之后,使用Shell_NotifyIcon函数即可。具体代码如下:

  ```c++

  Shell_NotifyIcon(NIM_ADD, &nid);

  ```

  4.显示/更改托盘图标的提示信息

  除了显示托盘图标外,还可以设置托盘图标的提示信息。提示信息就是当鼠标移动到托盘图标上时显示的文本。这可以通过设置NotifyIconData结构体的szTip字段来实现。具体代码如下:

  ```c++

  _tcscpy_s(nid.szTip, MAX_TIP_LENGTH, _T("这是一个自定义的托盘图标。"));

  Shell_NotifyIcon(NIM_MODIFY, &nid);

  ```

  5.更改托盘图标

  在运行中,可能需要更改托盘图标,比如在不同状态下显示不同的图标。更改托盘图标也很简单。只需要使用Shell_NotifyIcon函数,设置uFlags的NIF_ICON标志位,并设置hIcon字段为新的图标即可。具体代码如下:

  ```c++

  // 修改托盘图标为ERR_ICON

  nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ERR_ICON));

  Shell_NotifyIcon(NIM_MODIFY, &nid);

  ```

  6.删除托盘图标

  最后,程序退出时需要删除托盘图标,否则会造成托盘图标一直存在的问题。删除托盘图标只需要使用Shell_NotifyIcon函数,并设置uFlags的NIM_DELETE标志位即可。具体代码如下:

  ```c++

  Shell_NotifyIcon(NIM_DELETE, &nid);

  ```

  总结

  使用NotifyIconData显示自定义托盘图标非常简单。只需要完成下列步骤即可实现:

  1.获取托盘图标句柄。

  2.初始化NotifyIconData,并设置图标、提示信息等属性。

  3.使用Shell_NotifyIcon函数显示托盘图标。

  4.使用Shell_NotifyIcon函数更改/删除托盘图标。

  通过这些方法,我们可以轻松地创建自己的托盘图标,并进行展示和交互。

  • 原标题:如何使用NotifyIconData在Windows系统中显示自定义托盘图标?

  • 本文链接:https://qipaikaifa1.com/tb/5828.html

  • 本文由内蒙古淘贝游戏开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与淘贝科技联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:189-2934-0276


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部