首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Win32 NotifyIcon中使用现代的Windows10上下文菜单?

在Win32 NotifyIcon中使用现代的Windows 10上下文菜单,可以通过以下步骤实现:

  1. 创建一个Win32窗口应用程序,并添加NotifyIcon到窗口中。
  2. 在窗口的消息处理函数中,处理WM_CONTEXTMENU消息,该消息在用户右键单击NotifyIcon时触发。
  3. 在WM_CONTEXTMENU消息处理函数中,创建一个现代的Windows 10上下文菜单。
  4. 使用Windows API函数来创建菜单项,并为每个菜单项添加相应的功能。
  5. 将菜单项添加到上下文菜单中。
  6. 使用Shell_NotifyIcon函数将上下文菜单与NotifyIcon关联起来。
  7. 处理菜单项的点击事件,并执行相应的操作。

下面是一个示例代码,演示如何在Win32 NotifyIcon中使用现代的Windows 10上下文菜单:

代码语言:txt
复制
#include <Windows.h>

// 上下文菜单命令ID
#define IDM_MENU_ITEM1 1001
#define IDM_MENU_ITEM2 1002
#define IDM_MENU_ITEM3 1003

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 创建窗口
    HWND hwnd;
    WNDCLASS wc = {};

    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = L"WindowClass";

    RegisterClass(&wc);

    hwnd = CreateWindowEx(
        0,
        L"WindowClass",
        L"Win32 NotifyIcon",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 500, 500,
        NULL,
        NULL,
        hInstance,
        NULL
    );

    // 创建NotifyIcon
    NOTIFYICONDATA nid = {};

    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hWnd = hwnd;
    nid.uID = 1;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = WM_USER + 1;
    nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcscpy_s(nid.szTip, L"NotifyIcon Demo");

    Shell_NotifyIcon(NIM_ADD, &nid);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // 移除NotifyIcon
    Shell_NotifyIcon(NIM_DELETE, &nid);

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CONTEXTMENU:
    {
        // 创建上下文菜单
        HMENU hMenu = CreatePopupMenu();
        AppendMenu(hMenu, MF_STRING, IDM_MENU_ITEM1, L"菜单项1");
        AppendMenu(hMenu, MF_STRING, IDM_MENU_ITEM2, L"菜单项2");
        AppendMenu(hMenu, MF_STRING, IDM_MENU_ITEM3, L"菜单项3");

        // 显示上下文菜单
        POINT pt;
        GetCursorPos(&pt);
        SetForegroundWindow(hwnd);
        TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, NULL);

        // 销毁上下文菜单
        DestroyMenu(hMenu);
    }
    break;

    case WM_COMMAND:
    {
        // 处理菜单项点击事件
        switch (LOWORD(wParam))
        {
        case IDM_MENU_ITEM1:
            // 执行菜单项1的操作
            MessageBox(hwnd, L"点击了菜单项1", L"提示", MB_OK);
            break;

        case IDM_MENU_ITEM2:
            // 执行菜单项2的操作
            MessageBox(hwnd, L"点击了菜单项2", L"提示", MB_OK);
            break;

        case IDM_MENU_ITEM3:
            // 执行菜单项3的操作
            MessageBox(hwnd, L"点击了菜单项3", L"提示", MB_OK);
            break;
        }
    }
    break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}

这个示例代码演示了如何在Win32 NotifyIcon中使用现代的Windows 10上下文菜单。在上下文菜单中,我们创建了三个菜单项,并为每个菜单项添加了点击事件处理。当用户右键单击NotifyIcon时,上下文菜单将显示,并根据用户的选择执行相应的操作。

请注意,这只是一个简单的示例,实际应用中可能需要更复杂的菜单和功能。腾讯云提供了丰富的云计算产品和服务,可以根据具体需求选择适合的产品和服务。具体的产品和服务推荐,请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【愚公系列】2023年11月 Winform控件专题 NotifyIcon控件详解

