wxWigets не может передавать события (или что-либо еще) изнутри wxGridSizer, если есть панель или wxScrolledWindow - PullRequest
0 голосов
/ 10 июля 2019

В wxWidgets 3.0.4, скомпилированном с Visual-C ++ 2010 Express.В основном фрейме, если я создаю wxGridSizer напрямую и добавляю в sizer, он работает нормально, но если вместо этого wxBoxSizer -> wxScrolledWindow -> wxGridSizer, он не взаимодействует ни с чем внутри, включая события.

Все началось спанель внутри wxBoxSizer, которую вы вставляете столько, сколько вам нужно (прежде чем вы увидите, сколько столбцов / строк необходимо).Идея состоит в том, чтобы wxScrolledWindow позаботился, если он не помещается на одном экране.Я перепробовал много-много вещей и заглянул в интернет.Чтобы упростить и до минимума, который показывает поведение, я покажу код внутри фрейма (с меню и меню, которые я не показываю, чтобы указать на проблему), который добавляет флажок, самое простое, что я могу придумать.Нет подключений, нет ничего, чтобы флажок.Без wxScrolledWindow вы можете проверить это, с wxScrolledWindow вы не можете.Я попытался с панелью вместо wxScrolledWindow, с событиями, с большим количеством вещей .. и такое же поведение.Любая идея?Заранее спасибо.

РАБОТАЕТ:

    grid = new wxGridSizer( 3, 2, 0, 0 );  //declared in the class
    wxCheckBox *prueba_cbox = new wxCheckBox( this, wxID_ANY, wxT("Check Me!"), wxDefaultPosition, wxDefaultSize, 0 );
    grid->Add( prueba_cbox, 0, wxALL, 5 );
    grid->Fit(this);
    this->SetSizer(grid);
    this->Layout();
    this->Centre( wxBOTH );

НЕ РАБОТАЕТ:

    misizer = new wxBoxSizer(wxHORIZONTAL);
    wxScrolledWindow* miscroll = new wxScrolledWindow(this, wxID_ANY);
    miscroll->SetScrollRate( 0, 16 );
    misizer->Add(miscroll, 1, wxALL | wxEXPAND, 0);

    grid = new wxGridSizer( 3, 2, 0, 0 );

    wxCheckBox *prueba_cbox = new wxCheckBox( this, wxID_ANY, wxT("Check Me!"), wxDefaultPosition, wxDefaultSize, 0 );
    grid->Add( prueba_cbox, 0, wxALL, 5 );
    grid->Fit( miscroll );
    miscroll->SetSizer( grid );

    misizer->Fit(this);
    this->SetSizer( misizer );
    misizer->Layout();
    this->Layout();
    this->Centre( wxBOTH );

Еще, в: "misizer-> Add (miscroll, 1, wxALL)| wxEXPAND, 0); "

Зависит от границы, с 10 или более работами, с 5 или менее не работает.В этом простом примере;при фактическом размещении панелей внутри события не работают даже с границей 120.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

wxCheckBox * prueba_cbox = new wxCheckBox (this, wxID_ANY, wxT («Проверьте меня!»), WxDefaultPosition, wxDefaultSize, 0);

должен быть дитем нехорошего, а не этого (фрейма).

Спасибо (и извините за глупый вопрос)

0 голосов
/ 10 июля 2019

AFAIU вы хотите иметь следующий макет:

wxFrame -> wxBoxSizer -> wxScrolledWindow -> wxGridSizer -> wxCheckBox

Пока этонет ничего плохого в wxGridSizer, но в родительском элементе prueba_cbox, который должен быть miscroll вместо this.

...