欢迎大家访问我的网站!

VB最小化托盘加气泡

思博2021-04-08 00:35:32461编程开发

'托盘图标/气泡演示程序

'模块代码

'文件名: modTray.bas

'Download by http://www.NewXing.com

'蓝色炫影  制作

'www.rekersoft.cn

'

'最后更新 2008/07/19

'您可以自由用于非商业用途。

'请保留此行版权信息,谢谢。


Option Explicit

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


Public Type NOTIFYICONDATA

    cbSize As Long

    hwnd As Long

    uID As Long

    uFlags As Long

    uCallbackMessage As Long

    hIcon As Long

    szTip As String * 128

    dwState As Long

    dwStateMask As Long

    szInfo As String * 256

    uTimeout As Long

    szInfoTitle As String * 64

    dwInfoFlags As Long

End Type


Public Const NOTIFYICON_VERSION = 3       'V5 style taskbar

Public Const NOTIFYICON_OLDVERSION = 0    'Win95 style taskbar


Public Const NIM_ADD = &H0

Public Const NIM_MODIFY = &H1

Public Const NIM_DELETE = &H2

Public Const NIM_SETFOCUS = &H3

Public Const NIM_SETVERSION = &H4


Public Const NIF_MESSAGE = &H1

Public Const NIF_ICON = &H2

Public Const NIF_TIP = &H4

Public Const NIF_STATE = &H8

Public Const NIF_INFO = &H10


Public Const NIS_HIDDEN = &H1

Public Const NIS_SHAREDICON = &H2


Public Const NIIF_NONE = &H0

Public Const NIIF_WARNING = &H2

Public Const NIIF_ERROR = &H3

Public Const NIIF_INFO = &H1

Public Const NIIF_GUID = &H4


Public myData As NOTIFYICONDATA '保存托盘图标数据



Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

    (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _

    (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long


Public Const TRAY_CALLBACK = (&H400 + 1001&)

Public Const GWL_WNDPROC = -4


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 Enum WIN_STATUS

    STA_MIN

    STA_NORMAL

End Enum


Public glWinRet As Long

Public OrgWinRet As Long

Public Status As WIN_STATUS '保存窗体状态

Public MyForm As Form

Public Function CallbackMsgs(ByVal wHwnd As Long, ByVal wMsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long

On Error Resume Next

    If wMsg = TRAY_CALLBACK Then

        With MyForm

            Select Case CLng(lp_id)

                Case WM_RBUTTONUP '右键

                '右键弹出菜单,让菜单中的mnuShow字体加粗

                    .PopupMenu .mnuTray, , , , .mnuShow

                Case WM_LBUTTONUP '左键

                    If .WindowState = vbMinimized Then

                      .Visible = True

                        .WindowState = vbNormal

                    Else

                        .WindowState = vbMinimized

                        .Visible = False

                    End If

            End Select

        End With

    End If

    CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wMsg, wp_id, lp_id)

End Function


Public Function ShowTip(ByVal TipTitle As String, ByVal TipContent As String, TipIco As Integer)

With myData

    .szInfoTitle = TipTitle & vbNullChar

    .szInfo = TipContent & vbNullChar

    .dwInfoFlags = TipIco

    

End With

Shell_NotifyIcon NIM_MODIFY, myData

End Function

Public Function CreatTray(ByRef TheForm As Form, TipMove As String, TipTitle As String, TipContent As String, TipIco As Long)

Set MyForm = TheForm

OrgWinRet = GetWindowLong(MyForm.hwnd, GWL_WNDPROC)

With myData

    .cbSize = Len(myData)

    .hwnd = MyForm.hwnd

    .uID = vbNull

    .uFlags = NIF_ICON Or NIF_TIP Or NIF_INFO Or NIF_MESSAGE

    .uCallbackMessage = TRAY_CALLBACK '托盘图标发生事件时所产生的消息。

    .hIcon = MyForm.Icon  '图标。类型为StdPicture。所以可以设置为picturebox中的图片

    .szTip = TipMove & vbNullChar 'tooltip文字

    .dwState = 0

    .dwStateMask = 0

    .szInfoTitle = TipTitle & vbNullChar '气泡提示标题

    .szInfo = TipContent & vbNullChar  '气泡提示文字

    .dwInfoFlags = TipIco '气泡的图标

    .uTimeout = 10000 '气泡消失时间

End With

Shell_NotifyIcon NIM_ADD, myData

glWinRet = SetWindowLong(MyForm.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs)

End Function

Public Function UnloadTray()

Shell_NotifyIcon NIM_DELETE, myData

Call SetWindowLong(MyForm.hwnd, GWL_WNDPROC, OrgWinRet)

End Function


'窗体代码

'最小化到托盘气泡完美版

'星光 修改 2012/01/04

'QQ:958796636

'您可以自由用于非商业用途。

Option Explicit

'Download by http://www.NewXing.com

Private Sub cmdShowToolTip_Click()

'函数参数:标题,内容,图标

'图标取值0-7 其中4是本程序图标

Call ShowTip("测试标题", "测试内容", 2)

End Sub


Private Sub Form_Load()

'窗体加载最小化

If Status = STA_NORMAL Then

    Me.Visible = True

    Me.WindowState = vbNormal

Else

    Me.WindowState = vbNormal

    Me.Visible = False

End If

'函数参数:指针在图标上显示的内容,标题,内容,图标

Call CreatTray(Me, "移动显示", "气泡标题", "气泡内容", 1)

End Sub


Private Sub Form_Resize()

With Me

    If Status = STA_NORMAL And .WindowState = vbMinimized And .Visible = True Then

        .Visible = False '最小化的时候,隐藏到托盘

        Status = STA_MIN

        Else

        Status = STA_NORMAL

    End If

End With

End Sub


Private Sub Form_Unload(Cancel As Integer)

Call UnloadTray

End Sub

'下面两个是菜单中的事件,在窗体上右键选择菜单编辑器进行修改

'若修改菜单中函数名称,需要修改模块中对应的函数名称

Private Sub mnuExit_Click()

Unload Me

End Sub


Private Sub mnuShow_Click()

If Status = STA_MIN Then

    Me.Visible = True

    Me.WindowState = vbNormal

Else

    Me.WindowState = vbMinimized

    Me.Visible = False

End If

End Sub


转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:http://lxkj.vip/?id=36

网友评论