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


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

本文整理汇总了C++中UIElement::GetRParent方法的典型用法代码示例。如果您正苦于以下问题:C++ UIElement::GetRParent方法的具体用法?C++ UIElement::GetRParent怎么用?C++ UIElement::GetRParent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在UIElement的用法示例。


在下文中一共展示了UIElement::GetRParent方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: 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

示例2: MeasureOverride

// virtual
LDraw::SizeD DockPanel::MeasureOverride(LDraw::SizeD availSize)
{
    LDraw::BBoxD layoutRect(0, 0, availSize.Width, availSize.Height);

    double minWidth = 0;
    double minHeight = 0;
    double totalWidth = 0;
    double totalHeight = 0;

    unsigned int ncount = get_InternalChildren()->GetCount();

#if 0
    for (unsigned int i = 0; i < ncount; i++)
    {
        UIElement* pVisual = get_InternalChildren()->GetItem(i);//(*get_rchildList())[i];

        // TODO remove this
        //	pVisual->SetRParent(this);
    }
#endif

    for (unsigned int i = 0; i < ncount; i++)
    {
        UIElement* pVisual = get_InternalChildren()->get_Item(i);//(*get_rchildList())[i];

        ASSERT(pVisual->GetRParent() == this);

        if (pVisual->get_Visibility() != Collapsed)
        {
            DockEnum dock = GetDock(pVisual);

            if (dock == Fill || ((i == ncount-1) && get_LastChildFill()))
            {
                pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), layoutRect.GetHeight()));
                totalWidth += pVisual->get_DesiredSize().Width;
                totalHeight += pVisual->get_DesiredSize().Height;
                break;
            }
            else if (dock == Left)
            {
                pVisual->Measure(LDraw::SizeD(0, layoutRect.GetHeight()));
                layoutRect.left += pVisual->get_DesiredSize().Width;
                totalWidth += pVisual->get_DesiredSize().Width;
                //	totalHeight = max(totalHeight, pVisual->m_desiredHeight);
                minHeight = MAX(minHeight, pVisual->get_DesiredSize().Height);
            }
            else if (dock == Top)
            {
                pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), 0));
                layoutRect.top += pVisual->get_DesiredSize().Height;
                totalHeight += pVisual->get_DesiredSize().Height;
                //	totalWidth = max(totalWidth, pVisual->m_desiredWidth);
                minWidth = MAX(minWidth, pVisual->get_DesiredSize().Width);
            }
            else if (dock == Right)
            {
                pVisual->Measure(LDraw::SizeD(0, layoutRect.GetHeight()));
                layoutRect.right -= pVisual->get_DesiredSize().Width;
                totalWidth += pVisual->get_DesiredSize().Width;
                //	totalHeight = max(totalHeight, pVisual->m_desiredHeight);
                minHeight = MAX(minHeight, pVisual->get_DesiredSize().Height);
            }
            else if (dock == Bottom)
            {
                pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), 0));
                layoutRect.bottom -= pVisual->get_DesiredSize().Height;
                totalHeight += pVisual->get_DesiredSize().Height;
                //	totalWidth = max(totalWidth, pVisual->m_desiredWidth);
                minWidth = MAX(minWidth, pVisual->get_DesiredSize().Width);
            }
            else
                ASSERT(0);

            //	pVisual->SetLayoutOffset(fLeft, fTop);
            //	pVisual->Arrange(LDraw::SizeF(pVisual->m_computedWidth, pVisual->m_computedHeight));

            /*
            if (dock == Fill ||

            	layoutRect.GetWidth() <= 0 ||
            	layoutRect.GetHeight() <= 0)
            {
            	break;
            }
            */
        }
    }

    return LDraw::SizeD(MAX(minWidth, totalWidth), MAX(minHeight, totalHeight));
}
开发者ID:,项目名称:,代码行数:91,代码来源:


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