【问题标题】:GUI layout with wxSizer, wxSashWindow带有 wxSizer、wxSashWindow 的 GUI 布局
【发布时间】:2014-08-27 04:47:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ wxwidgets codeblocks


    【解决方案1】:

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

    【讨论】:

    • 根据代码我应该在同一个 MDI 中看到黄色和绿色背景的窗口,但它没有发生。
    • @SonyaBlade 那你看到了什么?您使用哪个版本的 wxWidgets?你的平台是什么?
    • tinypic.com/r/2a3ygy/8 这是我看到的,wxWidgets 3.0.1;赢64; C::B 13.12 ; MinGW 4.7.1;拥有 Nvidia GeForce 610M 显卡
    • @SonyaBlade 我使用 gtk2 库在 Linux x64 上对此进行了测试。另一个想法 - 这是来自 wxWidgets 存储库的示例应用程序。请查收:svn.wxwidgets.org/viewvc/wx/wxWidgets/trunk/samples/sashtest
    猜你喜欢
    • 2021-12-22
    • 2013-09-08
    • 2013-02-14
    • 2011-09-12
    • 1970-01-01
    • 2018-05-03
    • 2011-12-29
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多