用过QQ的都知道,当我们有新的信息时,在屏幕的右下角都会有一个小图标闪烁来告诉你有新的信息来哦,现在看看用VB怎么来达到这个效果吧。
建立一个托盘我们要用到Windwos API—Shell_NotifyIcon(具体用法点击这里),现在我们看看如何用这个API来达到我们要的效果吧(点击这里下载源程序)。
制作界面:
在Form上放两个图片框、一个按钮、一个计时器。他们的属性如下:
|
组件名
|
属性
|
| Form |
|
| Picture1、Picture2 |
- AutoSize:True
- VIsible:False
|
| Timer1 |
- Enabled:False
- Interval:500(图标的闪烁时间间隔,可自己改为自己所要值)
|
| Command1 |
|
用Pictrue1、Pictrue2的Pictrue为两个图片框加入你要用来变化的两张图片(本例用的是在Form_Load中载入)。
在窗体模块中声明API、一些常量和一个记录型变量:
Option Explicit
Private Type NOTIFYICONDATA
cbSize As Long ' NOTIFYICONDATA类型的大小
hWnd As Long ' 应用程序窗体的名柄
uId As Long ' 应用程序图标资源的ID号
uFlags As Long ' 使那些参数有效它是以下枚举类型中的'NIF_MESSAGE、NIF_ICON、NIF_TIP三组的组合
ucallbackMessage As Long ' 鼠标移动时把此消息发给该图标的窗体
hIcon As Long '托盘用到的图标
szTip As String * 64 ' 当鼠标在图标上时显示的文本
End Type
Const NIM_ADD = &H0 '加入托盘
Const NIM_MODIFY = &H1 '修改托盘(本例中重点用)
Const NIM_DELETE = &H2 '删除托盘
Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4
Const WM_MOUSEMOVE = &H200
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long
Dim t As NOTIFYICONDATA
在Form的Load事件中加入如下代码:
'载入图片
Picture1.Picture = LoadPicture(App.Path & "\1.ico")
Picture2.Picture = LoadPicture(App.Path & "\2.ico")
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.hIcon = Picture1.Picture '托盘的图标
t.szTip = "QQ闪烁效果" & Chr(0) '鼠标放在托盘上时的文本
Shell_NotifyIcon NIM_ADD, t '显示托盘图标
在Command1的Click事件中加入如下代码:
Static b1 As Boolean '定义一个布尔型变量用于开关作用
b1 = Not b1
Timer1.Enabled = b1 '用Timer1来控制图标的闪烁
If Not b1 Then
Command1.Caption = "开始"
Else
Command1.Caption = "停止"
End If
为Timer1的Timer的事件加入如下代码:
Static b2 As Boolean ' 定义一个布尔型变量用于开关作用,当为True时托盘图标为Picture2图片,为False时为Picture1的图片
b2 = Not b2
If b2 Then
t.hIcon = Picture2.Picture '托盘图标为Picture2的图片
Else
t.hIcon = Picture1.Picture '托盘图标为Picture1的图片
End If
Shell_NotifyIcon NIM_MODIFY, t '修改托盘图标
退出程序时要删除托盘,所以在Form_Unload中加入如下代码:
Shell_NotifyIcon NIM_DELETE, t '删除托盘
好了,一个QQ图标的闪烁效果就做好了,自己去试试吧,为自己的程序添色增彩。 |