Подгонка большой сетки (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 ));
}
Другие вопросы по тегам