void PlatformWindowSite::OnMouseMove(gm::PointF clientMousePos) { POINT screenMousePos; ::GetCursorPos(&screenMousePos); UIElement* hitElement = nullptr; if (m_MouseCaptureElement) { hitElement = m_MouseCaptureElement; } else { //Visual* child = get_Child(); UIElement* child = GetRootElement(); if (child) { hitElement = child->HitTest_(clientMousePos); } } if (m_MouseOverElement != hitElement) { // Find common ancestor UIElement* commonAncestor = m_MouseOverElement->FindCommonAncestor(hitElement); // ASSERT(commonAncestor); for (UIElement* p = m_MouseOverElement; p != commonAncestor; p = p->get_Parent()) { p->set_IsMouseOver(false); } for (UIElement* p = hitElement; p != commonAncestor; p = p->get_Parent()) { p->set_IsMouseOver(true); } if (m_MouseOverElement) { m_MouseOverElement->set_IsMouseDirectlyOver(false); } m_MouseOverElement = hitElement; if (m_MouseOverElement) { m_MouseOverElement->set_IsMouseDirectlyOver(true); } } if (hitElement) { MouseEventArgs* args = new MouseEventArgs(nullptr, 0); args->set_RoutedEvent(UIElement::get_MouseMoveEvent()); args->m_screenpos = Point(float(screenMousePos.x), float(screenMousePos.y)); args->m_clientpos = clientMousePos; hitElement->RaiseEvent(args); } }