是否可以枚举wxWidgets中的wxFrame子级

Is it possible to enumerate the wxFrame children in wxWidgets?

本文关键字:中的 wxFrame 子级 wxWidgets 枚举 是否      更新时间:2023-10-16

我正在使用wxGlade设计器为一个小型应用程序生成GUI。它生成一个从wxFrame继承的类,wxFrame是主应用程序窗口。为了便于维护,我希望避免在这个生成的类中编写额外的代码。

但是,使用wxGlade创建的所有小部件实际上都是在自动生成的方法do_layout()中创建的,并且不可能在生成类中该生成方法的范围之外访问它们。

有没有一种方法可以在生成的类之外获取某个小部件的指针——通过名称、类型、枚举子类或类似的方法?

从wxWindow继承的所有类(wxFrame就是其中之一)都有一个函数"GetChildren",该函数返回子窗口列表,然后可以对其进行枚举。如果您正在按名称查找特定字段,请使用"FindWindow"函数。

实际上我自己找到了答案:

wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
     wxWindow *current = (wxWindow *)node->GetData();
     // .. do something with current
}

我建议您尝试wxFormBuilder。我以前也使用过wxGlade,但它对如何使用它提出了太多限制。例如,使用wxFormBuilder,您可以为表单上的每个控件选择"可见性"(public、protected、private)。它还可以为事件处理程序生成虚拟函数,因此您只需从wxFormBuilder生成的类派生类并实现这些函数。