程序最小化后影藏到系统托盘
解决方案 »
- VB进程间互访 - 代码(纪念VB)
- winsock心跳包问题
- VB做网络版管理系统,在局域网访问SQL 2000,提示“拒绝访问”
- vb应用程序在状态栏中的显示
- 不能更新查询?
- 我想做一个窗体,输入Sql SERVER服务器的IP,用户名和密码后然后显示全部用户表,怎么做?
- 一个菜鸟的问题(哈哈!!)
- unable open then runonce key :5 software\windows\currentversion\runonce 拒绝访问???
- 怎么使自己的窗口在大小改变时,自动变化自己的尺寸。说来惭愧,现在我写的窗口都不能最大化和改变大小,因为只要把这个功能打开,我的窗口会在变化后变得惨缺不全,无法自适应其大小,虚心求教!
- 各位大哥,小弟刚入江湖,前路茫茫,急盼高手指点
- 在VB6中如何将这个数据库文件另存(备份)?
- 高手请进。。。如何将用VB设计WINDOWSXP的“服务”程序!
'在界面中增加一个菜单 1) 菜单 munMain 1.1) 退出(菜单下) mnuExit
Option ExplicitPrivate Sub Form_Load()
'系统托盘的默认值
Set TheForm = Me
Set TheMenu = mnuExit
End SubPrivate Sub Form_Resize()
'最小化的时候显示托盘
If Me.WindowState = vbMinimized Then
Me.Hide
'添加系统托盘
AddToTray Me, munMain '加载系统托盘
SetTrayTip "最小化的时候显示托盘示例" '托盘Tip
Else
RemoveFromTray '去掉系统托盘图标
End If
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
'------------------------------------------------------------------------------------------------------------------
'增加模块(因为AddressOf 运算符必须要写到模块中)
Option Explicit'------------------------------------------------------------------------------------------------------------------
'系统托盘
'------------------------------------------------------------------------------------------------------------------
Public OldWindowProc As Long
Public TheForm As Form
Public TheMenu As Menu
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Const WM_USER = &H400
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Private TheData As NOTIFYICONDATA
'------------------------------------------------------------------------------------------------------------------
'系统托盘处理过程
'------------------------------------------------------------------------------------------------------------------
' *********************************************
' 捕获托盘动作
' *********************************************
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = TRAY_CALLBACK Then
If lParam = WM_LBUTTONUP Then
If TheForm.WindowState = vbMinimized Then
TheForm.WindowState = vbNormal
End If
TheForm.Show
Exit Function
End If
If lParam = WM_RBUTTONUP Then
TheForm.PopupMenu TheMenu
Exit Function
End If
End If
NewWindowProc = CallWindowProc( _
OldWindowProc, hwnd, Msg, _
wParam, lParam)
End Function
' *********************************************
' 添加托盘图标
' *********************************************
Public Sub AddToTray(frm As Form, mnu As Menu) Set TheForm = frm
Set TheMenu = mnu OldWindowProc = SetWindowLong(frm.hwnd, _
GWL_WNDPROC, AddressOf NewWindowProc)
With TheData
.uID = 0
.hwnd = frm.hwnd
.cbSize = Len(TheData)
.hIcon = frm.Icon.Handle
.uFlags = NIF_ICON
.uCallbackMessage = TRAY_CALLBACK
.uFlags = .uFlags Or NIF_MESSAGE
.cbSize = Len(TheData)
End With
Shell_NotifyIcon NIM_ADD, TheData
End Sub
' *********************************************
' 移除托盘图标
' *********************************************
Public Sub RemoveFromTray()
With TheData
.uFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
SetWindowLong TheForm.hwnd, GWL_WNDPROC, _
OldWindowProc
End Sub
' *********************************************
' 设置托盘显示的文字
' *********************************************
Public Sub SetTrayTip(tip As String)
With TheData
.szTip = tip & vbNullChar
.uFlags = NIF_TIP
End With
Shell_NotifyIcon NIM_MODIFY, TheData
End Sub