Option ExplicitPrivate Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As LongPrivate Type NOTIFYICONDATA cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64End TypePrivate Const NIM_ADD = &H0Private Const NIM_DELETE = &H2Private Const MOUSE_MOVED = &H1Private Const NIF_ICON = &H2Private Const NIF_TIP = &H4Private Const NIF_MESSAGE = &H1Private Const WM_MOUSEMOVE = &H200Private Const WM_LBUTTONDOWN = &H201Dim Ico As NOTIFYICONDATAPrivate Sub Command1_Click() Unload Me
End SubPrivate Sub Command2_Click() Me.Hide
End SubPrivate Sub Form_Load() With Ico
.cbSize = Len(Ico)
.hIcon = Me.Icon
.uID = 1
.hwnd = Me.hwnd
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.szTip = "CDdoor" & Chr$(0)
End With
Call Shell_NotifyIcon(NIM_ADD, Ico)
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim L As Long
L = X / Screen.TwipsPerPixelX
If L = WM_LBUTTONDOWN Then
Me.Show
End If
End SubPrivate Sub Form_Unload(Cancel As Integer) Call Shell_NotifyIcon(NIM_DELETE, Ico)
End Sub以上是实验代码,经测试能正常工作,不知道这个代码由没有什么BUG和问题,欢迎大家给出意见!
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64End TypePrivate Const NIM_ADD = &H0Private Const NIM_DELETE = &H2Private Const MOUSE_MOVED = &H1Private Const NIF_ICON = &H2Private Const NIF_TIP = &H4Private Const NIF_MESSAGE = &H1Private Const WM_MOUSEMOVE = &H200Private Const WM_LBUTTONDOWN = &H201Dim Ico As NOTIFYICONDATAPrivate Sub Command1_Click() Unload Me
End SubPrivate Sub Command2_Click() Me.Hide
End SubPrivate Sub Form_Load() With Ico
.cbSize = Len(Ico)
.hIcon = Me.Icon
.uID = 1
.hwnd = Me.hwnd
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.szTip = "CDdoor" & Chr$(0)
End With
Call Shell_NotifyIcon(NIM_ADD, Ico)
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim L As Long
L = X / Screen.TwipsPerPixelX
If L = WM_LBUTTONDOWN Then
Me.Show
End If
End SubPrivate Sub Form_Unload(Cancel As Integer) Call Shell_NotifyIcon(NIM_DELETE, Ico)
End Sub以上是实验代码,经测试能正常工作,不知道这个代码由没有什么BUG和问题,欢迎大家给出意见!
其中L = X / Screen.TwipsPerPixelX 并且L = WM_LBUTTONDOWN时
鼠标到达窗体的这个位置时菜单就自动弹出来。
X=515 只要鼠标到达这个位置都出菜单。