Макет GUI с wxSizer, wxSashWindow

0

Я пытаюсь создать окно, которое разделено на 2, 3, 4 etcc различные изменяемые виды в mainwindow, и я хотел бы реализовать это с помощью wxWidgets в C :: B. Фактически сам холст разбивает окна по запрошенным номерам, но он не помещает никаких поясов вдоль границы представлений, поэтому очень сложно заметить, какой вид начинается где и заканчивается где.

Я создаю все во время работы, и я планировал разместить створку или панели вокруг границ взглядов и надеяться на работу в моем случае, но основной кадр неохотно размещает панели, а сашевидные в правильном положении и останавливает обработку OnSize мероприятие. Это ранее рабочие коды не работают должным образом, если я добавлю код ниже с помощью sizers и панелей во время изменения размера.

MainFrame *frame = new MainFrame(NULL, wxT("wxWidgets OSG Sample"),
        wxDefaultPosition, wxSize(width, height));

wxToolBar* toolbar = new wxToolBar(frame, wxID_ANY,wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL);

    //wxSashLayoutWindow* win = new wxSashLayoutWindow(frame, ID_WINDOW_TOP,wxPoint(50,10), wxSize(200, 30),
     //                         wxSW_3D | wxCLIP_CHILDREN);
     wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
     wxPanel* panel = new wxPanel(frame, ID_TBbutton, wxPoint(300,0), wxSize(5,500));
     panel->SetWindowStyle(wxDOUBLE_BORDER);
//   panel->SetStyle(wx_3D)
     wxPanel* panel1 = new wxPanel(frame, ID_TBbutton);
     sizer->Add( panel, 0, wxALL, 0 );
     frame->SetSizer(sizer);             
     frame->SetToolBar(toolbar);
Теги:
codeblocks
wxwidgets

1 ответ

0

Ниже приведен очень простой пример формы MDI с помощью wxSashLayoutWindow:

bool SashWindowTestApp::OnInit()
{
    wxMDIParentFrame* mainFrame = new wxMDIParentFrame(NULL, ID_TEST_FRAME,
                      wxT("Sash window test"), wxPoint(0, 0), wxSize(500, 400),
                      wxDEFAULT_FRAME_STYLE);

    // top window
    wxSashLayoutWindow* topWindow = new wxSashLayoutWindow(mainFrame,
                        ID_WINDOW_TOP, wxDefaultPosition, wxSize(200, 100),
                        wxSW_3D);

    topWindow->SetDefaultSize(wxSize(1000, 100));
    topWindow->SetAlignment(wxLAYOUT_TOP);
    topWindow->SetBackgroundColour(*wxGREEN);
    topWindow->SetSashVisible(wxSASH_BOTTOM, true);

    // bottom window
    wxSashLayoutWindow* bottomWindow = new wxSashLayoutWindow(mainFrame,
                        ID_WINDOW_BOTTOM, wxDefaultPosition, wxSize(200, 200),
                        wxSW_3D);

    bottomWindow->SetDefaultSize(wxSize(1000, 200));
    bottomWindow->SetAlignment(wxLAYOUT_BOTTOM);
    bottomWindow->SetBackgroundColour(*wxYELLOW);
    bottomWindow->SetSashVisible(wxSASH_TOP, true);

    wxLayoutAlgorithm layout;
    layout.LayoutMDIFrame(mainFrame);
    mainFrame->Show(true);
    return true;
}

Чтобы иметь полностью рабочее окно рамы, ваш кадр должен реагировать на EVT_SASH_DRAGGED

  • 0
    Согласно коду, я должен видеть желтые и зеленые фоновые окна в одном и том же MDI, но этого не происходит.
  • 0
    @SonyaBlade Что ты видишь тогда? Какую версию wxWidgets вы используете? Какая у тебя платформа?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню