Подгонка большой сетки (wxGrid) в диалоге (wxDialog) - PullRequest
0 голосов
/ 20 мая 2011

Вот мой макет:

  • У меня есть классификатор, который содержит сетку (с пропорцией 1) и панель кнопок ОК / Отмена

  • Все это в wxDialog

Вот оно:

|||||||||||||||
|             |
|    GRID     |
|             |
|             |
|             |
|||||||||||||||
| OK  CANCEL  |
|||||||||||||||

Проблема в том, что сетка содержит слишком много строк и переполняет экран, поэтому в конце я не вижу верхней части диалога. Есть ли способ при вызове Fit () в диалоговом окне ограничить его высоту?

Я пробовал что-то вроде этого: SetSizeHints(-1,-1,-1,500); и SetMaxSize(500,500), но это не сработало.

Также я пытался это сделать: this->SetSize(this->GetSize().GetX(), 500);, но поскольку вертикальная полоса прокрутки появляется на сетке, она недостаточно широка и появляется горизонтальная полоса прокрутки.

EDIT

В конструкторе я звоню wxGrid(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)

1 Ответ

2 голосов
/ 26 мая 2011

Самый простой способ справиться с этим - использовать сетку фиксированного размера. Если строк больше, чем уместится, появится полоса прокрутки. Вы устанавливаете нужный размер в конструкторе.

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 ));
}
...