HideBalloonTip:隐藏当前显示气泡提示。ShowContextMenu:在系统托盘上下文菜单显示指定菜单。...使用NotifyIcon控件通常需要以下步骤:创建一个新NotifyIcon控件,并设置相关属性。编写事件处理程序来响应NotifyIcon控件各种事件,例如鼠标单击、双击、右键菜单等。...ContextMenuStrip是NotifyIcon控件一个属性,可以为该控件右键菜单指定一个菜单项集合。具体使用方法如下:在设计窗口中,向表单拖放一个NotifyIcon控件。...下面是一个示例代码,演示如何在NotifyIcon控件中使用ContextMenuStrip属性。...状态监控:通过控件显示应用程序运行状态,例如网络连接状态、CPU使用率等。菜单操作:用户通过右键单击控件可以弹出菜单,执行相应操作。

1.3K11

C# 实现最小化托盘功能

winform程序实现最小化托盘显示 1.创建新解决方案,解决方案名称和路径自定义 2.在解决方案下面新建一个窗体,从左边工具箱,将NotifyIcon拖过去窗体,该控件作用是:运行程序期间在Windows...//双击该控件时触发事件 private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)...还可以设置自己喜欢图标作为托盘显示icon ? 接下来增加一个另外: 在NotifyIcon控件增加一个右键菜单 1.在左边工具栏拖入一个上下文菜单contextMenuStrip ?...2.菜单上添加两个子项,显示和退出 ? 3.双击显示和退出进入,下面直接贴代码,代码就不解释了,都有注释。...,是将 contextMenuStrip 和 NotifyIcon联系起来操作,如下图: ?

