#c #wxwidgets
#c #wxwidgets
Вопрос:
Очень новичок в виджетах, но я пробовал играть самостоятельно и, похоже, не могу изменить размер моей кнопки, которую я создал.
BasicFrame::BasicFrame(const wxChar *title, int xpos, int ypos, int width, int height)
: wxFrame((wxFrame*)NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height))
{
HelloWorld = new wxButton(this, BUTTON_Hello, _T("Hello World"),
// shows a button on this window
wxPoint(70,70), wxSize(30,30), wxBU_EXACTFIT); // with the text "hello World"
}
HelloWorld — это указатель wxButton. Кнопка остается того же размера, что и окно.
Почему я не могу изменить размер моей кнопки с помощью раздела:
wxSize(30,30)
Спасибо
Комментарии:
1. Всегда используйте сайзеры, если у вас нет особой необходимости. Также настоятельно рекомендую программное обеспечение wxFormBuilder.
Ответ №1:
Как объясняется в документации, если окно верхнего уровня имеет ровно один дочерний элемент, его размер будет изменен, чтобы заполнить всю клиентскую область window, потому что это почти всегда то, что вы хотите.
Если вы этого не хотите, вы можете обойти это по-разному, например, создав другой элемент управления (даже невидимый, например, wxStaticText
с пустой меткой), переопределив Layout()
, чтобы ничего не делать в вашем BasicFrame
или, как правило, лучше, создав a wxPanel
как единственный дочерний фрейм, а затем создав вседругие элементы управления как дочерние элементы панели.
В любом случае, как уже упоминалось в комментарии, использование жестко заданных размеров для окон почти всегда является плохой идеей. Использование жестко заданных размеров в пикселях (а не диалоговых блоков или независимых от устройства пикселей) всегда является плохой идеей.
Комментарии:
1. может быть, имеет смысл использовать DIP при работе с положением и размером, передаваемыми элементам управления на основе wxWindow?