wxRibbon显示但不刷新或回复

时间:2015-10-17 06:04:09

标签: wxwidgets

从旧式菜单中,我正在尝试切换到色带。我有一个wxMDIParentFrame,它有两个主要的孩子。这是我尝试切换到色带。

代码:

this->SetSizeHints( wxDefaultSize, wxDefaultSize );
m_StatusBar = this->CreateStatusBar( 2, wxST_SIZEGRIP, wxID_ANY );
wxMenuBar* m_MenuBar = new wxMenuBar( 0 ); //looks nonsense but I am getting warning messages because MDIParentFrame automatically adds a window menu
this->SetMenuBar(m_MenuBar);

wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer( wxVERTICAL );

m_ribbonBar = new wxRibbonBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_DEFAULT_STYLE );
m_ribbonBar->SetArtProvider(new wxRibbonDefaultArtProvider);
m_RibbonPage_Home = new wxRibbonPage( m_ribbonBar, wxID_ANY, wxT("Home") ,  wxBitmap( wxT("images/icons/open.bmp"), wxBITMAP_TYPE_ANY ) , 0 );
m_ribbonPanelHome = new wxRibbonPanel( m_RibbonPage_Home, wxID_ANY, wxT("Document") , wxNullBitmap , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE );
m_ribbonButtonBarDocument = new wxRibbonButtonBar( m_ribbonPanelHome, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_ribbonButtonBarDocument->AddButton( wxID_ANY, wxT("Open"), wxBitmap( wxT("images/icons/open.bmp"), wxBITMAP_TYPE_ANY ), wxEmptyString);
    m_ribbonPageTools = new wxRibbonPage( m_ribbonBar, wxID_ANY, wxT("Tools") , wxNullBitmap , 0 );
m_ribbonBar->SetActivePage( m_ribbonPageTools );
m_ribbonPanelProcessEngTools = new wxRibbonPanel( m_ribbonPageTools, wxID_ANY, wxT("Process Engineering Tools") ,  wxBitmap( wxT("images/icons/open.bmp"), wxBITMAP_TYPE_ANY ) , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE );
m_ribbonButtonBar2 = new wxRibbonButtonBar( m_ribbonPanelProcessEngTools, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
    m_ribbonButtonBar2->AddButton( wxID_ANY, wxT("Unit Convertor"),  wxBitmap( wxT("images/icons/open.bmp"), wxBITMAP_TYPE_ANY ), wxEmptyString);

m_ribbonBar->Realize();


    // Connect Events
    this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( myFrame::mainFrameOnClose ) );
    this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( myFrame::mainFrameOnIconize ) );
    this->Connect( wxEVT_IDLE, wxIdleEventHandler( myFrame::mainFrameOnIdle ) );
    this->Connect( wxID_ANY, wxEVT_COMMAND_RIBBONBAR_HELP_CLICKED, wxRibbonBarEventHandler( myFrame::OnRibbonBarHelpClick ) );
    this->Connect( wxID_ANY, wxEVT_COMMAND_RIBBONBAR_TAB_RIGHT_UP, wxRibbonBarEventHandler( myFrame::OnRibbonBarTabRightUp ) );
    this->Connect( wxID_ANY, wxEVT_COMMAND_RIBBONBAR_TOGGLED, wxRibbonBarEventHandler( myFrame::OnRibbonBarToggled ) );
    this->Connect( wxID_ANY, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler( myFrame::OpenOnRibbonButtonClicked ) );
    this->Connect( wxID_ANY, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler( myFrame::UCOnRibbonButtonClicked ) );


    #if wxUSE_STATUSBAR
    m_StatusBar->SetStatusText(_("Welcome..."), 0);
    m_StatusBar->SetStatusText(_(""), 1);
    #endif
    m_frmCmdWindow=new frmCommandWindow(this); //wxMDIChildFrame
    //m_frmCmdWindow->Show(true);

    m_frmICell=CreateFrmICell(this); //wxMDIChildFrame
    //m_frmICell->Show(true);
    int height=0, width=0;
    wxDisplaySize(&width,&height);
    this->SetSize(width,height);
    this->Tile();

    bSizer1->Add( m_ribbonBar, 0, wxALL|wxEXPAND, 5 );
    this->SetSizer( bSizer1 );
    this->Centre( wxBOTH );

色带的外观看起来很正常,但以下是问题: 1)我无法与功能区上的任何按钮进行交互 2)它不刷新(不重绘)。

*功能区就在那里,好像有一张照片被绘制,当我显示任何子帧时,功能区消失了。

3)wxMDIParentFrame有一个自动窗口菜单附加到菜单栏以管理其子窗口。如何禁用此窗口菜单以便我可以删除菜单栏。

顺便说一句,我使用的是Windows 10,gcc 4.6.2和wxWidgets 3.0.2。

我可能做错了什么?

提前感谢你!

1 个答案:

答案 0 :(得分:0)

此解决方案适用于我:

void MainFrame::CreateControls()
{    
////@begin MainFrame content construction
    // Generated by DialogBlocks, 18/10/2015 12:17:49 (unregistered)

    MainFrame* itemMDIParentFrame1 = this;

    wxStatusBar* itemStatusBar2 = new wxStatusBar( itemMDIParentFrame1, ID_STATUSBAR, wxST_SIZEGRIP|wxNO_BORDER );
    itemStatusBar2->SetFieldsCount(2);
    itemMDIParentFrame1->SetStatusBar(itemStatusBar2);

////@end MainFrame content construction

    wxBitmap tmp(16, 16);

    m_RibbonBar = new wxRibbonBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_DEFAULT_STYLE);
    m_RibbonBar->SetArtProvider(new wxRibbonDefaultArtProvider);

    auto m_RibbonPage_Home = new wxRibbonPage(m_RibbonBar, wxID_ANY, wxT("Home"), wxNullBitmap, 0);
    auto m_ribbonPageTools = new wxRibbonPage(m_RibbonBar, wxID_ANY, wxT("Tools"), wxNullBitmap, 0);

    auto m_ribbonPanelHome = new wxRibbonPanel(m_RibbonPage_Home, wxID_ANY, wxT("Document"), wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE);
    auto m_ribbonPanelProcessEngTools = new wxRibbonPanel(m_ribbonPageTools, wxID_ANY, wxT("Process Engineering Tools"), wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE);

    auto m_ribbonButtonBar2 = new wxRibbonButtonBar(m_ribbonPanelProcessEngTools, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
    auto m_ribbonButtonBarDocument = new wxRibbonButtonBar(m_ribbonPanelHome, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);

    m_ribbonButtonBarDocument->AddButton(wxID_NEW, wxT("Open"), tmp, wxEmptyString);
    m_RibbonBar->SetActivePage(m_ribbonPageTools);
    m_ribbonButtonBar2->AddButton(wxID_OPEN, wxT("Unit Convertor"), tmp, wxEmptyString);

    auto clientWindow = GetClientWindow();

    wxBoxSizer * sizer = new wxBoxSizer(wxVERTICAL);
    SetSizer(sizer);
    sizer->Add(m_RibbonBar, 0, wxGROW);
    sizer->Add(clientWindow, 1, wxEXPAND);


    m_RibbonBar->Realize();
}

Here is the resulting frame

相关问题