2015-07-24 3 views
0

Мне нужно иметь 3 панели в рамке, в которой левая панель и правая панель должны быть понятны пользователю, перетаскивая ее влево или вправо. Я сделал это с помощью диспетчера AUI, но я хотел бы сделать то же самое без использования AUI (может быть, sizers). Любые идеи, как достичь этого? Я попытался как показано ниже, но я не могу изменить размер панели.Как создать изменяемые размеры панелей в wxwidgets?

MyFrame1 :: MyFrame1 (wxWindow * Родитель, wxWindowID идентификатор, Const wxString & названия, Const wxPoint & поз, Const wxSize & размера, длинный стиль): wxFrame (родитель, идентификатор, название, позиция, размер, стиль) { this-> SetSizeHints (wxDefaultSize, wxDefaultSize);

wxBoxSizer* bSizer6; 
bSizer6 = new wxBoxSizer(wxHORIZONTAL); 

wxBoxSizer* bSizer7; 
bSizer7 = new wxBoxSizer(wxHORIZONTAL); 

m_panel11 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
bSizer7->Add(m_panel11, 5, wxEXPAND | wxALL, 5); 


bSizer7->Add(0, 0, 1, wxEXPAND, 5); 


bSizer6->Add(bSizer7, 1, wxEXPAND, 5); 

wxBoxSizer* bSizer9; 
bSizer9 = new wxBoxSizer(wxHORIZONTAL); 

m_panel12 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
bSizer9->Add(m_panel12, 1, wxEXPAND | wxALL, 5); 


bSizer6->Add(bSizer9, 1, wxEXPAND, 5); 

wxBoxSizer* bSizer10; 
bSizer10 = new wxBoxSizer(wxHORIZONTAL); 

m_panel13 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
bSizer10->Add(m_panel13, 1, wxEXPAND | wxALL, 5); 


bSizer6->Add(bSizer10, 1, wxEXPAND, 5); 


this->SetSizer(bSizer6); 
this->Layout(); 

this->Centre(wxBOTH); 

}

+0

Этот вопрос может быть уместным: http://stackoverflow.com/questions/25519083/gui-layout-with-wxsizer-wxsashwindow – shawnhcorey

+0

@shawnhcorey: спасибо, что указал на эту ссылку. Но это не совсем то, что я ищу. – StraightCirle

ответ

0
MyFrame1::MyFrame1(wxWindow* parent, wxWindowID id, const wxString& title, 
        const wxPoint& pos, const wxSize& size, long style) : 
     wxFrame(parent, id, title, pos, size, style) 
{ 
    // use a base panel, so that you have the same background colour between controls 
    // (panels in your case) too 
    wxPanel* basePanel = new wxPanel(this); 

    // create your controls; no need to add default values... 
    m_panel11 = new wxPanel(basePanel); 
    m_panel12 = new wxPanel(basePanel); 
    m_panel13 = new wxPanel(basePanel); 

    // create a sizer; one should be enough 
    wxSizer* bSizer = new wxBoxSizer(wxHORIZONTAL); 

    // add your controls to the sizer 
    bSizer->Add(m_panel11, 1, wxEXPAND|wxALL, 5); 
    bSizer->Add(m_panel12, 0, wxEXPAND|wxUP|wxDOWN|wxRIGHT, 5); 
    bSizer->Add(m_panel13, 1, wxEXPAND|wxUP|wxDOWN|wxRIGHT, 5); 
    // if you need different resizing proportion for each panel, read the description 
    // of proportion parameter in wxSizer:Add() docs 

    basePanel->SetSizer(bSizer); 
} 
+0

Привет, благодарю за ваш ответ, я выполнил ваш код в визуальной студии. Я не вижу видимых видимых панелей. – StraightCirle

2

Это походит на то, что вы хотите использовать это wxSplitterWindow. Вы можете найти документацию для этого класса по адресу http://docs.wxwidgets.org/3.0/classwx_splitter_window.html.

+0

Спасибо, Джон, ты прав. Думаю, это невозможно сделать с помощью только панелей. Я использовал вложенное окно сплиттера, чтобы иметь три раздела в кадре. В любом случае. – StraightCirle