我使用wxauinotebook和功能区有问题,我的问题是我想使用功能区按钮添加笔记本页面但在页面打开之前,我想检查页面是否已经打开。如果页面未打开,将添加页面,如果是,则页面将被选中/激活。
这是我的代码:
的 Frame.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
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() {}
答案 0 :(得分:0)
使用此代码(来自this link)解决问题:
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 );
}
}