【问题标题】:wxWidgets painting wxGLCanvas on a wxPanelwxWidgets 在 wxPanel 上绘制 wxGLCanvas
【发布时间】:2014-10-12 08:04:16
【问题描述】:

我正在尝试在面板中绘制我的 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);

【问题讨论】:

    标签: c++ opengl user-interface wxwidgets


    【解决方案1】:

    您永远不会指定您的glCanvas 应该如何布局——所以它不是。最简单的解决方案是为面板使用一个sizer,并将画布添加到这个sizer,比例为1并展开标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多