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

Wxwidgets. How to check wxauinotebook page has been opened/added

本文关键字:是否 添加 wxauinotebook 何检查 检查 Wxwidgets      更新时间:2023-10-16

我在使用 wxauinotebook 和功能区时遇到问题,我的问题是我想使用功能区按钮添加笔记本页面,但在页面打开之前,我想检查页面是否已打开。如果页面未打开,则将添加该页面,如果是,则将选择/活动该页面。这是我的代码:
帧.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

框架.cpp

#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 );
    }
}