Вы не предоставили никакой информации о версии 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()
, чтобы вернуть желаемый размер, он должен работать.
Edit:
Вы комментируете, что не можете переопределить 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
в источниках покажет вам.