C++ 带有wxSizer、wxSashWindow的GUI布局
我试图在mainwindow中创建一个窗口,该窗口被拆分为2、3、4个etcc不同的可调整大小的视图,我想用C::B中的wxWidgets来实现它。实际上,画布本身按照请求的数量拆分窗口,但是它没有在视图的边界上放置任何窗框,因此很难注意到哪个视图从哪里开始,在哪里结束 我在运行时创建所有内容,并计划在视图边界周围放置窗扇或面板,希望在我的情况下也能工作,但主框架不愿意将面板和窗扇放置在正确的位置,并停止处理OnSize事件。这是以前的工作代码是不能正常工作,如果我添加以下代码与大小调整和面板期间C++ 带有wxSizer、wxSashWindow的GUI布局,c++,wxwidgets,codeblocks,C++,Wxwidgets,Codeblocks,我试图在mainwindow中创建一个窗口,该窗口被拆分为2、3、4个etcc不同的可调整大小的视图,我想用C::B中的wxWidgets来实现它。实际上,画布本身按照请求的数量拆分窗口,但是它没有在视图的边界上放置任何窗框,因此很难注意到哪个视图从哪里开始,在哪里结束 我在运行时创建所有内容,并计划在视图边界周围放置窗扇或面板,希望在我的情况下也能工作,但主框架不愿意将面板和窗扇放置在正确的位置,并停止处理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);
请查看以下MDI表单的基本示例:
为了有一个完全工作的窗扇窗口,您的框架必须根据代码作出反应,我应该在同一个MDI中看到黄色和绿色的背景窗口,但这不会发生。@SonyaBlade您看到了什么?您使用哪个版本的wxWidgets?你的平台是什么?以下是我看到的,wxWidgets 3.0.1;Win64;C::B 13.12;MinGW 4.7.1;具有Nvidia GeForce 610M图形card@SonyaBlade我用gtk2库在Linuxx64上测试了这个。另一个想法——这里是wxWidgets存储库中的一个示例应用程序。请检查:
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;
}