Вы не предоставили никакой информации о версии wxWidgets или вашей платформе/компиляторе, поэтому я отвечу на wxWidgets 2.8 и MSW.
Указанный размер не обязательно используется для управления, так как лучший размер для разных платформ может отличаться. Даже в Windows размер обычно зависит от шрифта GUI по умолчанию. Таким образом, в wxWidgets существуют различные методы, которые позволяют Windows определять их минимальный, лучший или максимальный размер. Если у вас есть особые требования, вам может потребоваться переопределить некоторые из них.
Для вашей проблемы он выглядит, как вы хотите, чтобы иметь контроль имеет меньший размер, чем лучший размер по умолчанию 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
в источниках.
+1 и спасибо за указание ширины и высоты по умолчанию. Поскольку я получаю вывод из wxControl, я не могу переопределить DoGetBestSize(), поскольку он не является виртуальным в wxControl – Ranjith
Спасибо за устранение сомнений – Ranjith