本文整理汇总了C++中UIElement::get_Parent方法的典型用法代码示例。如果您正苦于以下问题:C++ UIElement::get_Parent方法的具体用法?C++ UIElement::get_Parent怎么用?C++ UIElement::get_Parent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UIElement
的用法示例。
在下文中一共展示了UIElement::get_Parent方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FindCommonAncestor
UIElement* UIElement::FindCommonAncestor(UIElement* element1)
{
UIElement* element0 = this;
// mark phase
for (UIElement* p = element0; p != nullptr; p = p->get_Parent())
{
EnterCriticalSection(p->m_markedSection);
p->m_marked = true;
}
UIElement* commonAncestor = nullptr;
for (UIElement* p = element1; p != nullptr; p = p->get_Parent())
{
if (p->m_marked)
{
commonAncestor = p;
break;
}
}
// unmark
for (UIElement* p = element0; p != nullptr; p = p->get_Parent())
{
p->m_marked = false;
LeaveCriticalSection(p->m_markedSection);
}
return commonAncestor;
}
示例2: RaiseEvent
void UIElement::RaiseEvent(RoutedEventArgs* args)
{
args->m_originalSource = this;
RoutedEvent* routedEvent = args->get_RoutedEvent();
if (routedEvent == NULL)
{
raise(SystemException("routedEvent = NULL"));
}
// preview phase
if (routedEvent->get_RoutingStrategy() == RoutingStrategy_Tunnel)
{
#if 0
EventRoute route;
UIElement* p = this;//dynamic_cast<UIElement*>(GetRParent());
while (p)
{
route.ancestors.push_front(p);
p = dynamic_cast<UIElement*>(p->GetRParent());
}
list<UIElement*>::iterator it = route.ancestors.begin();
while (it != route.ancestors.end())
{
UIElement* el = *it;
// Class handlers
if (!args->get_Handled()) // TODO
{
EventManager::InvokeClassHandlers(el/*args->get_Source()*/->GetType(), el, args);
}
// Instance handlers
signal_base* sig = el->m_handlers[routedEvent->m_index];
if (sig)
{
int nslots = sig->GetSlotCount();
// signal2<Object*,RoutedEventArgs*>::connection_type it2 = el->m_handlers[routedEvent->m_index]->m_slots.begin();
// while (it2 != el->m_handlers[routedEvent->m_index]->m_slots.end())
for (int i = 0; i < nslots; i++)
{
stub_interface_base* slot = sig->GetSlot(i);
if (!args->get_Handled()) // TODO
{
args->InvokeEventHandler(this, slot);
}
// ++it2;
}
}
++it;
}
#endif
}
else if (routedEvent->get_RoutingStrategy() == RoutingStrategy_Bubble)
{
EventRoute route;
UIElement* p = this;
do
{
route.ancestors.push_back(p);
p = p->get_Parent();
}
while (p);
if (args->get_Source() == nullptr)
{
args->set_Source(this);
}
for (auto it = route.ancestors.begin(); it != route.ancestors.end(); ++it)
{
UIElement* el = *it;
// Class handlers
if (!args->get_Handled()) // TODO
{
EventManager::InvokeClassHandlers(el->GetType(), el, args);
}
// Instance handlers
Event* pEvent = el->m_events[routedEvent->GetIndex()];
if (pEvent)
{
try
{
switch (pEvent->get_NumArgs())
{
case 2:
{
pEvent->Handle(el, args);
}
//.........这里部分代码省略.........
示例3: OnMouseMove
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);
}
}