使用notifyicondata在Windows应用程序中创建自定义任务栏图标

作者:锦州淘贝游戏开发公司 阅读:124 次 发布时间:2023-05-15 16:33:32

摘要:  作为一款现代化操作系统,Windows 提供了很多不同的 API,以供应用程序进行交互和协作。其中一个重要的 API 是 notifyicondata。notifyicondata API 可以帮助应用程序创建自定义任务栏图标,从而更好地与用户进行交互。本文将介绍如何在 Windows 应用程序中使用 notifyic...

  作为一款现代化操作系统,Windows 提供了很多不同的 API,以供应用程序进行交互和协作。其中一个重要的 API 是 notifyicondata。notifyicondata API 可以帮助应用程序创建自定义任务栏图标,从而更好地与用户进行交互。本文将介绍如何在 Windows 应用程序中使用 notifyicondata。

使用notifyicondata在Windows应用程序中创建自定义任务栏图标

  notifyicondata 是一个数据结构,用于控制任务栏图标的外观和行为。它包含了任务栏图标的图标、提示信息、菜单等信息。通过设置 notifyicondata 中的各种属性,应用程序可以自定义任务栏图标的外观和行为,以适应特定的应用场景。

  要创建自定义任务栏图标,首先需要创建一个 notifyicondata 结构,并初始化其各个属性。这通常通过调用 Shell_NotifyIcon 函数实现。该函数需要传入一个操作代码和一个指向 notifyicondata 数据结构的指针。操作代码通常是 NIM_ADD、NIM_DELETE、NIM_MODIFY 等,用于指示要执行的操作。具体来说,NIM_ADD 用于添加一个任务栏图标,NIM_DELETE 用于删除一个任务栏图标,NIM_MODIFY 用于修改一个任务栏图标的属性。

  下面是一个示例代码,用于添加一个任务栏图标:

  ```

  NOTIFYICONDATA nid;

  nid.cbSize = sizeof(NOTIFYICONDATA);

  nid.hWnd = hwnd;

  nid.uID = 1;

  nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

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

  nid.uCallbackMessage = WM_APP;

  lstrcpyn(nid.szTip, TEXT("My Application"), sizeof(nid.szTip) / sizeof(TCHAR));

  Shell_NotifyIcon(NIM_ADD, &nid);

  ```

  在这个示例中,我们首先创建了一个 NOTIFYICONDATA 结构。然后,我们设置了该结构中的各种属性,包括窗口句柄、图标 ID、标志等。注意到我们指定了 NIF_ICON、NIF_MESSAGE 和 NIF_TIP 标志,以便通知系统我们想要显示图标、接收消息和提示文本。接着,我们调用 LoadIcon 函数来加载任务栏图标的图标,设置了回调消息为 WM_APP,最后调用 Shell_NotifyIcon 函数来添加任务栏图标。

  除了添加任务栏图标之外,我们还需要实现一些功能,例如发送自定义消息、打开菜单、提示文本等。下面是一个示例代码,用于在任务栏图标上右键点击时弹出一个菜单:

  ```

  LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

  {

   switch (msg)

   {

   case WM_CREATE:

   {

   NOTIFYICONDATA nid;

   nid.cbSize = sizeof(NOTIFYICONDATA);

   nid.hWnd = hwnd;

   nid.uID = 1;

   nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

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

   nid.uCallbackMessage = WM_APP;

   lstrcpyn(nid.szTip, TEXT("My Application"), sizeof(nid.szTip) / sizeof(TCHAR));

   Shell_NotifyIcon(NIM_ADD, &nid);

   }

   break;

   case WM_APP:

   {

   switch (lParam)

   {

   case WM_RBUTTONUP:

   {

   HMENU hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MYMENU));

   HMENU hSubMenu = GetSubMenu(hMenu, 0);

   POINT pt;

   GetCursorPos(&pt);

   SetForegroundWindow(hwnd);

   TrackPopupMenu(hSubMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);

   PostMessage(hwnd, WM_NULL, 0, 0);

   }

   break;

   case WM_LBUTTONUP:

   // TODO: do something

   break;

   }

   }

   break;

   case WM_DESTROY:

   {

   NOTIFYICONDATA nid;

   nid.cbSize = sizeof(NOTIFYICONDATA);

   nid.hWnd = hwnd;

   nid.uID = 1;

   Shell_NotifyIcon(NIM_DELETE, &nid);

   PostQuitMessage(0);

   }

   break;

   default:

   return DefWindowProc(hwnd, msg, wParam, lParam);

   }

   return 0;

  }

  ```

  在这个示例代码中,我们根据任务栏图标的回调消息 WM_APP 来执行不同的操作。当用户右键单击任务栏图标时,我们加载一个菜单资源,弹出菜单并且在当前窗口设置为活动窗口。当用户左键单击任务栏图标时,我们可以执行其他操作,例如最小化/还原主窗口,打开一个弹出窗口等等。

  总之,notifyicondata API 可以帮助我们创建自定义任务栏图标,以增强应用程序与用户之间的交互性。通过设置任务栏图标的图标、提示文本、菜单等属性,我们可以更好地控制任务栏图标的外观和行为。除了应用程序的主要窗口之外,任务栏图标是应用程序的另一个重要组成部分,应该在设计和实现时予以充分考虑。

  • 原标题:使用notifyicondata在Windows应用程序中创建自定义任务栏图标

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

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

    CTAPP999

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

    微信联系

    在线咨询

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


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


    在线咨询

    免费通话


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


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

    免费通话
    返回顶部