当前位置: 首页>>代码示例>>C++>>正文


C++ UIElement::get_Parent方法代码示例

本文整理汇总了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;
}
开发者ID:sigurdle,项目名称:FirstProject2,代码行数:31,代码来源:UIElement.cpp

示例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);
						}
//.........这里部分代码省略.........
开发者ID:sigurdle,项目名称:FirstProject2,代码行数:101,代码来源:UIElement.cpp

示例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);
	}
}
开发者ID:sigurdle,项目名称:FirstProject2,代码行数:61,代码来源:Window.cpp


注:本文中的UIElement::get_Parent方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。