wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序,添加好头文件的依赖与lib库文件的依赖,修改属性:

wxwidgets Ribbon构建多个page与按钮响应_第1张图片

 将进入ribbon界面的文件与主界面的类分开:

1、RibbonSample.cpp


#include "stdafx.h"
#include "MyFrame.h"

class MyApp : public wxApp
{
public:
    bool OnInit() wxOVERRIDE;
};

wxDECLARE_APP(MyApp);
wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{
    if (!wxApp::OnInit())
        return false;

    wxFrame* frame = new MyFrame(wxT("Ribbon Sample"));
    frame->Show();

    return true;
}
2、MyFrame.h

#pragma once

#include
#include "wx/wxprec.h"
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/textctrl.h"
#include "wx/ribbon/bar.h"
#include "wx/ribbon/buttonbar.h"
#include "wx/ribbon/gallery.h"
#include "wx/ribbon/toolbar.h"
#include "wx/sizer.h"
#include "wx/menu.h"
#include "wx/msgdlg.h"
#include "wx/dcbuffer.h"
#include "wx/colordlg.h"
#include "wx/artprov.h"
#include "wx/combobox.h"
#include "wx/tglbtn.h"
#include "wx/wrapsizer.h"

class MyFrame : public wxFrame
{
public:
    MyFrame(const wxString& title);
    ~MyFrame(){};

    void OnEnableUpdated(wxRibbonButtonBarEvent& evt);
    void OnEnableUpdateUI(wxUpdateUIEvent& evt);

    wxDECLARE_EVENT_TABLE();
};

3、MyFrame.cpp

#include "stdafx.h"
#include "MyFrame.h"

#define ID_SMALL_BUTTON_1 1000
#define ID_REMOVE_PAGE 1001
#define ID_MAIN_TOOLBAR 1002
#define ID_SELECTION_EXPAND_V 1003

wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_RIBBONBUTTONBAR_CLICKED(ID_REMOVE_PAGE, MyFrame::OnEnableUpdated)
EVT_UPDATE_UI(ID_REMOVE_PAGE, MyFrame::OnEnableUpdateUI)
wxEND_EVENT_TABLE()

MyFrame::MyFrame(const wxString& title)
        : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600))
    {
        wxRibbonBar* mainMenu = new wxRibbonBar(this, -1, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_FLOW_HORIZONTAL
            | wxRIBBON_BAR_SHOW_PAGE_LABELS
            | wxRIBBON_BAR_SHOW_PANEL_EXT_BUTTONS
            | wxRIBBON_BAR_SHOW_TOGGLE_BUTTON
            | wxRIBBON_BAR_SHOW_HELP_BUTTON
            );

        wxRibbonPage* home = new wxRibbonPage(mainMenu, wxID_ANY, "Examples");
        {
            wxRibbonPanel* panel = new wxRibbonPanel(home, wxID_ANY, "Button bar manipulation");
            wxRibbonButtonBar* bar = new wxRibbonButtonBar(panel, wxID_ANY);
            bar->AddButton(ID_REMOVE_PAGE, "Remove", wxArtProvider::GetBitmap(wxART_DELETE, wxART_OTHER, wxSize(32, 32)));

            wxRibbonPanel *selection_panel = new wxRibbonPanel(home, wxID_ANY, "Selection");
            wxRibbonButtonBar *selection = new wxRibbonButtonBar(selection_panel);
            selection->AddButton(ID_SELECTION_EXPAND_V, "Expand Vertically", wxArtProvider::GetBitmap(wxART_COPY, wxART_OTHER, wxSize(32, 32)));
        }

        wxRibbonPage* scheme = new wxRibbonPage(mainMenu, wxID_ANY, "Appearance");
        {
            wxRibbonPanel *provider_panel = new wxRibbonPanel(scheme, wxID_ANY,
                "Art", wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_NO_AUTO_MINIMISE);
            wxRibbonButtonBar *provider_bar = new wxRibbonButtonBar(provider_panel, wxID_ANY);
            provider_bar->AddButton(ID_REMOVE_PAGE, "Default Provider",
                wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)));
        }

        mainMenu->Realize();
        wxSizer *s = new wxBoxSizer(wxVERTICAL);
        s->Add(mainMenu, 0, wxEXPAND);

        SetSizer(s);

        Centre();
    }

void MyFrame::OnEnableUpdated(wxRibbonButtonBarEvent& evt)
{
    wxMessageBox("点击了按钮", "提示框");
}

void MyFrame::OnEnableUpdateUI(wxUpdateUIEvent& evt)
{
    evt.Enable(true);
}

展示效果图如下所示:

wxwidgets Ribbon构建多个page与按钮响应_第2张图片

 wxwidgets Ribbon构建多个page与按钮响应_第3张图片

你可能感兴趣的:(c++,wxwidgets,ribbon,wxwidgets)