使用wxSizer,wxSashWindow进行GUI布局

时间:2014-08-27 04:47:12

标签: c++ wxwidgets codeblocks

我试图创建一个窗口,在主窗口中将其拆分为2,3,4等etcc不同的可调整大小的视图,我想在C :: B中使用wxWidgets实现它。实际上,画布本身会按照请求的数字分割窗口,但它不会在视图边框上放置任何窗扇,因此很难注意哪个视图从哪里开始到哪里结束。

我在运行时创建了所有东西,我正计划将窗框或面板放在视图的边界周围,并希望在我的情况下工作,但主框架不愿放置面板,并且sashwidnwos在正确的位置并停止处理OnSize事件。如果我在调整大小期间使用sizer和面板添加以下代码,那么以前的工作代码将无法正常运行。

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

1 个答案:

答案 0 :(得分:0)

请在下面找到带有wxSashLayoutWindow的MDI表单的基本示例:

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

作出反应