Куда посылается WM_HELP при нажатии F1 в открытом меню трея? - VB
Формулировка задачи:
Если в обычной форме нажать F1 то выводится Help согласно HelpContextID этой формы
и генерируется WM_HELP которое отлавливается через сабклассинг этой формы.
Допустим форма имеет иконку в трее, установленную через Shell_NotifyIcon + меню этой иконки.
Я вызываю меню трея и нажимаю F1 (при отображаемом меню трея).
Выводится Help согласно HelpContextID формы (как и в первом случае).
Но при этом WM_HELP через сабклассинг самой формы не ловится.
Через сообщения трея тоже не ловится:
И такая же ситуация с любым popup menu (не обязательно в трее).
Как отловить?
и генерируется WM_HELP которое отлавливается через сабклассинг этой формы.
Допустим форма имеет иконку в трее, установленную через Shell_NotifyIcon + меню этой иконки.
Я вызываю меню трея и нажимаю F1 (при отображаемом меню трея).
Выводится Help согласно HelpContextID формы (как и в первом случае).
Но при этом WM_HELP через сабклассинг самой формы не ловится.
Через сообщения трея тоже не ловится:
И такая же ситуация с любым popup menu (не обязательно в трее).
Как отловить?
Решение задачи: «Куда посылается WM_HELP при нажатии F1 в открытом меню трея?»
textual
Листинг программы
Dim hwndMenu As Long
'hwndMenu = GetSubMenu(GetMenu(Me.hwnd), 0) ВАРИАНТ 1
hwndMenu = GetMenu(Me.hwnd)ВАРИАНТ 2
Debug.Print hwndMenu
OldMenuWindowProc = SetWindowLong( _
hwndMenu, GWL_WNDPROC, _
AddressOf NewMenuWindowProc)
Public Function NewMenuWindowProc( _
ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg
Case WM_HELP
Debug.Print "WM_HELP"
Case Else
Debug.Print Msg
End Select
NewMenuWindowProc = CallWindowProc( _
OldMenuWindowProc, hwnd, Msg, wParam, _
lParam)
End Function