Recursion 我认为递归可以解决这个问题;但我不知道怎么做?

Recursion 我认为递归可以解决这个问题;但我不知道怎么做?,recursion,Recursion,我正在创建一个用户界面。现在,我正在开发一种通用的框,它可以在调整滚动条的大小时动态地添加和删除滚动条 我沿着底部和右内边缘绘制滚动条。内部边缘很重要 因此,在某一点上,长方体的大小会调整。如果调整了大小,我会检查新大小是否小于内容所需的大小,如果是,则会添加滚动条 我的问题源于只需要一个滚动条;其他维度/轴的大小与内容所需的大小非常接近 所发生的是,这个滚动条是在内部边缘绘制的。现在,将删除可用于内容的区域。问题是,如果显示一个滚动条,我必须再次检查可用区域,看看是否需要另一个滚动条。然后又是

我正在创建一个用户界面。现在,我正在开发一种通用的框,它可以在调整滚动条的大小时动态地添加和删除滚动条

我沿着底部和右内边缘绘制滚动条。内部边缘很重要

因此,在某一点上,长方体的大小会调整。如果调整了大小,我会检查新大小是否小于内容所需的大小,如果是,则会添加滚动条

我的问题源于只需要一个滚动条;其他维度/轴的大小与内容所需的大小非常接近

所发生的是,这个滚动条是在内部边缘绘制的。现在,将删除可用于内容的区域。问题是,如果显示一个滚动条,我必须再次检查可用区域,看看是否需要另一个滚动条。然后又是

这似乎是一个递归问题;但我不确定这对我有什么帮助

一些代码:

void Box::UpdateVisibleRegion()
{
    // if the dimensions of this box is smaller than what the widget needs, display horizontal scrollbar
    if(GetDimensions().x < m_widget->GetDimensions().x)
    {
        m_scrollbarH->SetVisibility(true);
        m_scrollbarH->SetSize(utils::coord<int>(GetDimensions().x,m_scrollbarH->GetDimensions().y));
    }
    else
    {
        m_scrollbarH->SetVisibility(false);
    }

    // likewise for vertical scrollbar
    if(GetDimensions().y < m_widget->GetDimensions().y)
    {
        m_scrollbarV->SetVisibility(true);
        m_scrollbarV->SetSize(utils::coord<int>(m_scrollbarV->GetDimensions().x,GetDimensions().y));
    }
    else
    {
        m_scrollbarV->SetVisibility(false);
    }
这就是问题所在。如果盒子的高度刚好超过小部件的高度;宽度远远低于它;然后显示水平滚动条。但现在,垂直滚动条的检查应该是:

    if(GetDimensions().y - m_scrollbarH->GetDimensions().y < m_widget->GetDimensions().y)
因为滚动条是在内部边缘绘制的,所以空间更小。但很明显,我不能知道,直到我检查了另一个。水平面和垂直面都会相互影响

我相信递归就是答案;但我看不见


我可能可以用一两个大的嵌套if语句来完成这项工作…

请继续您的演示。代码是用什么语言编写的?您正在使用哪个GUI框架?请编辑问题,添加适当的标签,考虑更改为一个更具描述性的标题,提到你的实际问题。谢谢。递归函数需要3样东西。1函数中设置递归调用条件的逻辑,2函数中的递归调用,3终止递归并返回值或在函数范围外实现所需更改的方法。在您的情况下,您的函数设置可见性。如果函数以某种方式更改了维度/可见性,则需要再次调用该函数。让函数返回一个值或设置一个全局标志,指示条件是否改变,可以提供退出测试。