很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运 行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能 比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而 且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。 根据给定的信息,本文将详细解释“VB托盘程序”的设计与实现,包括如何使用API函数`Shell_NotifyIcon`创建、更新以及移除托盘图标,并探讨如何为托盘图标添加右键菜单和提示信息。 ### VB托盘程序详解 在Windows操作系统中,系统托盘(System Tray)位于任务栏的右下角,通常用于显示运行中的后台应用程序的图标。这些图标不仅作为一个视觉提示,表明某个程序正在运行,还可以通过它们提供的上下文菜单来控制程序的行为。例如,用户可以利用托盘图标关闭程序、最小化窗口或者进行其他操作。 #### 一、创建托盘图标 要创建一个托盘图标,我们需要调用Windows API函数`Shell_NotifyIcon`。此函数允许开发者向系统托盘添加、更新或删除图标。 1. **定义结构体**:需要定义一个`NOTIFYICONDATA`结构体,用于存储有关图标的详细信息。 ```vb Private Type NOTIFYICONDATA cbSize As Integer hWnd As Long uID As Integer uFlags As Integer uCallbackMessage As Integer hIcon As Long szTip As String * 64 dwState As Long dwStateMask As Long szInfo As String * 256 uVersion As Integer szInfoTitle As String * 64 dwInfoFlags As Long guidItem As Guid End Type ``` 2. **初始化结构体**:在调用`Shell_NotifyIcon`之前,必须初始化`NOTIFYICONDATA`结构体。 ```vb Dim nid As NOTIFYICONDATA nid.cbSize = Len(nid) nid.hWnd = Me.hWnd nid.uID = 1 nid.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP nid.uCallbackMessage = WM_TRAYICON nid.hIcon = LoadIcon(0, MAKEINTRESOURCE(IDI_APP)) nid.szTip = "My Application" ``` 3. **添加托盘图标**:通过设置`uFlags`字段的不同组合,可以指定想要执行的操作(添加、修改或删除图标)。为了添加一个新的托盘图标,可以使用以下代码: ```vb Shell_NotifyIcon NIM_ADD, nid ``` 4. **更新托盘图标**:如果需要更新托盘图标的图标、提示信息等,可以使用`NIM_MODIFY`标志: ```vb nid.uFlags = NIF_ICON Or NIF_TIP nid.hIcon = LoadIcon(0, MAKEINTRESOURCE(IDI_NEWICON)) nid.szTip = "Updated Application" Shell_NotifyIcon NIM_MODIFY, nid ``` 5. **删除托盘图标**:当不再需要托盘图标时,可以使用`NIM_DELETE`标志删除它: ```vb nid.uFlags = NIF_ICON Or NIF_TIP Shell_NotifyIcon NIM_DELETE, nid ``` #### 二、添加右键菜单 除了基本的图标显示外,托盘图标还可以包含一个右键菜单,允许用户执行更多的操作。 1. **定义菜单项**:使用`PopupMenu`控件创建一个简单的右键菜单。 ```vb Dim mnuTray As New PopupMenu mnuTray.MenuItems.Add "Show", 1 mnuTray.MenuItems.Add "Exit", 2 ``` 2. **处理菜单事件**:为菜单项添加事件处理程序,以便响应用户的点击行为。 ```vb Private Sub mnuTray_PopupMenu_Click(Index As Integer) Select Case Index Case 1 ' Show ShowWindow Me.hWnd, SW_SHOW SetForegroundWindow Me.hWnd Case 2 ' Exit Unload Me End Select End Sub ``` 3. **显示菜单**:当用户单击托盘图标时,可以通过发送消息`WM_RBUTTONDOWN`来触发显示菜单的功能。 ```vb Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long PostMessage Me.hWnd, WM_RBUTTONDOWN, 0, 0 ``` #### 三、添加浮动提示 浮动提示是一种简短的文字信息,用于在鼠标悬停于托盘图标上时显示。 1. **设置提示信息**:在初始化`NOTIFYICONDATA`结构体时,设置`szTip`字段为所需的提示文本。 ```vb nid.szTip = "My Application" ``` 通过以上步骤,您可以构建一个功能齐全的VB托盘程序。需要注意的是,由于示例代码中存在大量注释和未完成的部分,实际应用时还需结合完整代码进行调整和完善。此外,为了确保代码的兼容性和稳定性,建议参考最新的文档和示例。
很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。
为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:
'====================================================================================================
'====================================================================================================
'---------------------------------------------
' 使用系统托盘程序演示
'程序说明:
' 这是一个比较完整的使用系统托盘的程序实例,包括
'了:添加托盘图标,删除托盘图标,动态改变托盘图标,
'为托盘图标添加浮动提示信息,实现托盘图标的鼠标右键
'菜单等内容。
'-------名称-------------------作用------------
' Form1 主窗体
' mnuFile,mnuFileExit 文件菜单,菜单项
' mnuTray,mnuTrayClose... 托盘区右键菜单,菜单项
'---------------------------------------------
Option Explicit
'LastState变量的作用是标示主窗体原有状态
Public LastState As Integer
'【VB声明】
' Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'【说明】
' 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,
' SendMessageByString是该函数的“类型安全”声明形式
'【返回值】
'【参数表】
' hwnd ----------- Long,要接收消息的那个窗口的句柄
' wMsg ----------- Long,消息的标识符
' wParam --------- Long,具体取决于消息
' lParam --------- Any,具体取决于消息
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'表示发送的是系统命令
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF010&
Private Const SC_RESTORE = &HF120&
Private Const SC_SIZE = &HF000&
'当主窗体加载时
Private Sub Form_Load()
'窗体的WindowState属性,返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态
'vbNormal 0 (缺省值)正常 。
'VbMinimized 1 最小化(最小化为一个图标)
'VbMaximized 2 最大化(扩大到最大尺寸)
If WindowState = vbMinimized Then
LastState = vbNormal
Else
LastState = WindowState
End If
剩余16页未读,继续阅读
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- shopex升级补丁只针对 485.78660版本升级至485.80603版本 其它版本的请勿使用!
- 基于Django和HTML的新疆地区水稻产量影响因素可视化分析系统(含数据集)
- windows conan2应用构建模板
- 3_base.apk.1
- 基于STM32F103C8T6的4g模块(air724ug)
- 基于Java技术的ASC学业支持中心并行项目开发设计源码
- 基于Java和微信支付的wxmall开源卖票商城设计源码
- 基于Java和前端技术的东软环保公众监督系统设计源码
- 基于Python、HTML、CSS的crawlerdemo软件工程实训爬虫设计源码
- 基于多智能体深度强化学习的边缘协同任务卸载方法设计源码