Winapi 处理鼠标移动和鼠标单击托盘图标

Winapi 处理鼠标移动和鼠标单击托盘图标,winapi,vb6,system-tray,trayicon,Winapi,Vb6,System Tray,Trayicon,我的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

我的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处理托盘回调和单击消息:

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
按原样,应用程序工作,右键单击图标打开菜单。除了此现有回调消息之外,我还想处理鼠标移动消息,因此我将回调更改为:

.uCallbackMessage = TRAY_CALLBACK Or WM_MOUSEMOVE 
但是,这会忽略mousemove消息。如果我使用:

.uCallbackMessage = WM_MOUSEMOVE 
mouse\u move消息起作用,Form\u MouseMove被正确调用,但随后菜单停止工作

问题


如何指定多个回调以处理鼠标移动和鼠标单击?

每个图标只能有一条回调消息;在您的情况下,这是
托盘回调
。当您收到此消息时,
lParam
值指示触发回调的鼠标消息


在示例代码中,您已经将
lParam
WM\u RBUTTONUP
进行了比较。您只需针对
WM_MOUSEMOVE

添加额外的检查,每个图标只能有一条回调消息;在您的情况下,这是
托盘回调
。当您收到此消息时,
lParam
值指示触发回调的鼠标消息


在示例代码中,您已经将
lParam
WM\u RBUTTONUP
进行了比较。您只需针对
WM_MOUSEMOVE

添加额外的检查,每个图标只能有一条回调消息;在您的情况下,这是
托盘回调
。当您收到此消息时,
lParam
值指示触发回调的鼠标消息


在示例代码中,您已经将
lParam
WM\u RBUTTONUP
进行了比较。您只需针对
WM_MOUSEMOVE

添加额外的检查,每个图标只能有一条回调消息;在您的情况下,这是
托盘回调
。当您收到此消息时,
lParam
值指示触发回调的鼠标消息

在示例代码中,您已经将
lParam
WM\u RBUTTONUP
进行了比较。您只需针对
WM\u MOUSEMOVE
添加额外的检查