1.5K10
  • WPF:自动执行机器人程序若干注意事项

    3.最小化到系统托盘 WinformNotifyIcon控件在WPF仍然可以继续使用 先 using System.Windows.Forms; 添加Windows.Forms命名空间引用 再声明一个窗体级变量...private readonly NotifyIcon notifyIcon; 最后在主窗体构架函数,加入下列这一段 notifyIcon = new NotifyIcon(); notifyIcon.BalloonTipText...; notifyIcon.Text = Properties.Resources.AppTitle;//指定托盘提示文字为资源AppTitle字符串 notifyIcon.Icon = Properties.Resources.App...;//指定托盘图标为资源"App"图标 notifyIcon.Visible = false; notifyIcon.MouseClick += notifyIcon_MouseClick; //...但这样还不够,如果Windows注销时,仍然会直接退出 这就需要 using Microsoft.Win32;使用Win32命名空间下某些功能了,主窗体构造函数,增加: //捕获关机事件 SystemEvents.SessionEnding

    1.3K80

    WPF 托盘显示 NotifyIcon WPF

    本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可以右击打开菜单,双击执行指定代码 NotifyIcon WPF 通过 Nuget 安装 Hardcodet.NotifyIcon.Wpf 可以快速做到在...MenuItem Header="退出" Command="{Binding ExitApplicationCommand}" /> 在 TaskbarIcon 使用菜单..." 本文代码 WPF 托盘显示 右击打开菜单,双击打开软件-CSDN下载 下面还有一些高级使用 定义托盘鼠标移动上去文字颜色 <tb:TaskbarIcon.TrayToolTip...如果需要自定义气泡,定义一个继承 UIElement 类,然后传入 TaskbarIcon.ShowCustomBalloon 就可以 已经定义了 FancyBalloon 气泡,可以通过下面的代码...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

    7.1K31

    带有 WinPaletter 高级 Windows 外观编辑器

    何在 Windows 中使用 WinPaletter 为口音着色无法为 UI 元素选择所需颜色或将其替换为您想要颜色可能会令人失望。...它们大多数允许您为特定用户界面元素选择颜色。例如,您可以通过指定将鼠标悬停在“开始”按钮上时显示特定颜色来更改操作中心、“开始”菜单或任务栏等元素外观。支持多种颜色选择选项。...总之,免费软件程序简化了自由更改 Windows 元素颜色过程,因为无需浏览注册表即可设置所需首选项。话虽如此,Windows 设置个性化菜单任何颜色更改都会自动更改自定义颜色。...Windows 11 使用颜色通过指示用户界面元素之间视觉层次结构和结构来帮助用户专注于他们任务。颜色是与上下文相适应,主要用于提供微妙增强用户交互、平静基础,并仅在必要时强调重要项目。...如何更改 Windows 11 透明效果?透明效果为 Windows 许多应用程序和组件添加了一些花哨丙烯酸模糊效果。这为上下文菜单、弹出项目和重叠窗口带来了增强视觉吸引力。

    2.6K40

    Windows下使用VS2019和CMake 3.18.3编译使用yaml-cpp库

    3.1、使用VS2019编译Win32 Debug模式`yaml-cppd.lib`库 3.2、使用VS2019编译Win32 Release模式`yaml-cpp.lib`库 4、在VS2019使用...之前写过两篇关于在CentOS7下编译yaml-cpp库和Windows10使用VS2017编译和使用yaml-cpp库文章。...版本Win32静态lib库,大体步骤和Windows10使用VS2017编译和使用yaml-cpp库这篇博客描述一致。...3.1、使用VS2019编译Win32 Debug模式yaml-cppd.lib库 选择需要编译平台和模式,Win32/Win64以及Debug/Release 上面选择了Debug以及Win32...和yaml-cpp.lib文件 4、在VS2019使用yaml-cpp库读写yaml文件 这个在VS2019引入yaml-cpp库方式和VS2017一样,具体可以参考我之前博客Windows10

    3.8K20

    Windows 托盘区域显示图标

    Windows 2000以之后系统应用程序可以使用这个值 NOTIFYICON_VERSION_4:使用当前行为。...如果你识别出拥有GUID 图标调用了函数Shell_NotifyIcon 那么你必须使用同样GUID 去识别后来被函数Shell_NotifyIcon处理图标 为了给这个成员函数产生一个使用GUID...如果你使用当前定义结构体大小,这个应用程序在早期Shell32.dll 很可能不会运行,因为它需要一个更小结构体。...如果你识别出拥有GUID 图标调用了函数Shell_NotifyIcon 那么你必须使用同样GUID 去识别后来被函数Shell_NotifyIcon处理图标 二进制文件包含图标被移除。...具体不同如下所示: 如果用户选择使用键盘弹出通知图标的快捷菜单那么程序将会发送一个WM_CONTEXTMENU 消息。

    1.9K20

    使用 Python 制作按键触发 Windows 通知自动化脚本

    /Toggle_Keys_Notification 2.源码使用与解析 2.1 源码使用 作者项目可以在 Toggle_Keys_Notification 项目内,运行 notify.py 启动监听:...,最核心_show_toast 代码位于 toast.py ,下面是这个函数部分代码剖析: 注册和创建 window : message_map = {WM_DESTROY: self.on_destroy...win32模块解析如下。...WS_SYSMENU: 具有 SYSTEM 菜单样式 CW_USEDEFAULT: 采用系统默认位置 CreateWindow 这个函数具有非常多参数,甚至有一个百度百科来详细解析每一个参数具体作用...大家感兴趣可以移步: https://baike.baidu.com/item/CreateWindow/5076220 了解win32这些模块名称意义后,理解上述代码逻辑便很轻松了 图标加载及任务栏图标显示配置

    1.7K30

    Python 制作按键触发Windows通知脚本

    2.源码使用与解析 2.1 源码使用 作者项目可以在 Toggle_Keys_Notification 项目内,运行 notify.py 启动监听: python notify.py 启动后点击一下大小写切换键...,触发通知则说明代码正常运转: 2.2 源码分析 该项目通过win32gui和win32con实现了弹出toast进行通知功能,最核心_show_toast代码位于 toast.py ,下面是这个函数部分代码剖析...win32模块解析如下。...WS_SYSMENU: 具有 SYSTEM 菜单样式 CW_USEDEFAULT: 采用系统默认位置 CreateWindow 这个函数具有非常多参数,甚至有一个百度百科来详细解析每一个参数具体作用...,大家感兴趣可以移步: https://baike.baidu.com/item/CreateWindow/5076220 了解win32这些模块名称意义后,理解上述代码逻辑便很轻松了。

    1.8K20

    ERP GUI安装操作说明

    1.1 安装说明 本文用来说明如何在Windows10系统下安装和配置GUI 客户端。注:这里GUI我们使用最新版本GUI770。...1.2 操作步骤 1.首先在解压缩后GUI 目录下找到“SapGuiSetup.exe”安装文件,如下图: 注:下载后Window版本GUI安装包可能稍有差异,只要正常解压找到SapGuiSetup.exe...执行文件即可,这里提供下我路径仅供参考:D:\SAPGUI770Win\BD_NW_7.0_Presentation_7.70_Comp._1_\PRES1\GUI\Windows\Win32 2.双击执行...1.3 GUI配置操作步骤(以windows10为例) 1.双击桌面 ,进入如下图: 2.点击“可变登录”,选择“连接” 3.点击“下一步”进入,按照如图输入描述、要访问服务IP地址、实例编号、...免责声明:本文所用视频、图片、文字涉及作品版权问题,请第一时间告知,我们将根据您提供证明材料确认版权并按国家标准支付稿酬或立即删除内容!

    1.5K10

    在Visual Studio2013编译使用libcurl库

    本文主要介绍如何在Visual Studio 2013开发环境编译并使用libcurl库。...Studio 2013编译libcurl源代码了,笔者写这篇文章时libcurl最新版本是7.67.0,使用Windows10系统。...3、在Visual Studio 2013使用libcurl库 (1)、创建一个Win32 VC++控制台空项目 打开Visual Studio 2013开发工具,创建一个基于Win32 VC++控制台空项目...下面在VS2013加入我们刚才编译好libcurl库 在VS2013左下角【属性管理器】->【Debug|Win32】,右键单击【Debug|Win32】,选择【属性】,进入到【Debug属性页对话框...右键单击libcurl_debug_x86_vs2013.props属性表文件,选择【属性】菜单,在libcurl_debug_x86_vs2013.props属性页对话框添加libcurl头文件和

    5.2K20

    大白技术控 | Windows10X 模拟器简单上手体验

    开始菜单与圆角化 从 Windows8 时代开始,以磁贴为代表直角设计便充斥在 Windows 界面的各个角落。但是在 Windows10X ,界面全面转向了圆角,注意哈,我说是全面。...原来磁贴都是放在开始菜单,理论上它可以显示很多信息,并有一些有趣动画效果。但在桌面系统,我们打开开始就意味着结束,磁贴占据面积大,又没有多少软件适配,理想很美好,现实很骨感,不如砍了吧。...上半部分显示应用列表,这里应用没有完全显示,推测会根据用户使用频率进行顺序调整,就像现在开始菜单最常用标签。这里显示方式就是平铺图标,这更符合我们在移动端使用体验。 注意到区别了吗?...但是我们还是可以简单地看看这个 Win32 在这个系统是怎么运行。 微软在发布模拟器时候提到了 Win32 应用运行模式,是在一个容器(Container)内运行。...在点击开始菜单时,图标会有动画(四个方块轮流变色缩放),目前根据一些信息,这是 Windows10X 新特性,开发者也可以使用使用哪个屏幕开始菜单打开应用,应用就会出现在哪个屏幕上。

    1.6K20

    Windows10使用VS2017编译和使用yaml-cpp库

    /jbeder/yaml-cpp 在Windows10使用VS2017编译yaml-cpp库前,需要去Github上面下载对应yaml-cpp源代码 git clone https://github.com...我在Windows10下载好yaml-cpp源代码将其放在相应目录下,最后下载文件目录结构如下图所示: ?...文件夹下shift+鼠标右键,选择在此处打开powershell窗口,输入cmake … 需要注意是:在Windows10使用cmake编译yaml-cpp之前,需要安装好cmake并且配置好cmake...选择所需要库类型,比如Debug/Release、Win32/X64,一共是4种组合: Debug和Win32 Debug和X64 Release和Win32 Release和X64 选好对应编译类型...在VS2017新建一个基于控制台Win32应用程序, 如下图所示: ? ?

    3.3K10

    加强版在国内分发 UWP 应用正确方式 通过win32安装UWP应用

    本文告诉大家如何使用传统方法,将 UWP 作为 win32 应用安装包方法分发给用户安装 将 UWP 作为安装包方式分发也就是通过旁加载方式,而微软干不错使用旁加载如果使用证书不清真,那么就要求用户信任证书...将 UWP 作为 win32 安装包方式让用户安装原理就是写一个安装程序,这个安装程序是控制台程序,在安装程序将会自动安装证书,自动安装应用。...如何做自动更新请看 如何在国内发布 UWP 应用 和 win10 uwp 发布旁加载自动更新 用这两个方法可以做到旁加载应用可以自动更新,要求 17134 最低版本 此时可以看到发布文件夹,这里...因为使用安装包安装可以拿到管理员权限,所以上面的安装程序不需要说明需要管理员权限 大概使用这个方法才能让用户在国内用上 UWP 应用,用上了 UWP 应用可以使用现代触摸和极高渲染性能,可以作出现代应用...,可以使用 win32 方法安装,请看 aL3891/AppxInstaller: Tools for installing Uwp apps outside the windows store 但是这个项目现在

    1K10

    微软混合开发解决方案 WebView2

    webview2 webview2是微软推出一组控件,它可以让本地应用程序轻松嵌入web技术。WebView2 控件使用Microsoft Edge作为呈现引擎在本机应用程序显示 Web 内容。...使用 WebView2,您可以将 Web 代码嵌入到本机应用程序不同部分,或在单个 WebView 实例构建所有本机应用程序。 Webview2 应用程序允许广泛覆盖范围。...WebView 使用原始 Edge (Trident) 渲染引擎,是 Windows10 唯一控件。WebView2 使用较新 Edge 渲染引擎,并支持更多 Windows 平台。...webview2 vs electron Electron 为常见桌面应用程序需求提供 API,例如菜单、文件系统访问、通知等。...WebView2 是一个组件,旨在集成到 WinForms、WPF、WinUI 或 Win32 等应用程序框架。 Node.js 被集成到 Electron

    1.8K50

    一种清除windows通知区域“僵尸”图标的方案——问题分析

    “后来,我们将通知图标添加到任务栏。”        ...“我认为人们开始将通知区域叫作系统托盘是因为在Windows95包含了一个systray.exe程序,这个程序在通知区域中显示了一些图标,音量控制,PCMCIA(在当时是叫这个名字)状态、电池电量表等...“更糟糕是,其他团队(Shell之外团队)也错误地使用了这个词,并且开始在他们自己文档和示例程序里面都使用了系统托盘这个词,其中有一些地方甚至错误地声称系统托盘就是通知区域正式名称。”        ...可是,我们使用Spy++查看Windows7任务栏组成时就会发现,Tray这个单词无处不在啊! ? “僵尸图标”         说了这么多历史故事,我们再回到我们这篇博文要讲述问题上。...= m_hWnd; m_NotifyIcon.hIcon = m_hIcon; std::wstring wstrInfo = L"A英1文"; // 故意取一个晦涩名字 wmemcpy_s(m_NotifyIcon.szTip

    1.3K30

    打造自己最喜爱 Windows10 —— 主题美化篇

    美化后,升级 Windows10 版本需先卸载主题破解补丁! 本文以 Windows10 1909 为例! 如果安装了 360 安全卫士 或金山毒霸,请卸载!...创建系统还原点 同时按 Win 和 x,再按 y 系统信息 系统保护 选中 C 盘 配置 启用系统保护 最大使用量:21%(自由分配) 确定 自由输入名字 创建 备份自己数据 关闭用户帐户控制(UAC...# 开始菜单调整工具 # 安装 右键,以管理员身份运行 StartIsBack2.9.exe 为所有人安装 # 配置 右键开始菜单 >> 属性 外观 >> 视觉样式:lovelace NA + Windows10...按钮 自定义外观 >> 添加 勾选:使用自定义开始菜单颜色 >> 透明度 0% >> 清除模糊 勾选:使用自定义任务栏颜色 >> 透明度 0% >> 清除模糊 勾选:隐藏用户账号图像 自定义任务栏特效...>> 勾选:任务栏图标居中 切换 >> 任务栏和开始菜单上下文菜单样式:经典 # 图标 打开 7tsp GUI v0.6(2019).exe Add a Custom Pack:7TSP Lumicons

    1.6K30
    领券