带有wxSizer、wxSashWindow的GUI布局

GUI layout with wxSizer, wxSashWindow

本文关键字:GUI 布局 wxSashWindow wxSizer 带有      更新时间:2023-10-16

我正在尝试创建一个窗口,它在主窗口中被拆分为2、3、4等不同的可调整大小的视图,我想用C::B中的wxWidgets来实现它。事实上,画布本身按要求的数量分割窗口,但它没有在视图的边界上放置任何窗框,因此很难注意到哪个视图从哪里开始,在哪里结束。

我在运行时创建了所有东西,我计划在视图边界周围放置窗扇或面板,并希望在我的情况下工作,但主框架不愿意放置面板,窗扇在正确的位置,并停止处理OnSize事件。如果我在调整大小的过程中添加以下带有sizer和panels的代码,这就是以前工作的代码无法正常工作。

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

请在下面找到带有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 做出反应