Полоса прокрутки wxScrolledWindow не работает

У меня в заявлении есть следующие зависимости от родителей:

введите описание изображения здесь

Проблема в том, что в wxScrolledWindow нет видимой (или работающей) полосы прокрутки.

Код:

wxCollapsiblePane* collpane = new wxCollapsiblePane(this, ID_COLLPANE, "Tiles\t\t\t\t", wxDefaultPosition, wxDefaultSize, wxCP_NO_TLW_RESIZE);
wxSizer* sz = new wxBoxSizer(wxVERTICAL);
sz->Add(collpane,0,wxALIGN_RIGHT,10);
SetSizer(sz);
wxWindow* cPane = collpane->GetPane();
wxSizer* panesz = new wxBoxSizer(wxVERTICAL);
wxBitmap pic("test.bmp",wxBITMAP_TYPE_BMP);
wxScrolledWindow* scr = new wxScrolledWindow(cPane,ID_PANEL,wxDefaultPosition, wxSize(150,300));
scr->SetScrollbars(2,2,10,10);
wxClientDC dc(this);
scr->DoPrepareDC(dc);
panesz->Add( new wxBitmapButton(scr,-1,pic, wxDefaultPosition, wxSize(50,50) ), 1,  wxALIGN_CENTER, 0 );
/* more button adding here */
cPane->SetSizer(panesz);
panesz->SetSizeHints(cPane);

Как я могу заставить полосу прокрутки показывать и прокручивать кнопки?

0

Решение

Чтобы иметь полосы прокрутки, вы должны указать wxScrolledWindow его полный логический (в отличие от возможно меньшего физического) размер с использованием SetVirtualSize() метод. Это можно сделать, просто вызвав его напрямую или связав sizer с прокручиваемым окном, добавив элементы в этот sizer и вызвав FitInside(),

4

Другие решения

В состоянии по умолчанию для отображения полос прокрутки виртуальный размер окна должен быть больше, чем фактический размер окна.

scr->SetVirtualSize(wxSize(2000,2000));

Однако в версии 3.1 этого недостаточно для отображения полос прокрутки. Также необходимо установить скорость прокрутки. (Для меня это похоже на ошибку, так как кажется, что должна быть настройка по умолчанию, которая работает.)

scr->SetScrollRate(1, 1);
1

Вы должны изменить

wxWindow* cPane = collpane->GetPane();
wxSizer* panesz = new wxBoxSizer(wxVERTICAL);
wxBitmap pic("test.bmp",wxBITMAP_TYPE_B ...

Вы должны поставить JPG. После изменения это будет работать точно;) Поверь мне.

0
По вопросам рекламы [email protected]