Куда посылается 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д