您的位置:首页 > 编程语言 > VB

VB最小化到通知栏,托盘 的方法 WinAPI实现

2016-12-07 19:06 483 查看
直接复制代码稍微修改一下就可以用了

1模块代码

Option Explicit

Public Const DefaultIconIndex = 1 '图标缺省索引
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键

Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标

Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加,修改,删除)有效
Public Const NIF_TIP = 4  ' ToolTip(提示)有效

'API Declare
'图标操作
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'判断窗口是否最小化
Public Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long  '如果是最小化,返回值>0
'设置窗口位置和状态的功能
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hwndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) 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 * 64
End Type

'函数定义
'添加图标到通知栏
Public Function Icon_Add(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long

Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Add = Shell_NotifyIcon(NIM_ADD, IconVa)
End With

End Function

'删除通知栏图标
Public Function Icon_Del(iHwnd As Long, lIndex As Long) As Long

Dim IconVa As NOTIFYICONDATA
Dim L As Long

With IconVa
.hwnd = iHwnd
.uID = lIndex
.cbSize = Len(IconVa)
End With

Icon_Del = Shell_NotifyIcon(NIM_DELETE, IconVa)

End Function

'修改通知栏图标
Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long

Dim IconVa As NOTIFYICONDATA
With IconVa
.hwnd = iHwnd
.szTip = sTips + Chr$(0)
.hIcon = hIcon
.uID = IconID
.uCallbackMessage = WM_LBUTTONDOWN
.cbSize = Len(IconVa)
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Icon_Modify = Shell_NotifyIcon(NIM_MODIFY, IconVa)
End With

End Function


2窗体代码

Option Explicit
Dim MinFlag As Boolean

Private Sub Form_Load()

MinFlag = False

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim L
L = X \ 15
If L = WM_RBUTTONDOWN Then
Me.PopupMenu m_Main
ElseIf L = WM_LBUTTONDOWN Then
Call Icon_Modify(Form1.hwnd, Form1.Caption, LoadPicture("F:\图片\ico\1.ico"), 0)
End If

End Sub

Private Sub Form_Resize()

If IsIconic(Me.hwnd) > 0 And MinFlag = False Then '如果最小化
MinFlag = True
Me.Visible = False
Call Icon_Add(Me.hwnd, Me.Caption, Me.Icon, 0)
Me.WindowState = vbNormal
End If

End Sub

Private Sub m_Menu_Click(Index As Integer)

Select Case Index
Case 0:
Call Icon_Del(Form1.hwnd, 0)
Form1.Show
MinFlag = False
Exit Sub
Case 1:
Call Icon_Del(Form1.hwnd, 0)
End
End Select

End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息