【问题标题】:How to make '3 part' splitter window in wxWidgets?如何在 wxWidgets 中制作“3 部分”拆分窗口?
【发布时间】:2011-01-20 18:21:59
【问题描述】:

我想在一个窗口或面板中创建 3 个部分。所有 3 个部分都应该有可能由用户调整大小,并在用户更改主窗口大小时自动调整大小。它类似于将 3 个面板添加到垂直框尺寸器,但用户可以调整所有三个部分的大小。我最多可以向 wxSplitterWindow 添加 2 个面板。

我正在使用 C++、wxWidgets 和 wxFormBuilder。

【问题讨论】:

    标签: c++ layout wxwidgets


    【解决方案1】:

    你能用wxAuiManager吗?

    您可以使用它来创建“面板”(因为没有更好的词),可以调整大小和移动(甚至不停靠和浮动)。对你来说,它看起来像:

    wxAuiManager * pManager; // a pointer to the manager for the wxFrame
    wxWindow * pPanel1;
    wxWindow * pPanel2;   // the 3 panels you want to add
    wxWindow * pPanel3;   // they can be wxPanel's or any window
    
    // Add the panels to the window
    pManager->AddPane(pPanel1,wxAuiPaneInfo().Top());
    pManager->AddPane(pPanel2,wxAuiPaneInfo().Centre());
    pManager->AddPane(pPanel3,wxAuiPaneInfo().Bottom());
    

    希望这对你有用。

    【讨论】:

    • @Piniu:如果它解决了您的问题,请接受答案。否则,请解释什么不起作用。
    【解决方案2】:

    好吧,要使 3 部分分开,您只需制作两个拆分器窗口,其中一个是另一个的子窗口,并执行几乎相同的编码,例如确定分离方向 这是一些代码示例

    spiletterwindowsFrame* frame = new spiletterwindowsFrame(0L, _("wxWidgets Application Template"));
    frame->SetIcon(wxICON(aaaa)); // To Set App Icon
    
    wxSplitterWindow* spltmainv = new wxSplitterWindow(frame ,-1 ,wxPoint(-1,-1) ,wxSize(-1,-1),wxSP_LIVE_UPDATE);
    wxPanel* pnlv = new wxPanel(spltmainv);
    pnlv ->SetBackgroundColour(wxColor(*wxRED));
    
    wxSplitterWindow* spltmainh = new wxSplitterWindow(spltmainv ,-1 ,wxPoint(-1,-1) ,wxSize(-1,-1),wxSP_LIVE_UPDATE);
    wxPanel* pnlh1 = new wxPanel(spltmainh);
    wxPanel* pnlh2 = new wxPanel(spltmainh);
    pnlh1 ->SetBackgroundColour(wxColor(*wxWHITE));
    //pnlh2 ->SetBackgroundColor(wxColor(*wxRED));
    spltmainv ->SplitHorizontally(spltmainh ,pnlv);
    spltmainh ->SplitVertically(pnlh1 ,pnlh2);
    

    【讨论】:

      【解决方案3】:

      以上链接是我的资源流程图的屏幕截图。我在一个 SplitterWindow 中使用了 2 个 SplitterWindow。

      以下链接是我的输出窗口的屏幕截图。

      这是一个基于框架的 Windows 应用程序,在 CodeBlocks 12.11 中使用 wxWidgets 2.8.12

      AppWindow = new wxBoxSizer(wxVERTICAL);
      AppWindow->Add(AppRibbonPane, 0, wxEXPAND | wxALIGN_LEFT | wxALIGN_TOP, 0);
      
      AppMainPane = new wxBoxSizer(wxVERTICAL);
      
      AppMiddlePane = new wxSplitterWindow(this, ID_SPLITTERWINDOW1, wxPoint(0, 20), wxSize(800, 580), wxSP_3D, _T("ID_SPLITTERWINDOW1"));
      AppMiddlePane->SetMinSize(wxSize(20, 20));
      AppMiddlePane->SetMaxSize(wxSize(-1, -1));
      AppMiddlePane->SetToolTip(_("Work Area"));
      AppMiddlePane->SetMinimumPaneSize(20);
      AppMiddlePane->SetSashGravity(0);
      
      SplitterWindow1 = new wxSplitterWindow(AppMiddlePane, ID_SPLITTERWINDOW2, wxPoint(0, 0), wxSize(200, 580), wxSP_3D, _T("ID_SPLITTERWINDOW2"));
      SplitterWindow1->SetMinSize(wxSize(10, 10));
      SplitterWindow1->SetMaxSize(wxSize(-1, -1));
      SplitterWindow1->SetMinimumPaneSize(10);
      SplitterWindow1->SetSashGravity(0);
      
      AuiNotebook1 = new wxAuiNotebook(SplitterWindow1, ID_AUINOTEBOOK1, wxPoint(0, 0), wxSize(200, 290), wxAUI_NB_DEFAULT_STYLE | wxDOUBLE_BORDER);
      AuiNotebook1->SetMinSize(wxSize(-1, 40));
      AuiNotebook1->SetMaxSize(wxSize(800, 580));
      
      ListCtrl1 = new wxListCtrl(AuiNotebook1, ID_LISTCTRL1, wxDefaultPosition, wxSize(200, 290), wxLC_SMALL_ICON | wxLC_ALIGN_LEFT | wxLC_AUTOARRANGE | wxLC_SINGLE_SEL, wxDefaultValidator, _T("ID_LISTCTRL1"));
      ListCtrl1->SetMinSize(wxSize(-1, 40));
      ListCtrl1->SetBackgroundColour(wxColour(240, 255, 210));
      ListCtrl2 = new wxListCtrl(AuiNotebook1, ID_LISTCTRL2, wxDefaultPosition, wxSize(200, 290), wxLC_SMALL_ICON | wxLC_ALIGN_LEFT | wxLC_AUTOARRANGE, wxDefaultValidator, _T("ID_LISTCTRL2"));
      ListCtrl2->SetMinSize(wxSize(-1, 40));
      ListCtrl2->SetBackgroundColour(wxColour(240, 255, 210));
      
      AuiNotebook1->AddPage(ListCtrl1, _("Devices"), false,
                            wxBitmap(wxImage(_T("C:\\Projects\\Matesnap\\Logo\\MateSnap logo 22x19.jpg"))));
      
      AuiNotebook1->AddPage(ListCtrl2, _("Macros"), false,
                            wxBitmap(wxImage(_T("C:\\Projects\\Matesnap\\Logo\\MateSnap logo 22x19.jpg"))));
      
      SplitterWindow2 = new wxSplitterWindow(SplitterWindow1, ID_SPLITTERWINDOW3, wxPoint(0, 0),
                                             wxSize(200, 290), wxSP_3D, _T("ID_SPLITTERWINDOW3"));
      
      SplitterWindow2->SetMinSize(wxSize(10, 10));
      SplitterWindow2->SetMinimumPaneSize(10);
      SplitterWindow2->SetSashGravity(0);
      
      StaticText1 = new wxStaticText(SplitterWindow2, ID_STATICTEXT1, _("Actions"), wxPoint(0, 0), wxSize(200, 20), wxALIGN_CENTRE | wxDOUBLE_BORDER, _T("ID_STATICTEXT1"));
      StaticText1->SetBackgroundColour(wxColour(240, 255, 210));
      
      ListCtrl3 = new wxListCtrl(SplitterWindow2, ID_LISTCTRL3, wxPoint(0, 20), wxSize(200, 270), wxLC_SMALL_ICON | wxLC_ALIGN_LEFT | wxLC_AUTOARRANGE, wxDefaultValidator, _T("ID_LISTCTRL3"));
      ListCtrl3->SetBackgroundColour(wxColour(240, 255, 210));
      

      即使您得到了解决方案,也请看看它,因为它可能对您未来的项目有用。它可能对您有很大帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 2012-03-17
        • 2015-03-13
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        相关资源
        最近更新 更多