【发布时间】:2014-07-08 21:00:59
【问题描述】:
我的 VB6 应用程序通常是隐藏的并且有一个托盘图标。它目前根据此代码处理用户定义的回调:
Public Const WM_USER = &H400
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
With GTStruct
.uID = mId
.hwnd = frm.hwnd
.hIcon = frm.Icon.Handle
.UFlags = NIF_ICON Or NIF_MESSAGE
.uCallbackMessage = TRAY_CALLBACK
.cbSize = Len(GTStruct)
End With
Shell_NotifyIcon NIM_ADD, GTStruct
WindowProc 处理 TRAY_CALLBACK 和点击消息:
Const WM_NCDESTROY = &H82
Const WM_CLOSE = &H10
' If we're being destroyed, remove the tray icon
' and restore the original WindowProc.
If Msg = WM_NCDESTROY Or Msg = WM_CLOSE Then
RemoveFromTray
ElseIf Msg = TRAY_CALLBACK Then
' The user clicked on the tray icon.
' Look for click events.
If lParam = WM_RBUTTONUP Then
' On right click, show the menu.
SetForegroundWindow TheForm.hwnd
TheForm.PopupMenu TheMenu
If Not (TheForm Is Nothing) Then
PostMessage TheForm.hwnd, WM_NULL, ByVal 0&, ByVal 0&
End If
Exit Function
End If
End If
实际上,应用程序可以正常工作,然后右键单击图标会弹出菜单。除了这个现有的回调消息之外,我还想处理 mouse_move 消息,所以我将回调更改为:
.uCallbackMessage = TRAY_CALLBACK Or WM_MOUSEMOVE
但是,这会忽略 mousemove 消息。如果我使用:
.uCallbackMessage = WM_MOUSEMOVE
mouse_move 消息有效并且 Form_MouseMove 被正确调用,但随后菜单停止工作。
问题
如何指定多个回调来处理鼠标移动和鼠标点击?
【问题讨论】:
标签: winapi vb6 system-tray trayicon