用VB实现托盘动画图标

发表于:2007-06-17来源:作者:点击数: 标签:
用 VB 实现托盘动画图标 现在, 程序员 把自己 开发 的程序的静态图标放入托盘已不是难事,使用Visual C++、Visual Basic、Delphi等编程语言,借助于 Windows API函数(Shell_NotifyIcon)可以很容易地实现对托盘图标的操作。 那么,如何在托盘中实现动态图

   
  用VB实现托盘动画图标

  现在,程序员把自己开发的程序的静态图标放入托盘已不是难事,使用Visual C++、Visual Basic、Delphi等编程语言,借助于Windows API函数(Shell_NotifyIcon)可以很容易地实现对托盘图标的操作。

那么,如何在托盘中实现动态图标呢?本文将通过一个在托盘中交替显示笑脸/哭脸的实例来介绍用VB实现托盘中动画图标的方法和步骤。

  1.可视部分设计

  新建一个标准EXE项目,在窗体中设置如下控件:

  ⑴一个计时器(命名为timer1),其属性Enabled=False、Interval=100;

  ⑵一个弹出选单(命名为mMyPopMenu),设计时清除其“可视”检查框(右单击托盘动画图标时弹出);

  ⑶若干图画框(本例为2个),这些图画框名称相同(例如picture1),其Index属性值依次为0、1、2、...,Visible属性值均为False,Picture属性设置为循环显示的图标文件,如图1所示;

  图1

  ⑷其它控件,根据程序实际功能需要设置。

  2.编写程序代码

  ⑴在窗体的声明部分给出如下声明:

  Private Type NOTIFYICONDATA

  cbSize As Long

  注释:指定NOTIFYICONDATA结构长度

  hWnd As Long 注释:指定接收回调消息的窗体或控件的句柄

  uId As Long

  注释:指定放入托盘中的图标的ID标识

  uFlags As Long

  注释:指定要绘制的图标的属性

  ucallbackMessage As Long

  注释:指定一条自定义的回调消息

  hIcon As Long

  注释:指定要显示于托盘中的图标的句柄

  szTip As String * 64

  注释:指定图标的提示信息

  End Type

  Private Const NIF_ICON = &&H2

  Private Const NIF_MESSAGE = &&H1

  Private Const NIF_TIP = &&H4

  Private Const NIM_ADD = &&H0

  Private Const NIM_DELETE = &&H2

  Private Const NIM_MODIFY = &&H1

  Private Const WM_MOUSEMOVE = &&H200

  Private Declare Function Shell_NotifyIcon Lib "shell32" _

   Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, _

   pnid As NOTIFYICONDATA) As Boolean

  Dim tb As NOTIFYICONDATA

  ⑵窗体加载时把图标放入托盘:

  Private Sub Form_Load()

    mMyPopMenu.Visible = False

    注释:使弹出选单隐藏

    mHide.Enabled = False

  With tb

  .cbSize = Len(tb)

  .hWnd = Picture1(0).hWnd

  .uId = 1&&

  .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE

  .ucallbackMessage = WM_MOUSEMOVE

     .hIcon = Picture1(0).Picture

     .szTip = "托盘动画图标演示" && Chr$(0)

    End With

    Shell_NotifyIcon NIM_ADD, tb

    Timer1.Enabled = True

    Me.Hide

    App.TaskVisible = False

  End Sub

  ⑶计时器每触发一次就修改一下托盘中的图标:

  Private Sub timer1_Timer()

    Static i As Integer

    i =(i+1) Mod 2 注释:2 为图画框的个数

    With tb

     .cbSize = Len(tb)

     .hWnd = Picture1(0).hWnd

     .uId = 1&&

     .uFlags = NIF_ICON

     .hIcon = Picture1(i).Picture

    End With

    Shell_NotifyIcon NIM_MODIFY, tb

    Timer1.Enabled = True

  End Sub

  ⑷响应托盘中图标的鼠标事件:

  Private Sub picture1_MouseMove(Index As Integer, _

   Button As Integer, Shift As Integer, _

   X As Single, Y As Single)

    If X = &&H1E3C Then

      Me.PopupMenu mMyPopMenu

    End If

  End Sub

  ⑸窗体卸载时删除托盘中的图标:

  Private Sub Form_Unload(Cancel As Integer)

    Timer1.Enabled = False

    With tb

     .cbSize = Len(tb)

     .hWnd = Picture1(0).hWnd

     .uId = 1&&

    End With

    Shell_NotifyIcon NIM_DELETE, tb

  End Sub

  ⑹对弹出选单Click事件的响应代码:

  根据选单的具体功能而定。

  本程序在VB5下编译,Win98下运行通过。

原文转自:http://www.ltesting.net