使用API函数Shell_NotifyIcon在窗体加载时创建托盘图标,在程序退出后删除托盘图标。使用API函数SetWindowLong和CallWindowProc接收托盘图标的消息并进行处理代码如下 Option ExplicitPublic LastState As IntegerPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const WM_SYSCOMMAND = &H112 Private Const SC_MOVE = &HF010& Private Const SC_RESTORE = &HF120& Private Const SC_SIZE = &HF000&Private Sub Form_Load() If WindowState = vbMinimized Then LastState = vbNormal Else LastState = WindowState End If '调用添加托盘图标子程序 AddToTray Me, mnuTray '调用在托盘图标上显示提示的子程序 SetTrayTip "托盘程序" End Sub' 使得快捷菜单的菜单项能随窗体的状态自动调整有效性 Private Sub Form_Resize() Select Case WindowState Case vbMinimized mnuTrayMaximize.Enabled = True mnuTrayMinimize.Enabled = False mnuTrayMove.Enabled = False mnuTrayRestore.Enabled = True mnuTraySize.Enabled = False Case vbMaximized mnuTrayMaximize.Enabled = False mnuTrayMinimize.Enabled = True mnuTrayMove.Enabled = False mnuTrayRestore.Enabled = True mnuTraySize.Enabled = False Case vbNormal mnuTrayMaximize.Enabled = True mnuTrayMinimize.Enabled = True mnuTrayMove.Enabled = True mnuTrayRestore.Enabled = False mnuTraySize.Enabled = True End Select If WindowState <> vbMinimized Then LastState = WindowState End If End Sub '在窗体退出后,删除托盘中的图标 Private Sub Form_Unload(Cancel As Integer) RemoveFromTray End SubPrivate Sub mnuFileExit_Click() Unload Me End Sub '单击快捷菜单中的Close菜单项 Private Sub mnuTrayClose_Click() Unload Me End Sub'单击快捷菜单中的Maximize菜单项 Private Sub mnuTrayMaximize_Click() WindowState = vbMaximized End Sub'单击快捷菜单中的Minimize菜单项 Private Sub mnuTrayMinimize_Click() WindowState = vbMinimized End Sub'单击快捷菜单中的Move菜单项 Private Sub mnuTrayMove_Click() SendMessage hwnd, WM_SYSCOMMAND, SC_MOVE, 0& End Sub'单击快捷菜单中的Restore菜单项 Private Sub mnuTrayRestore_Click() SendMessage hwnd, WM_SYSCOMMAND, SC_RESTORE, 0& End Sub'单击快捷菜单中的Size菜单项 Private Sub mnuTraySize_Click() SendMessage hwnd, WM_SYSCOMMAND, SC_SIZE, 0& End Sub欢迎光临电脑爱好者论坛 bbs.cfanclub.net
Option ExplicitPublic LastState As IntegerPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF010&
Private Const SC_RESTORE = &HF120&
Private Const SC_SIZE = &HF000&Private Sub Form_Load()
If WindowState = vbMinimized Then
LastState = vbNormal
Else
LastState = WindowState
End If
'调用添加托盘图标子程序
AddToTray Me, mnuTray
'调用在托盘图标上显示提示的子程序
SetTrayTip "托盘程序"
End Sub' 使得快捷菜单的菜单项能随窗体的状态自动调整有效性
Private Sub Form_Resize()
Select Case WindowState
Case vbMinimized
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = False
mnuTrayMove.Enabled = False
mnuTrayRestore.Enabled = True
mnuTraySize.Enabled = False
Case vbMaximized
mnuTrayMaximize.Enabled = False
mnuTrayMinimize.Enabled = True
mnuTrayMove.Enabled = False
mnuTrayRestore.Enabled = True
mnuTraySize.Enabled = False
Case vbNormal
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = True
mnuTrayMove.Enabled = True
mnuTrayRestore.Enabled = False
mnuTraySize.Enabled = True
End Select If WindowState <> vbMinimized Then
LastState = WindowState
End If
End Sub
'在窗体退出后,删除托盘中的图标
Private Sub Form_Unload(Cancel As Integer)
RemoveFromTray
End SubPrivate Sub mnuFileExit_Click()
Unload Me
End Sub
'单击快捷菜单中的Close菜单项
Private Sub mnuTrayClose_Click()
Unload Me
End Sub'单击快捷菜单中的Maximize菜单项
Private Sub mnuTrayMaximize_Click()
WindowState = vbMaximized
End Sub'单击快捷菜单中的Minimize菜单项
Private Sub mnuTrayMinimize_Click()
WindowState = vbMinimized
End Sub'单击快捷菜单中的Move菜单项
Private Sub mnuTrayMove_Click()
SendMessage hwnd, WM_SYSCOMMAND, SC_MOVE, 0&
End Sub'单击快捷菜单中的Restore菜单项
Private Sub mnuTrayRestore_Click()
SendMessage hwnd, WM_SYSCOMMAND, SC_RESTORE, 0&
End Sub'单击快捷菜单中的Size菜单项
Private Sub mnuTraySize_Click()
SendMessage hwnd, WM_SYSCOMMAND, SC_SIZE, 0&
End Sub欢迎光临电脑爱好者论坛 bbs.cfanclub.net
http://www2.baidu.com/chains/chains.php?cn=cwwnet1 欢迎进入http://www2.baidu.com/chains/chains.php?cn=cwwnet1