VB实现托盘功能

参考资料

'-----------------------模块中--------------------------
'在系统托盘显示图标的模块
Option Explicit

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Public nfIconData As NOTIFYICONDATA
Public Const MAX_TOOLTIP As Integer = 64    '提示字符串中预显示的个数
Public Const NIF_ICON = &H2                 '预添加的图标
Public Const NIF_MESSAGE = &H1              '事件消息,比如鼠标抬起或按下
Public Const NIF_TIP = &H4                  '预显示的文字
Public Const NIM_ADD = &H0                  '添加托盘图标
Public Const NIM_DELETE = &H2               '删除托盘图标
Public Const WM_MOUSEMOVE = &H200           '鼠标移动
Public Const WM_LBUTTONDOWN = &H201         '按下右键
Public Const WM_LBUTTONUP = &H202           '左键抬起
Public Const WM_LBUTTONDBLCLK = &H203       '左键双击
Public Const WM_RBUTTONDOWN = &H204         '按下右键
Public Const WM_RBUTTONUP = &H205           '右键抬起
Public Const WM_RBUTTONDBLCLK = &H206       '右键双击
Public Const SW_RESTORE = 9                 '状态恢复
Public Const SW_HIDE = 0                    '状态隐藏

Public Type NOTIFYICONDATA
    cbSize As Long
    hwnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * MAX_TOOLTIP
End Type
 '-----------------------Form中--------------------------
Function WindowStyle()
    '以下把程序放入System Tray====================================System Tray Begin
    With nfIconData
        .hwnd = Me.hwnd
        .uID = Me.Icon
        .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Me.Icon.Handle
        '定义鼠标移动到托盘上时显示的Tip
        .szTip = "已最小化到托盘" & vbNullChar
        .cbSize = Len(nfIconData)
    End With
    
    Call Shell_NotifyIcon(NIM_ADD, nfIconData)
    '=============================================================System Tray End
    Me.Hide
End Function

Private Sub Form_Resize()
    WindowTop = Me.Top
    WindowLeft = Me.Left
    
    If Me.WindowState = 1 Then
        WindowStyle
    End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)

    Dim lMsg As Single
    lMsg = x / Screen.TwipsPerPixelX
    Select Case lMsg
    Case WM_LBUTTONDBLCLK '双击左键显示窗体,要改成其他的看模块里的定义
    ShowWindow Me.hwnd, SW_RESTORE
    Me.Top = WindowTop
    Me.Left = WindowLeft
    'Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
    Me.SetFocus
    Case WM_RBUTTONUP '在托盘图标上点右键显示菜单
    PopupMenu F00 '菜单名称为F00,做菜单时你可以改成别的,这里也得改成相应的
    End Select
End Sub

Private Sub F01_Click() '打开、显示,托盘右键菜单 选项之一
    ShowWindow Me.hwnd, SW_RESTORE
    Me.Top = WindowTop
    Me.Left = WindowLeft
    Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End Sub

Private Sub F02_Click() '退出程序,托盘右键菜单 选项之一
    Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
    End
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    '退出程序时删除托盘图标
    Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End Sub
SysTray控件用法详解 VB SYSTRAY 托盘图标 用VB6自带的systray.ocx控件实现托盘图标程序 : 补充: 然后在自己的VB程序中添加改控件(工程-部件-浏览)。   最好把这个ocx放到C:\WINDOWS\system32。   改控件的属性InTray属性用来设置是否显示在托盘中,True为显示在托盘,False为不显示。TrayIcon属性是在托盘中显示的图标式样。TrayTip属性是鼠标移到改控件上面显示的提示文字。如果要使程序最小化时显示到托盘,如下:   Private Sub Form_Resize()    If Me.WindowState = vbMinimized Then    cSysTray1.InTray = True    Me.Visible = False End If   End Sub   点击托盘图标后让程序显示出来,如下:   Private Sub cSysTray1_MouseDown(Button As Integer, Id As Long)    Me.WindowState = vbNormal    Me.Visible = True    cSysTray1.InTray = False    Me.SetFocus   End Sub '单击关闭不退出程序 Private Sub Form_Unload(Cancel As Integer) 主程序.Hide Cancel = False End Sub '单击关闭不退出程序 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = 1 主程序.Hide End Sub ’tui为窗体菜单-退出选项名称 Private Sub tui_Click()’快捷键设ALT+F1 End End Sub '注:"主程序"代表一个窗体(Form),窗体菜单-退出选项需设置快捷键ALT+F1 '这个控件有一个小小的问题,如果托盘菜单有退出选项,不能直接用"End 语句",否则在编译后运行期间用户选择退出后,操作系统会报错,以上使用发送按键方法避免出错 ,当然还有其他避免出错方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值