我的 wxWidgets 基于框架的应用程序需要一个顶级的 sizer 吗?

Do I need a top-level sizer on my wxWidgets frame-based app?

我正在学习一些关于 wxWidgets 的教程,发现我必须添加一个 wxPanel 到我的主 frame 以获得 Windows原生般的背景,而不是它默认的丑陋的深灰色。

现在,WxSmith tutorial: Hello world 指出 wxBoxSizer 是应该添加到主框架的第一个控件。然后是 wxPanel,然后是 另一个 sizer,我将在其中放置我的控件(文本、按钮等)。

我无法理解第一个 sizer 的必要性。对我来说,具有以下层次结构更有意义:Frame -> Panel -> Sizer -> Controls.

那么,我真的需要在我的框架中添加一个顶级 sizer, 面板之前吗?

注意:wxPanel 的唯一目的是为我的 window 提供浅灰色背景。

Edit 事实上,如果面板是框架的第一个也是唯一的子控件,我只会得到我想要的(整个 window 的浅色背景)。

不,您不需要面板的 sizer,因为 wxFrame 自动调整它的大小 只有 child 来填充它的整个客户区域,只是因为这种情况很常见。

wxPanel 的目的不仅是为您提供 "correct" 背景,而且还为您的控件提供正确的键盘导航。它与 wxFrame 分离的原因是某些框架不包含控件,但用作例如画布,在这种情况下面板将是不必要的。

最后,不要混淆:sizer 是 不是 控件,它们与 window 相关联,并且反过来包含(某些)window child人,但不自控。