2014-07-08 8 views
0

내 VB6 응용 프로그램은 대개 숨겨져 있고 트레이 아이콘이 있습니다. 그대로트레이 아이콘에서 마우스 이동 및 마우스 클릭 모두 처리

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 

는 응용 프로그램이 작동하고 마우스 오른쪽 clickign이 아이콘이 제공 :

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와 클릭 메시지를 처리 ​​: 현재이 코드에 따라 사용자 정의 콜백을 처리 메뉴를 엽니 다. 그래서 나는이에 콜백 변경이 기존 콜백 메시지 외에 MOUSE_MOVE 메시지를 처리 ​​할 :

.uCallbackMessage = TRAY_CALLBACK Or WM_MOUSEMOVE 

그러나, 이것은 MouseMove 이벤트 메시지를 무시합니다. 내가 사용하는 경우 :

.uCallbackMessage = WM_MOUSEMOVE 

mouse_move 메시지가 제대로 작동하고 Form_MouseMove가 제대로 호출되었지만 메뉴가 작동하지 않습니다.

내가 마우스를 이동하고 마우스 모두 클릭 처리하기 위해 여러 콜백을 지정할 수있는 방법 질문

?

답변

3

아이콘 당 하나의 콜백 메시지 만있을 수 있습니다. 귀하의 경우에는 TRAY_CALLBACK입니다. 이 메시지를 받으면 lParam 값은 콜백을 트리거 한 마우스 메시지를 나타냅니다.

예제 코드에서 이미 lParamWM_RBUTTONUP을 비교하고 있습니다. WM_MOUSEMOVE에 대한 추가 검사 만하면됩니다.