没有合适的资源?快使用搜索试试~ 我知道了~
VB托盘程序详解.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 176 浏览量
2022-06-27
12:22:06
上传
评论
收藏 128KB DOC 举报
温馨提示
试读
29页
VB托盘程序详解.doc
资源推荐
资源详情
资源评论
VB 托盘程序详解
作者:佚名 文章来源:不详 点击数: 4 更新时间:2005-10-5
VB 托盘程序详解
很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行
的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比
较完整的托盘程序,我们可以看到怎样用 API 函数 Shell_NotifyIcon 来添加、删除、更改托盘图标;而
且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。
程序(附后)用到了 Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong 等
API 函数,其中 Shell_NotifyIcon 是主要的函数,它用来添加、删除、更改系统托盘区(taskbar status
area)的图标,所以我们先来看看这个函数的声明和参数:
使用 API 函数之前必须先在程序中声明如下:
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal
dwMessage As Long, lpData As NOTIFYICONDATA) As Long
其中各参数的意义如下表:
参数: 意义
dwMessage 为消息设置值,它可以是以下的几个常数值:0、1、2
NIM_ADD = 0 加入图标到系统状态栏中
NIM_MODIFY = 1修改系统状态栏中的图标
NIM_DELETE = 2删除系统状态栏中的图标
LpData 用以传入 NOTIFYICONDATA 数据结构变量,其结构如下所示:
Type NOTIFYICONDATA
cbSize As Long 需填入 NOTIFYICONDATA 数据结构的长度
HWnd As Long 设置成窗口的句柄
Uid As Long 为图标所设置的 ID 值
UFlags As Long 设置 uCallbackMessage,hIcon,szTip 是否有效
UCallbackMessage As Long 消息编号
HIcon As Long 显示在状态栏上的图标
SzTip As String * 64 提示信息
End Type
返回值 Long,非零表示成功,零表示失败
在使用这个 API 函数之前我们应该先定义结构类型 NOTIFYICONDATA:
Public Type 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
然后定义一个 NOTIFYICONDATA 的变量 TheData 来记录设置托盘图标的数据
Private TheData As NOTIFYICONDATA
这时我们就可以使用这个函数来设置系统托盘图标了,具体方法如下:
1、添加图标
With TheData
.Uid = 0
.HWnd = frm.HWnd 注释:frm.HWnd 是程序主窗体的句柄
.cbSize = Len(TheData)
.HIcon = frm.Icon.Handle 注释:frm.Icon.Handle 指向主窗体的图标
.UFlags = NIF_ICON
.UCallbackMessage = TRAY_CALLBACK
注释:作用是允许返回消息,在下一节中会有详细解释。
.UFlags = .UFlags Or NIF_MESSAGE
.cbSize = Len(TheData)
End With
Shell_NotifyIcon NIM_ADD, TheData
注释:根据前面定义 NIM_ADD,设置为“添加模式”,然后添加
2、删去图标
With TheData
.UFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
注释:根据前面定义 NIM_DELETE,设置为“删除模式”
3、更改图标
With TheData
.HIcon = pic.Handle
注释:pic 是图片狂 PictureBox,存放图标文件
.UFlags = NIF_ICON
End With
Shell_NotifyIcon NIM_MODIFY, TheData
注释:根据前面定义 NIM_MODIFY,设置为“更改模式”
4、为图标添加浮动提示信息
With TheData
.SzTip = tip & vbNullChar
注释:tip 是字符串 string,存储提示信息
.UFlags = NIF_TIP
注释:指明要对浮动提示进行设置
End With
Shell_NotifyIcon NIM_MODIFY, TheData
注释:根据前面定义 NIM_MODIFY,设置为“修改模式”
通过以上几段代码我们就能根据自己需要添加、删除、更改系统托盘图标,并能添加系统图标上的
浮动提示信息。但这时的托盘图标是孤立的,我们并不能利用它来控制应用程序的行为,怎么办呢?别
急,请往下看……
如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹
出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如
果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述
的功能都要依赖于 WINDOWS 操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按
下述文字来理解它。
把 WINDOWS 操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官
(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗
体等等统称为窗口)在运行时都会被分配一个窗口过程 WINDOWPROC,由这个窗口过程来接收和处理
操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,它会自
动的响应并处理一些 WINDOWS 消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停
一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助 API 函
数的威力了,怎么用?我们还是先看看这些 API 函数的定义和参数吧。
程序中用到了 SendMessage、CallWindowProc、SetWindowLong 等 API 函数,其中
SendMessage 函数的作用是将一条消息发给某个窗口;CallWindowProc 函数用来发送消息到一个窗
口过程;而使用 SetWindowLong 函数来为窗口结构中为指定的窗口设置属性。使用 API 函数之前必须
先在程序中声明如下:
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal
lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long,
ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As
Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
其中各参数的意义如下表:
CallWindowProc 函数
参数 意义
lpPrevWndFuncLong,原来的窗口过程地址
剩余28页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3698
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 第一章+数学基础.pdf
- 安卓与STM32硬件开发项目,实现安卓端控制家庭灯,窗帘,门.zip
- java-leetcode题解之第972题最接近原点的K个点.zip
- java-leetcode题解之第347题前K个高频元素.zip
- java-leetcode题解之第215题数组中的第K个最大元素.zip
- java-leetcode题解之第641题设计循环双端队列.zip
- java-leetcode题解之第1284题转化为全零矩阵的最少反转次数.zip
- java-leetcode题解之第1311获取已观看视频.zip
- java-leetcode题解之第621题任务调度器.zip
- java-leetcode题解之第622题设计循环队列.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功