Куда посылается WM_HELP при нажатии F1 в открытом меню трея? - VB

Узнай цену своей работы

Формулировка задачи:

Если в обычной форме нажать F1 то выводится Help согласно HelpContextID этой формы
и генерируется 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы