bool HwndSourceHookMenuPopup::HandleMouseMove(suic::MessageParameter& mp) { bool handled = false; MenuPtr hotMenu = HitTestPopup(); if (IsMouseCapture()) { handled = true; if (!hotMenu) { if (_focusMenu) { suic::MouseEventArg ef(NULL, mp.point); _focusMenu->OnMouseLeave(ef); } _focusMenu = hotMenu; } else { suic::MouseEventArg e(hotMenu.get(), suic::SystemHelper::GetCursorPoint(hotMenu.get())); if (_focusMenu && _focusMenu != hotMenu) { suic::MouseEventArg ef(hotMenu.get(), mp.point); _focusMenu->OnMouseLeave(ef); } hotMenu->OnMouseMove(e); _focusMenu = hotMenu; } } else if (!hotMenu) { handled = true; suic::HwndHelper::HandleDefWndMessage(mp); } return handled; }
void HwndSourceHookMenuPopup::HandleMouseUp() { _popup->ReleaseCaptureMouse(); MenuPtr focusMenu = HitTestPopup(); if (focusMenu) { bool bIsMain = (focusMenu == _mainMenu); suic::ElementPtr hot = suic::SystemHelper::GetMouseOverElement(focusMenu.get()); MenuItemPtr menuPtr = MenuItemPtr::cast(hot); if (menuPtr) { if (menuPtr->IsEnabled()) { if (!bIsMain && !menuPtr->IsSubmenu()) { InternalCloseTrackMenuPopup(); } menuPtr->OnClick(focusMenu.get(), bIsMain); if (menuPtr->MenuItemClick) { menuPtr->MenuItemClick(focusMenu.get(), menuPtr.get()); } else if (focusMenu->MenuItemClick) { focusMenu->MenuItemClick(focusMenu.get(), menuPtr.get()); } } } } else { InternalCloseTrackMenuPopup(); } }