C++ Wxwidgets。如何检查wxauinotebook页面是否已打开/添加

C++ Wxwidgets。如何检查wxauinotebook页面是否已打开/添加,c++,wxwidgets,C++,Wxwidgets,我在使用wxauinotebook和ribbon时遇到问题,我的问题是我想使用ribbon按钮添加笔记本页面,但在页面打开之前,我想检查页面是否已打开。如果页面未打开,页面将被添加,如果是,页面将被选中/激活。 这是我的代码: 框架.h 使用以下代码可以解决此问题: #ifndef FRAME_H #define FRAME_H #include <wx/wx.h> #include <wx/aui/aui.h> #include <wx/ribbon/bar.h

我在使用wxauinotebook和ribbon时遇到问题,我的问题是我想使用ribbon按钮添加笔记本页面,但在页面打开之前,我想检查页面是否已打开。如果页面未打开,页面将被添加,如果是,页面将被选中/激活。 这是我的代码: 框架.h


使用以下代码可以解决此问题:

#ifndef FRAME_H
#define FRAME_H

#include <wx/wx.h>
#include <wx/aui/aui.h>
#include <wx/ribbon/bar.h>
#include <wx/ribbon/buttonbar.h>
#include <wx/artprov.h>

class MainFrame : public wxFrame
{
public:
    MainFrame(const wxString& title);

    // Destructor
    virtual ~MainFrame();

private:
    long notebookStyle;
    wxAuiNotebook* ctrl;

    // ribbon
    wxRibbonBar* appRibbon;
    wxRibbonPage* appHome;
    wxRibbonPanel* homePanel;
    wxRibbonPanel* dataItem;
    wxRibbonButtonBar* home;
    wxRibbonButtonBar* item;

private:
    void OnQuit(wxCommandEvent& WXUNUSED(event));
    void OnAbout(wxCommandEvent& WXUNUSED(event));
    void OnHomeClicked(wxRibbonButtonBarEvent& event);

private:
    wxDECLARE_EVENT_TABLE();

    enum
    {
        BUTTONBAR_home = wxID_HIGHEST + 1
    };
};

#endif // FRAME
#include "Frame.h"

MainFrame::MainFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(900, 700), wxDEFAULT_FRAME_STYLE | wxSUNKEN_BORDER)
{
    // Ribbon
    appRibbon = 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
                                );
    appHome = new wxRibbonPage(appRibbon, wxID_ANY, wxT("Master Data"), wxNullBitmap);

    //appHome = new wxRibbonPage(appRibbon, wxID_ANY, wxT("Master Data"),
                               //wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, wxART_TOOLBAR, wxSize(16,15)));

    homePanel = new wxRibbonPanel(appHome, wxID_ANY, wxT("Home"), wxNullBitmap,
                                   wxDefaultPosition, wxDefaultSize,
                                   wxRIBBON_PANEL_NO_AUTO_MINIMISE);
    home = new wxRibbonButtonBar(homePanel);
    home->AddButton(BUTTONBAR_home, wxT("Home Menu"),
                    wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, wxART_TOOLBAR, wxSize(16,15)));

    dataItem = new wxRibbonPanel(appHome, wxID_ANY, wxT("Data Item"),
                                    wxNullBitmap, wxDefaultPosition, wxDefaultSize,
                                    wxRIBBON_PANEL_NO_AUTO_MINIMISE);
    item = new wxRibbonButtonBar(dataItem);
    item->AddButton(wxID_ANY, wxT("Daftar Guru"),
                    wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
    item->AddButton(wxID_ANY, wxT("Tambah Guru"),
                    wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
    item->AddButton(wxID_ANY, wxT("Daftar Siswa"),
                    wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
    item->AddButton(wxID_ANY, wxT("Tambah Siswa"),
                    wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));

    new wxRibbonPage(appRibbon, wxID_ANY, wxT("Empty Page"), wxNullBitmap);

    appRibbon->AddPageHighlight(appRibbon->GetPageCount() - 1);
    appRibbon->Realize();

    // set style msw provider
    appRibbon->DismissExpandedPanel();
    appRibbon->SetArtProvider(new wxRibbonMSWArtProvider);


    // aui notebook
    notebookStyle = wxAUI_NB_CLOSE_BUTTON | wxAUI_NB_SCROLL_BUTTONS;

    wxSize client_size = GetClientSize();

    ctrl = new wxAuiNotebook(this, wxID_ANY,
                                    wxPoint(client_size.x, client_size.y),
                                    wxSize(430,200),
                                    notebookStyle);
    ctrl->Freeze();
    wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));

    ctrl->AddPage(new wxTextCtrl( ctrl, BUTTONBAR_home, wxT("Some text"),
                wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Home"), false, page_bmp);
    ctrl->AddPage(new wxTextCtrl( ctrl, wxID_ANY, wxT("Some text"),
                wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Item 1"), false, page_bmp);
    ctrl->SetPageToolTip(0, "Menu utama sistem informasi akademik");
    ctrl->Thaw();

    // set to sizer
    wxSizer* s = new wxBoxSizer(wxVERTICAL);
    s->Add(appRibbon, 0, wxEXPAND);
    s->Add(ctrl, 1, wxEXPAND);
    SetSizer(s);

    Centre();
}

BEGIN_EVENT_TABLE(MainFrame, wxFrame)
    EVT_RIBBONBUTTONBAR_CLICKED(BUTTONBAR_home, MainFrame::OnHomeClicked)
END_EVENT_TABLE()

void MainFrame::OnHomeClicked(wxRibbonButtonBarEvent& event)
{
    // What code in here??
    // The page item 1 already openned.

    // if not open, I want run this code:
    //ctrl->AddPage(new wxTextCtrl( ctrl, wxID_ANY, wxT("Some text"),
                //wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Item 1"), false, page_bmp);
    // if not I want the page is active.
}

MainFrame::~MainFrame() {}
void MainFrame:::OnHomeClicked(wxRibbonButtonBarEvent& event)
{
    // sum all page
    int pageCount = ctrl->GetPageCount();
    // set the page exist false
    bool isExist = false;
    // checking the page
    for (int i = 0; i < pageCount; i++) {
        // if the page already exist, so open/focus the page
        if (ctrl->GetPageText(i).Lower() == "item 1") {
            ctrl->SetSelection(i);
            isExist = true;
            break;
        }
    }
    // if page not exist, create new page
    if(!isExist) {
        wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
        ctrl->AddPage(CreateHTMLCtrl(ctrl), wxT("Item 1"), true, page_bmp );
    }
}