VC++ 使用气泡提示

VC++ Win32 API实现系统托盘气泡提示完整指南与实战 在Windows桌面应用开发中,系统托盘(通知区域)是后台程序与用户进行轻量级交互的重要界面组件。其核心原理基于Windows消息循环机制,应用程序通过注册通知图标并关联自定义消息,实现与用户的鼠标事件交互。这一技术对于需要后台运行、资源占用敏感或追求极致性能的工具类软件具有重要价值,广泛应用于下载管理、即时通讯、系统监控等场景。本文聚焦于使用VC++和原生Win32 API,深入解析如何稳定实现系统托盘图标与气泡提示功能,并针对现代Windows系统的高DPI、深色模式等特性提供兼容性解决方案。通过剖析S 阅读详情


首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容:

//// Tray notification definitions
////

typedef struct _NOTIFYICONDATAA {
       
DWORD cbSize;
       
HWND hWnd;
       
UINT uID;
       
UINT uFlags;
       
UINT uCallbackMessage;
       
HICON hIcon;
#if (_WIN32_IE < 0x0500)
       
CHAR   szTip[64];
#else
       
CHAR   szTip[128];
#endif
#if
(_WIN32_IE >= 0x0500)
       
DWORD dwState;
       
DWORD dwStateMask;
       
CHAR   szInfo[256];
       
union {
           
UINT  uTimeout;
           
UINT  uVersion;
        }
DUMMYUNIONNAME;
       
CHAR   szInfoTitle[64];
       
DWORD dwInfoFlags;
#endif
#if
(_WIN32_IE >= 0x600)
       
GUID guidItem;
#endif
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW {
       
DWORD cbSize;
       
HWND hWnd;
       
UINT uID;
       
UINT uFlags;
       
UINT uCallbackMessage;
       
HICON hIcon;
#if (_WIN32_IE < 0x0500)
       
WCHAR  szTip[64];
#else
       
WCHAR  szTip[128];
#endif
#if
(_WIN32_IE >= 0x0500)
       
DWORD dwState;
       
DWORD dwStateMask;
       
WCHAR  szInfo[256];
       
union {
           
UINT  uTimeout;
           
UINT  uVersion;
        }
DUMMYUNIONNAME;
       
WCHAR  szInfoTitle[64];
       
DWORD dwInfoFlags;
#endif
#if
(_WIN32_IE >= 0x600)
       
GUID guidItem;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
#ifdef UNICODE
typedef NOTIFYICONDATAW NOTIFYICONDATA;
typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
#else
typedef
NOTIFYICONDATAA NOTIFYICONDATA;
typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
#endif // UNICODE


#define NOTIFYICONDATAA_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
#define NOTIFYICONDATAW_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
#ifdef UNICODE
#define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAW_V1_SIZE
#else
#define
NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAA_V1_SIZE
#endif

#define
NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
#define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
#ifdef UNICODE
#define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE
#else
#define
NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE
#endif


#if
(_WIN32_IE >= 0x0500)
#define NIN_SELECT          (WM_USER + 0)
#define NINF_KEY            0x1
#define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY)
#endif

#if
(_WIN32_IE >= 0x0501)
#define NIN_BALLOONSHOW     (WM_USER + 2)
#define NIN_BALLOONHIDE     (WM_USER + 3)
#define NIN_BALLOONTIMEOUT  (WM_USER + 4)
#define NIN_BALLOONUSERCLICK (WM_USER + 5)
#endif


#define
NIM_ADD         0x00000000
#define NIM_MODIFY      0x00000001
#define NIM_DELETE      0x00000002
#if (_WIN32_IE >= 0x0500)
#define NIM_SETFOCUS    0x00000003
#define NIM_SETVERSION  0x00000004
#define     NOTIFYICON_VERSION 3
#endif

#define
NIF_MESSAGE     0x00000001
#define NIF_ICON        0x00000002
#define NIF_TIP         0x00000004
#if (_WIN32_IE >= 0x0500)
#define NIF_STATE       0x00000008
#define NIF_INFO        0x00000010
#endif
#if
(_WIN32_IE >= 0x600)
#define NIF_GUID        0x00000020
#endif

#if
(_WIN32_IE >= 0x0500)
#define NIS_HIDDEN              0x00000001
#define NIS_SHAREDICON          0x00000002

// says this is the source of a shared icon

// Notify Icon Infotip flags
#define NIIF_NONE       0x00000000
// icon flags are mutually exclusive
// and take only the lowest 2 bits
#define NIIF_INFO       0x00000001
#define NIIF_WARNING    0x00000002
#define NIIF_ERROR      0x00000003
#define NIIF_ICON_MASK  0x0000000F
#if (_WIN32_IE >= 0x0501)
#define NIIF_NOSOUND    0x00000010
#endif
#endif

SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
#ifdef UNICODE
#define Shell_NotifyIcon  Shell_NotifyIconW
#else
#define
Shell_NotifyIcon  Shell_NotifyIconA
#endif // !UNICODE

////
//// End Tray Notification Icons
////

 

在stdafx.h文件中添加以下内容:

#ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif


自定义消息及处理函数:

#define MYWM_NOTIFYICON WM_USER+1
afx_msg void OnMyIconNotify(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(MYWM_NOTIFYICON,OnMyIconNotify
)

添加变量: NOTIFYICONDATA m_nData;

 

在任务栏通知区添加图标和提示的代码:

m_nData.cbSize=sizeof(NOTIFYICONDATA);
m_nData.hWnd=GetSafeHwnd();
m_nData.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON;
m_nData.uCallbackMessage=MYWM_NOTIFYICON;
m_nData.uID=IDR_MAINFRAME;
m_nData.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nData.dwInfoFlags=NIIF_INFO;

_tcscpy
(m_nData.szInfoTitle,"管理员");
_tcscpy(m_nData.szInfo,"欢迎使用");

Shell_NotifyIcon(NIM_ADD,&m_nData);

修改气泡提示的代码:

void CTipDlg::OnButton1()
{
_tcscpy(m_nData.szInfoTitle,"提醒你"
);
_tcscpy(m_nData.szInfo,"内容改变"
);
m_nData.uTimeout=1000
;
m_nData.uVersion=NOTIFYICON_VERSION;
Shell_NotifyIcon(NIM_MODIFY,&m_nData
);

}

删除的代码:
BOOL CTipDlg::DestroyWindow()
{
  Shell_NotifyIcon(NIM_DELETE,&m_nData
);
  return CDialog::DestroyWindow
();
}

 

消息处理函数:

void CTipDlg::OnMyIconNotify(WPARAM wParam,LPARAM lParam)
{
UINT uMouseMsg=LOWORD(lParam);
switch(uMouseMsg)
{
case WM_LBUTTONDBLCLK:
SendMessage(WM_CLOSE,0,0);
break;

case WM_LBUTTONDOWN:
Shell_NotifyIcon(NIM_MODIFY,&m_nData);
break;
}
}

具体使用方法请参考源代码和相关资料!

VC++ MFC不规则窗体实战:气泡对话框实现与优化指南 在桌面应用开发中,用户界面(UI)的视觉体验直接影响软件的专业度和用户友好性。传统的矩形窗口虽然功能完整,但往往显得呆板。通过Windows GDI(图形设备接口)和窗口消息机制,开发者可以突破系统默认框架,实现不规则窗体,从而创建更具个性和吸引力的界面形态。这项技术的核心价值在于提升品牌辨识度和用户体验,尤其适用于需要突出显示或引导用户注意力的场景,如提示框、聊天窗口和新手引导。本文以经典的VC++ MFC框架为例,深入探讨实现气泡对话框这一具体应用。通过对比区域法和分层窗口法两种主流方案,详细解析了如何 阅读详情

相关推荐

VC++ Win32实现系统托盘气泡提示完整示例

系统托盘通知区域是Windows操作系统中一个重要的用户交互界面元素,通常位于任务栏右侧,用于展示后台运行程序的状态图标与通知提示。该区域不仅提升了用户对应用程序运行状态的感知能力,也为程序提供了低干扰的交互入口。在Win32编程中,合理使用系统托盘功能,可以增强应用程序的用户体验和后台服务的可管理性。本章将从系统托盘的基本构成、应用场景出发,逐步引导读者理解其在实际开发中的作用与实现意义。Windows操作系统的核心设计之一是其事件驱动的消息机制,这一机制是Win32编程中最关键的部分之一。

weixin_30021053的博客 547

c++气泡框提示_Material Design 设计语言(三)提示

提示(Tips)MD在组件中,提到了三种提示控件,分别是:Snackbar、Banner、Dialog。此前的 Toast 已被 Snackbar 取代找不到踪影,还问了下安卓的开发小哥哥,说MD更支持用Snackbar(就像是 Toast 的升级版)。根本原因是:Snackbar 是 Android自5.0系统推出质感设计后官方推荐的控件,在交互友好性方面比 Toast 要好,例如...

weixin_39716800的博客 544

VC++ MFC不规则窗体实战:打造气泡效果

在现代软件开发中,Microsoft Foundation Classes (MFC) 是一个历史悠久但仍然十分强大的C++类库,它为Windows应用程序的快速开发提供了一套封装好的工具和控件。MFC封装了Win32 API,极大地方便了开发者通过面向对象的方式来创建Windows应用程序。本章将为你揭开MFC的神秘面纱,带你了解其基本组成和架构,为你后续章节中创建不规则窗体和深入自定义绘制技术打下坚实的基础。在Windows操作系统的图形用户界面中,一个窗口被分为两个主要部分:客户区和非客户区。

weixin_36427956的博客 772

VC++ win32 Application程序实现运行时,右下角任务栏,弹出气泡提示程序已开始运行

优快云论坛帖子链接:http://bbs.youkuaiyun.com/topics/390460054         问题已解决。   参考链接:http://blog.youkuaiyun.com/pgshow/article/details/7526168           我现在写了一个win32 application 的程序,程序运行没有界面。         只有在任务管理器里面可以查看,

forever1dreamsxx--NLP 2344

任务栏实现气泡提示

本案例实现了任务栏的气泡提示,需要的朋友请看

VC c++ vc++ 读写Excel 操作并显示漂亮气泡提示

VC c++ vc++ 读写Excel 操作并显示漂亮气泡提示

使用C++builder的TTrayIcon制作系统托盘动态图标和气泡提示

使用C++builder的TTrayIcon制作系统托盘动态图标和气泡提示

扫地僧的博客 2023

vc编写的气泡弹出提示框

类似于qq提示的气泡弹出框,利用vc++编写,值得借鉴

在VC++6.0中使用气泡提示

  请点击图标下载浏览750) this.width=750" border="0" alt="" />附件  首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换

[Wisdom is Power] 1919

VC++中使用气泡提示

任务栏提示,使用气泡提示。气泡中带图标,可以设置提示时长. 首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容,查看说明

VC++ BalloonTooltip 类似气泡的窗体提示功能

摘要:VC/C++源码,界面编程,气泡提示 VC++ BalloonTooltip源码,实现类似windows气泡的窗体提示功能,蓝色的边框,带小缺口,似乎更人性化一些,可应用到窗体的输入框、下拉列表框等地方,指导用户需要输入的数据类型,虽然是很小的一个功能,但用好了可有效提升软件体验,还是相当值得借鉴的。本源码在VC6.0环境可直接编译生成exe. 运行环境:Windows/Visual C/C++

在VC++6.0与VB中使用气泡提示

首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容: //// Tray notification definitions //// typedef struct _NOTIFYICONDATAA {         DWORD cbSize;         HWND hWnd;         UINT

钟爱技术 1270

《python神经网络编程》程序实现

《python神经网络编程》程序实现 通过对这本书的学习,结合这本书的内容: 完成了以下代码: 其中NN.py实现了一个类,这个类可以完成神经网络的初始化,训练以及输入数据并得出结果。 而run.py则是对神经网络类的使用 NN.py: import numpy import scipy.special #神经网络类的实现 class neuralNetwork: #构造函数初始化类 def __init__(self,inputnodes,hiddennodes,outputnodes

ms8617484的博客 619

在VC++6.0中使用气泡提示(转)

首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容://// Tray notification definitions////typedef struct _NOTIFYICONDATAA {        DWORD cbSize;        HWND hWnd;        UINT uID;        UI

815

inferCNVpy分析流程学习

inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)(

zfyyzhys的博客 1293

Ubuntu22.04安装ROS1

代表使用 2 线程进行编译,可以根据 CPU 适当调整。如果出现小乌龟窗口,说明安装成功 🎉!启动成功,则打开另一个终端,测试。需要解决一些兼容性问题,因为。由于 Ubuntu 22.04。过程,确保成功安装。

asafriend的博客 4642

VC6.0 系统托盘、气泡提示、右键菜单

系统环境:Windows 7 软件环境:vc++6.0 SP6 本次目的:实现系统托盘、气泡提示、右键菜单的效果       系统托盘的效果,大家应该都见过,比如QQ、杀毒软件之类的都会在任务栏驻留图标。 废话少说先上几张图片看看是不是你们要的:    下面就来好好的玩下托盘吧! 1:新建一个对话框程序,这不用教了吧。 2:如果你要做气泡提示的效果的话,

liu18770043443的专栏 2802

深度伪造检测实战:轻量级频域特征 pipeline 部署指南

深度伪造检测(deepfake detection)是多媒体内容安全的核心技术,其本质是通过建模生成式篡改在像素与频域留下的微弱异常痕迹。传统端到端大模型虽在标准数据集上表现优异,却因训练域与真实场景失配、计算开销高、缺乏可解释性而难以落地。本文聚焦于工程可复现的实践路径,提出‘人脸定位→频域伪造特征提取(Xception-FCN + Frequency-Aware Masking)→轻量分类决策’三段式解耦架构,兼顾精度、延迟与可解释性。该方案已在边缘设备(Jetson Orin NX)实现单帧<48ms

weixin_33437929的博客 303

VC++ 添加托盘图标和气泡

添加成员变量   NOTIFYICONDATA m_tnd; 新建图标 BOOL SetupTrayIcon(HWND hwnd) { //ZeroMemory(&m_tnd, sizeof(NOTIFYICONDATA)); m_tnd.cbSize = sizeof( NOTIFYICONDATA ); m_tnd.hWnd

lniwn 1048

85-Halcon-- gen_cam_par_area_scan_division 函数功能(生成面阵相机镜头参数)

Halcon的gen_cam_par_area_scan_division算子用于生成面阵相机的镜头参数,支持除法畸变模型。该算子输出包含9个参数的元组,包括焦距(Focus)、畸变系数(Kappa)、像素尺寸(Sx,Sy)、主点坐标(Cx,Cy)和图像尺寸。文中详细解析了各参数含义、数学原理(包括畸变矫正公式和坐标转换),并提供了三个工业应用案例:高精度芯片尺寸测量、机器人焊接引导和大视野汽车表面检测。最后给出了完整的相机标定流程,涵盖参数生成、畸变校正和标定配置步骤,适用于工业视觉系统的精确标定需求。

weixin_45590420的博客 914

Vc++2008托盘气泡程序

新建一个MFC 对话框程序添加成员变量   NOTIFYICONDATA m_tnd; 添加方法代码BOOL SetupTrayIcon(HWND hwnd){    //ZeroMemory(&amp;m_tnd, sizeof(NOTIFYICONDATA));    m_tnd.cbSize              = sizeof( NOTIFYICONDATA );    m_tnd...

weixin_33937499的博客 185

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

VC6.0下实现系统托盘的气泡提示窗口(Use NIIF_INFO)

 VC6.0下实现系统托盘的气泡提示窗口(Use NIIF_INFO)首先需要更新一下VC6.0的SDK(否则会出现编译出错),方法如下: 1.把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容(重要)://////// Tray notification definitions////typedef struct _N

1059

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1205

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC托盘气泡显示不出来

VC 托盘 气泡

sc_valentine21的专栏 1557

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 卡巴6安全防护机制的点滴
下一篇: Adding Icons to the System Tray
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值