Подгонка большой сетки (wxGrid) в диалоге (wxDialog)
Вот мой макет:
У меня есть sizer, который содержит сетку (с пропорцией 1) и панель кнопок ОК / Отмена
Все это в wxDialog
Вот:
|||||||||||||||
| |
| GRID |
| |
| |
| |
|||||||||||||||
| OK CANCEL |
|||||||||||||||
Проблема в том, что сетка содержит слишком много строк и переполняет экран, поэтому в итоге я не вижу верхней части диалога. Есть ли способ при вызове Fit() в диалоге, чтобы ограничить его высоту?
Я пробовал такие вещи, как это: SetSizeHints(-1,-1,-1,500);
а также SetMaxSize(500,500)
но это не сработало.
Также я попытался сделать это: this->SetSize(this->GetSize().GetX(), 500);
, но поскольку вертикальная полоса прокрутки появляется на сетке, она недостаточно широка и появляется горизонтальная полоса прокрутки.
РЕДАКТИРОВАТЬ
В конструкторе я звоню wxGrid(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)
1 ответ
Самый простой способ справиться с этим - использовать сетку фиксированного размера. Если строк больше, чем уместится, появится полоса прокрутки. Вы устанавливаете нужный размер в конструкторе.
new wxGrid( this, IDC_grid, wxPoint(-1,-1),wxSize(igridxsize,igridysize));
Если вы хотите, чтобы размер сетки корректировался, например, когда пользователь изменяет размер окна приложения, все немного сложнее. Вам нужно обработать событие размера окна и соответствующим образом изменить размер сетки.
Что-то вроде этого:
myDialog::OnSize(wxSizeEvent& event);
{
wxSize dialogSize = event.GetSize();
myGrid->OnSize( wxSizeEvent(
dialogSize.GetWidth() * 0.9, dialogSize.GetHeight() * 0.7 ));
}