您没有提供有关 wxWidgets 版本或您的平台/编译器的任何信息,所以我将回答 wxWidgets 2.8 和 MSW。
您指定的尺寸不一定用于控件,因为不同平台的最佳尺寸可能不同。即使在 Windows 上,大小通常也取决于默认的 GUI 字体。因此在 wxWidgets 中有多种方法可以让窗口指定它们的最小、最佳或最大尺寸。如果您有特殊要求,您可能需要覆盖其中的一些要求。
对于您的问题,您似乎希望控件的大小小于默认的最佳大小wxControl
:
wxSize wxControl::DoGetBestSize() const
{
return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT);
}
(取自src/msw/control.cpp
)与值
#define DEFAULT_ITEM_WIDTH 100
#define DEFAULT_ITEM_HEIGHT 80
(取自include/wx/msw/private.h
)。
如果您覆盖DoGetBestSize()
以返回您的预期大小,它应该可以工作。
编辑:
您评论说您不能覆盖DoGetBestSize()
,因为它不是虚拟的wxControl
。但是,因为它是在以下内容中引入的wxWindow
:
// get the size which best suits the window: for a control, it would be
// the minimal size which doesn't truncate the control, for a panel - the
// same size as it would have after a call to Fit()
virtual wxSize DoGetBestSize() const;
(取自include/wx/window.h
)。wxWindow
是 的父类wxControl
,因此该方法确实是虚拟的,您当然可以覆盖它。事实上,许多控件确实如此,正如grep
来源中的 a 将向您展示的那样。