将VB应用程序缩成系统托盘图标二法

第一种方法:

VB光盘的toolsunsupportsystray目录下有一个例子,将此目录复制到硬盘,编译生成一个OCX控件,在自己的程序中使用此控件,可以实现将程序图标放于右下角系统图标区,这方法比调用API要简单得多

第二种方法:

梁洁仪

—- 在很多应用程序中,其操作窗口缩小后将变成一图标放置在系统状态栏中。

—- 为什么有的程序可以缩小成图标呢?

—- 对于Windows来说,这些图标并非窗口或程序,它们只是图标,能作出这样的功能,关键在于调用了Windows的API函数Shell_NotifyIcon,在Visual Basic开发环境中,通过其所附带的API浏览器,我们可查找出 Shell_NotifyIcon的声明格式如下:

—- Declare Function Shell_NotifyIcon Lib “shell32VBdll” Alias “Shell_NotifyIconA” (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

—- 现把本函数声明中的参数分别说明如下:

—- 参数dwMessage为消息设置值,它可以是以下的几个常数值:0、1、2。在程序中为了使用更方便,我们把它们定义为三个常量:NIM_ADD、NIM_MODIFY及NIM_DELETE,本示例中的常量及 Shell_NotifyIcon调用都可以在窗口新建的模块中声明它:

Public Const NIM_ADD = 0 //加入图标到系统状态栏中

Public Const NIM_MODIFY = 1 //修改系统状态栏中的图标

Public Const NIM_DELETE = 2 // 删除系统状态栏中的图标

—- 这三个常量的应用将中下文中具体介绍。

—- 参数LpData 用以传入 NOTIFYICONDATA数据结构变量,我们也需要在”模块”中定义其结构如下:

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

—- 在本数据结构定义中,各变量都有其实用意义:

cbSize:需填入NOTIFYICONDATA数据结构的长度。

HWnd:设置成窗口的句柄。

Uid:为图标所设置的ID值。

UFlags:用来设置以下三个参数uCallbackMessage、

hIcon、 szTip是否有效。

UCallbackMessage:消息编号。

HIcon:显示在状态栏上的图标。

SzTip:提示信息。

—- 其中参数uCallbackMessage、hIcon、szTip也应在模块中声明为以下的常量:

Public Const NIF_MESSAGE = 1

Public Const NIF_ICON = 2

Public Const NIF_TIP = 4

—- 了解了上述各参数所代表的意义,就可以直接编写代码了。应用本函数所建立的窗体示例(略)。

—- 为了进一步让大家了解本函数的使用,下面将将详细介绍上例所需编写的代码。

—- 1、加入图标按钮。代码如下:

Dim nid As NOTIFYICONDATA

nidVBcbSize = Len(nid)

// 取数据结构的长度设置给cbSize

nidVBhWnd = MeVBhWnd //设置窗体的句柄

nidVBuID = 9999 // 图标的ID值,可自定义

nidVBuFlags = NIF_ICON //表示设置图标

nidVBhIcon = MeVBIcon

// 把图标设置成当前窗体的图标,也可以指定为某一图标文件

Shell_NotifyIcon NIM_ADD, nid //加入图标

—- 2、删除图标按钮。这里要注意的是,当我们把图标加入到状态栏后,一定要把hWnd及uID的值记下来,不然将无法正确删除此图标,本按钮的Click事件代码如下:

Dim nid As NOTIFYICONDATA

nidVBcbSize = Len(nid)

nidVBhWnd = MeVBhWnd // 记下句柄

nidVBuID = 9999 //ID值

Shell_NotifyIcon NIM_DELETE, nid

// 调用Shell_NotifyIcon函数删除它

—- 3、改变图标按钮。同样的道理,在窗体运行过程中,如果要更新图标,可以用以下的Click事件代码来完成:

Dim nid As NOTIFYICONDATA

nidVBcbSize = Len(nid)

nidVBhWnd = MeVBhWnd

nidVBuID = 9999

nidVBuFlags = NIF_ICON

nidVBhIcon = Image1VBPicture

// 用窗体中的Image控件中之图片来代替

Shell_NotifyIcon NIM_MODIFY, nid //修改它

—- 4、设置信息提示按钮。提示信息就是当我们将鼠标移到本图标上时,这些图标会显示出来的信息,下面的Click事件代码可以作到:

Dim nid As NOTIFYICONDATA

nidVBcbSize = Len(nid)

nidVBhWnd = MeVBhWnd

nidVBuID = 9999

nidVBuFlags = NIF_ICON + NIF_TIP

nidVBszTip = ” 这是试验图标” + Chr(0)

Shell_NotifyIcon NIM_MODIFY, nid

—- 当然,在把本窗口缩小成图标的同时,也别忘了将窗口隐藏,代码是:MeVBhide。这样窗口就不会在任务栏中出现了。

—- 利用Win 32 API函数,我们可以完成很多VB本身不具备的功能,只要灵活运用,必能为VB应用程序增色不少。

link

评论

Popular Posts

《活法》作者:[日]稻盛和夫 pdf下载

浩方对战平台优化版 V2.05 部分去除浩方广告和弹出窗口

麦当劳免费Wifi帐号密码及连接设置

Microsoft 365安装包下载(Office桌面应用)

中兴ZTE H618B 路由器固件刷机备忘

Debian 12上使用Nginx代理TCP流量,并配置IPv6白名单访问控制

解决word和excel运行时错误:91未设置对象变量或with block变量

MD大战略2 德国闪击战 中文汉化版

日本人真实的生活水平,警醒所有的中国人(转帖)