VC托盘气泡做法
来源:互联网 发布:简历熟悉办公软件 编辑:程序博客网 时间:2024/06/12 01:27
使用VC和VB对系统托盘编程的方法
Windows下许多程序都在系统托盘——屏幕右下角(Windows时间、输入法显示位置)显示程序图标,比如金山词霸、PC-cillin、SQL Server等,如何进行少量编程实现这一功能?WinApi提供了一个函数,帮助实现系统托盘图标的显示、删除、闪动等。在此,作者根据自己的实际经验提供在Visual Basic和Visual C++下的编程方法。
一、 WinApi的Shell_NotifyIcon函数介绍
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid);
参数说明:
DWORD dwMessage 有三个选择:
0——NIM_ADD 在系统托盘加上图标
1——NIM_DELETE 删除系统托盘上的图标
2——NIM_MODIFY 更换系统托盘上的图标
pnid是PNOTIFYICONDATA数据类型,包括
PNOTIFYICONDATA数据结构如下:
typedef struct _NOTIFYICONDATA {
DWORD cbSize; //本数据结构的字节数
HWND hWnd; //图标所属的Windows程序窗口句柄
UINT uID;
UINT uFlags; //让图标变量NIF_ICON 、鼠标移动到图标处的事件变量 NIF_TIP、信息变量NIF_MESSAGE有效
UINT uCallbackMessage; //在图标位置的发生鼠标事件时向程序发送的消息
HICON hIcon; //图标指针
char szTip[64]; //当鼠标移动到图标位置时,自动显示的文字
//这就是你所说的气泡
} NOTIFYICONDATA, *PNOTIFYICONDATA;
二、在Visual Basic下的使用方法
1、 声明
Option Explicit
Private Type NOTIFYICONDATA ' 定义NOTIFYICONDATA数据类型
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
' 定义对图标操作的常量
Private Const NIM_ADD = &H0 ' 增加图标
Private Const NIM_MODIFY = &H1 ' 改变图标
Private Const NIM_DELETE = &H2 ' 删除图标
' 以下定义鼠标事件常量
Private Const WM_MOUSEMOVE = &H200 ' 鼠标移动常量
Private Const WM_LBUTTONDBLCLK = &H203 ' 双击左鼠标按钮
Private Const WM_LBUTTONDOWN = &H201 ' 左鼠标按钮按下
Private Const WM_LBUTTONUP = &H202 ' 松开左鼠标按钮
Private Const WM_RBUTTONDBLCLK = &H206 ' 双击右鼠标按钮
Private Const WM_RBUTTONDOWN = &H204 ' 右鼠标按钮按下
Private Const WM_RBUTTONUP = &H205 ' 松开右鼠标按钮
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
' WinApi函数Shell_NotifyIcon声明
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
' 定义NOTIFYICONDATA类型变量
Dim t As NOTIFYICONDATA
2、 方法
' 当程序运行时对变量t的赋值
Private Sub Form_Load()
t.cbSize = Len(t)
t.hwnd = Form1.hwnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
't.ucallbackMessage = WM_LBUTTONUP
t.hIcon = Form1.Icon
t.szTip = "这是我的系统托盘程序"
End Sub
' 鼠标对图标操作事件的处理——体现在鼠标移动事件上
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim msg As Long
Dim sFilter As String
msg = x / Screen.TwipsPerPixelX '鼠标按下时的按钮信息
Select Case msg
Case WM_LBUTTONDOWN ' 左鼠标按下事件
Me.Show ' 单击图标时显示程序窗口
Case WM_LBUTTONUP ' 左鼠标松开事件
Case WM_LBUTTONDBLCLK ' 左鼠标双击事件
Case WM_RBUTTONDOWN ' 右鼠标按下事件
Me.PopupMenu system ' 右鼠标按下时弹出菜单system是自定义的菜单
Case WM_RBUTTONUP ' 右鼠标松开事件
Case WM_RBUTTONDBLCLK ' 右鼠标双击事件
End Select
End Sub
3、 改变图标
Shell_NotifyIcon NIM_DELETE, t
If t.hIcon = Form2.Icon Then t.hIcon = Form1.Icon Else t.hIcon = Form2.Icon
Shell_NotifyIcon NIM_ADD, t
三、 在Visual C++下的使用方法
在Visual C++下实现时可以不用声明,直接使用函数
在窗口显示事件时赋值变量,并显示系统托盘图标
void ::OnShowWindow(BOOL bShow, UINT nStatus)
{
::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
if(nStatus){
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd =m_hWnd;
tnid.uID = 1;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
//tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = m_hIcon;
strcpy(tnid.szTip, "这是我的第一个系统托盘程序!/0");
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (m_hIcon)
DestroyIcon(m_hIcon);
}
}
其他操作类似Visual Basic下的使用方法。
Windows下许多程序都在系统托盘——屏幕右下角(Windows时间、输入法显示位置)显示程序图标,比如金山词霸、PC-cillin、SQL Server等,如何进行少量编程实现这一功能?WinApi提供了一个函数,帮助实现系统托盘图标的显示、删除、闪动等。在此,作者根据自己的实际经验提供在Visual Basic和Visual C++下的编程方法。
一、 WinApi的Shell_NotifyIcon函数介绍
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid);
参数说明:
DWORD dwMessage 有三个选择:
0——NIM_ADD 在系统托盘加上图标
1——NIM_DELETE 删除系统托盘上的图标
2——NIM_MODIFY 更换系统托盘上的图标
pnid是PNOTIFYICONDATA数据类型,包括
PNOTIFYICONDATA数据结构如下:
typedef struct _NOTIFYICONDATA {
DWORD cbSize; //本数据结构的字节数
HWND hWnd; //图标所属的Windows程序窗口句柄
UINT uID;
UINT uFlags; //让图标变量NIF_ICON 、鼠标移动到图标处的事件变量 NIF_TIP、信息变量NIF_MESSAGE有效
UINT uCallbackMessage; //在图标位置的发生鼠标事件时向程序发送的消息
HICON hIcon; //图标指针
char szTip[64]; //当鼠标移动到图标位置时,自动显示的文字
//这就是你所说的气泡
} NOTIFYICONDATA, *PNOTIFYICONDATA;
二、在Visual Basic下的使用方法
1、 声明
Option Explicit
Private Type NOTIFYICONDATA ' 定义NOTIFYICONDATA数据类型
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
' 定义对图标操作的常量
Private Const NIM_ADD = &H0 ' 增加图标
Private Const NIM_MODIFY = &H1 ' 改变图标
Private Const NIM_DELETE = &H2 ' 删除图标
' 以下定义鼠标事件常量
Private Const WM_MOUSEMOVE = &H200 ' 鼠标移动常量
Private Const WM_LBUTTONDBLCLK = &H203 ' 双击左鼠标按钮
Private Const WM_LBUTTONDOWN = &H201 ' 左鼠标按钮按下
Private Const WM_LBUTTONUP = &H202 ' 松开左鼠标按钮
Private Const WM_RBUTTONDBLCLK = &H206 ' 双击右鼠标按钮
Private Const WM_RBUTTONDOWN = &H204 ' 右鼠标按钮按下
Private Const WM_RBUTTONUP = &H205 ' 松开右鼠标按钮
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
' WinApi函数Shell_NotifyIcon声明
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
' 定义NOTIFYICONDATA类型变量
Dim t As NOTIFYICONDATA
2、 方法
' 当程序运行时对变量t的赋值
Private Sub Form_Load()
t.cbSize = Len(t)
t.hwnd = Form1.hwnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
't.ucallbackMessage = WM_LBUTTONUP
t.hIcon = Form1.Icon
t.szTip = "这是我的系统托盘程序"
End Sub
' 鼠标对图标操作事件的处理——体现在鼠标移动事件上
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim msg As Long
Dim sFilter As String
msg = x / Screen.TwipsPerPixelX '鼠标按下时的按钮信息
Select Case msg
Case WM_LBUTTONDOWN ' 左鼠标按下事件
Me.Show ' 单击图标时显示程序窗口
Case WM_LBUTTONUP ' 左鼠标松开事件
Case WM_LBUTTONDBLCLK ' 左鼠标双击事件
Case WM_RBUTTONDOWN ' 右鼠标按下事件
Me.PopupMenu system ' 右鼠标按下时弹出菜单system是自定义的菜单
Case WM_RBUTTONUP ' 右鼠标松开事件
Case WM_RBUTTONDBLCLK ' 右鼠标双击事件
End Select
End Sub
3、 改变图标
Shell_NotifyIcon NIM_DELETE, t
If t.hIcon = Form2.Icon Then t.hIcon = Form1.Icon Else t.hIcon = Form2.Icon
Shell_NotifyIcon NIM_ADD, t
三、 在Visual C++下的使用方法
在Visual C++下实现时可以不用声明,直接使用函数
在窗口显示事件时赋值变量,并显示系统托盘图标
void ::OnShowWindow(BOOL bShow, UINT nStatus)
{
::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
if(nStatus){
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd =m_hWnd;
tnid.uID = 1;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
//tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = m_hIcon;
strcpy(tnid.szTip, "这是我的第一个系统托盘程序!/0");
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (m_hIcon)
DestroyIcon(m_hIcon);
}
}
其他操作类似Visual Basic下的使用方法。
- VC托盘气泡做法
- VC实现托盘气泡提示
- VC实现托盘气泡提示
- VC程序托盘显示和气泡显示
- VC托盘气泡显示不出来
- VC++ 添加托盘图标和气泡
- mfc 托盘弹出气泡
- MFC托盘气泡
- 托盘气泡提示
- 托盘弹出气泡提示
- VC 气泡
- Python桌面托盘气泡提示
- vc 托盘
- 聊天气泡的简单做法
- Java 实现气泡窗口,不局限于托盘气泡
- shellnotifyicon,托盘图标气泡提示问题
- 最小化到托盘(气泡提示 C#源码)
- 关于托盘弹出气泡的方法
- 提高网页打开速度的一些小技巧
- 宣泄
- 保险名词解析
- WAR3 天地劫技能节选002
- (转载)C语言陷阱和缺陷
- VC托盘气泡做法
- WAR3 天地劫技能节选003
- WAR3 天地劫技能代码节选004
- WAR3 澄海 恶魔气息 技能分析
- 七个受用一生的心理寓言
- 关于系统托盘的几个好的链接
- linux shell
- 用一辈子去领悟的生活经典
- 粗糙集理论介绍