⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 60.txt

📁 介绍VB里的各种控件的使用方法,窗口控制,图像编程以及OCX等内容,还提供了一个API集供参考.
💻 TXT
字号:
用VB实现托盘动画图标
(作者:车光宏 2000年10月18日 09:55)

  现在,程序员把自己开发的程序的静态图标放入托盘已不是难事,使用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下运行通过。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -