我正在尝试在面板中绘制我的wxGLCanvas并填充面板区域,但结果如下图所示。我让OpenGL立方体样本运行正常,但在该示例中,wxGLCanvas是wxFrame的父级。当我尝试将它父级化为wxPanel时,我得到一小部分面板显示我的wxGLCanvas。
红色框应填充图像中的面板。 这是我的窗口的构造函数,它创建了图像中的所有内容。
wxBEGIN_EVENT_TABLE(MainWindow, wxFrame)
EVT_MENU(wxID_NEW, MainWindow::OnNewWindow)
EVT_MENU(wxID_CLOSE, MainWindow::OnClose)
wxEND_EVENT_TABLE()
MainWindow::MainWindow()
: wxFrame(NULL, wxID_ANY, wxT("OpenGL Project Test"),
wxDefaultPosition,wxDefaultSize)
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
m_statusBar1 = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
m_menubar1 = new wxMenuBar( 0 );
m_menu1 = new wxMenu();
m_menubar1->Append( m_menu1, wxT("MyMenu") );
m_menu2 = new wxMenu();
m_menubar1->Append( m_menu2, wxT("MyMenu") );
m_menu3 = new wxMenu();
m_menubar1->Append( m_menu3, wxT("MyMenu") );
m_menu4 = new wxMenu();
m_menubar1->Append( m_menu4, wxT("MyMenu") );
this->SetMenuBar( m_menubar1 );
m_toolBar4 = this->CreateToolBar( wxTB_HORIZONTAL, wxID_ANY );
m_tool1 = m_toolBar4->AddTool( wxID_ANY, wxT("tool"), wxNullBitmap, wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
m_toolBar4->Realize();
wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer( wxHORIZONTAL );
// ######### Here is where I try to set the panel as a parent of MyGLCanvas ##########
m_panel2 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE );
bSizer1->Add( m_panel2, 1, wxEXPAND | wxALL, 5 );
MyGLCanvas * glCanvas = new MyGLCanvas(m_panel2);
m_ribbonBar2 = new wxRibbonBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_FLOW_VERTICAL );
m_ribbonBar2->SetArtProvider(new wxRibbonDefaultArtProvider);
m_ribbonPage8 = new wxRibbonPage( m_ribbonBar2, wxID_ANY, wxT("MyRibbonPage") , wxNullBitmap , 0 );
m_ribbonPage8->SetMinSize( wxSize( 400,400 ) );
m_ribbonPanel16 = new wxRibbonPanel( m_ribbonPage8, wxID_ANY, wxT("MyRibbonPanel") ,wxBitmap() , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE );
m_ribbonButtonBar7 = new wxRibbonButtonBar( m_ribbonPanel16, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonButtonBar7->AddButton( wxID_ANY, wxT("MyRibbonButton"), wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonPanel17 = new wxRibbonPanel( m_ribbonPage8, wxID_ANY, wxT("MyRibbonPanel") , wxNullBitmap , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE );
m_ribbonToolBar2 = new wxRibbonToolBar( m_ribbonPanel17, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar2->AddTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonPanel18 = new wxRibbonPanel( m_ribbonPage8, wxID_ANY, wxT("MyRibbonPanel") , wxNullBitmap , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE );
m_ribbonToolBar3 = new wxRibbonToolBar( m_ribbonPanel18, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_ribbonToolBar3->AddDropdownTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar3->AddHybridTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar3->AddHybridTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar3->AddHybridTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonToolBar3->AddDropdownTool( wxID_ANY, wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)), wxEmptyString);
m_ribbonBar2->Realize();
bSizer1->Add( m_ribbonBar2, 0, wxALL, 5 );
this->SetSizer( bSizer1 );
this->Layout();
this->Centre( wxBOTH );
Show();
}
这让我感到困惑
m_panel2 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE );
bSizer1->Add( m_panel2, 1, wxEXPAND | wxALL, 5 );
MyGLCanvas * glCanvas = new MyGLCanvas(m_panel2);
答案 0 :(得分:1)
你永远不会指明你的glCanvas
应该如何布局 - 所以事实并非如此。最简单的解决方案是为面板使用sizer,并将画布添加到此sizer中,比例为1并展开标记。