Tartalomjegyzék
Menük és ezsköztárak
Menüsor
A menüsáv a legtöbb GUI alkalmazás része. A parancsoknak egy csoportját tartalmazza különböző menükbe rendezve. Amíg egy konzolos alkalmazásnál emlékezned kell minden parancsra, itt parancsok logikai csoportokba vannak szedve. Ezek elfogadott szabványok, amelyek lerövidítik egy új program megtanulásának az idejét. Egy menüsáv készítéséhez a wxWidgetsben három dologra van szükségünk. Egy wxMenuBar, egy wxMenu és egy wxMenuItem-re.
Példa az egyszerű menüre
Menükészítés a wxWidget segítségével nagyon egyszerű. Az egész csak néhány sor.
- menu.h
#include <wx/wx.h> #include <wx/menu.h> class SimpleMenu : public wxFrame { public: SimpleMenu(const wxString& title); void OnQuit(wxCommandEvent& event); wxMenuBar *menubar; wxMenu *file; };
- menu.cpp
#include "menu.h" SimpleMenu::SimpleMenu(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180)) { menubar = new wxMenuBar; file = new wxMenu; file->Append(wxID_EXIT, wxT("&Quit")); menubar->Append(file, wxT("&File")); SetMenuBar(menubar); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(SimpleMenu::OnQuit)); Centre(); } void SimpleMenu::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); }
- main.h
#include <wx/wx.h> class MyApp : public wxApp { public: virtual bool OnInit(); };
- main.cpp
#include "main.h" #include "menu.h" IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { SimpleMenu *menu = new SimpleMenu(wxT("Simple Menu")); menu->Show(true); return true; } menubar = new wxMenuBar;
Először készítünk egy menüsor objektumot.
file = new wxMenu;
Ez után készítünk egy menü objektumot.
file->Append(wxID_EXIT, wxT("&Quit"));
Egy menüpontot fűzünk a menuobjektumhoz. Az első paraméter a menu item id-ja (azonosítója). A második paraméter a menüpont neve. Itt nem készítettünkegy wxMenuItem-et. Csak az Append() metódussal változtattuk a látványon. Később mi elkészítjük a wxMenuItemet kézzel.
menubar->Append(file, wxT("&File")); SetMenuBar(menubar);
Ez után , hozzáfűzzük egy menüt a menüsávhoz. A & karakter egy gyorsbillentyűt készít. Az & jelet követő karakter aláhúzva jelenik meg. Ezek után a menü elérhető az Alt + F billentyűkombinációval. A végén meghívjuk a SetMenuBar() metódust. Ez a metódus a wxFrame widgethez tartozik. Ez beállítja a menüsávot.
Almenük
Minden menünek lehet egy almenüje is. Ez hasonló ahhoz amikor parancsokat csoportokba rendezünk. Például az eszköztáron elrejthető személyes tár, címsor, státuszsor vagy navigációs sáv egy almenübe helyezve, amit eszköztárnak hívunk. A menün belül az egyes parancsok egymástól elszeparálhatók. Ez egy egyszerű vonal. Ez egy általános eljárás, mint a „Fájl” menüben az „Új”, „Megnyitás”, „Mentés” elválasztása a „Nyomtatás”, „Nyomtatási nézet” menüpontoktól. A példában látni fogjuk hogyan készíthetünk almenüt és szeparátort.
- menu.h
#include <wx/wx.h> #include <wx/menu.h> class SubMenu : public wxFrame { public: SubMenu(const wxString& title); void OnQuit(wxCommandEvent & event); wxMenuBar *menubar; wxMenu *file; wxMenu *imp; wxMenuItem *quit; };
- menu.cpp
#include "menu.h" SubMenu::SubMenu(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180)) { menubar = new wxMenuBar; file = new wxMenu; file->Append(wxID_ANY, wxT("&New")); file->Append(wxID_ANY, wxT("&Open")); file->Append(wxID_ANY, wxT("&Save")); file->AppendSeparator(); imp = new wxMenu; imp->Append(wxID_ANY, wxT("Import newsfeed list...")); imp->Append(wxID_ANY, wxT("Import bookmarks...")); imp->Append(wxID_ANY, wxT("Import mail...")); file->AppendSubMenu(imp, wxT("I&mport")); quit = new wxMenuItem(file, wxID_EXIT, wxT("&Quit\tCtrl+W")); file->Append(quit); menubar->Append(file, wxT("&File")); SetMenuBar(menubar); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(SubMenu::OnQuit)); Centre(); } void SubMenu::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); }
- main.h
#include <wx/wx.h> class MyApp : public wxApp { public: virtual bool OnInit(); };
- main.cpp
#include "main.h" #include "menu.h" IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { SubMenu *smenu = new SubMenu(wxT("Submenu")); smenu->Show(true); return true; }
Készítettünk egy almenüt a file menüben.
file->AppendSeparator();
A menüelválasztó vonalat az AppendSeparator() metódussal készítjük:
imp = new wxMenu; imp->Append(wxID_ANY, wxT("Import newsfeed list...")); imp->Append(wxID_ANY, wxT("Import bookmarks...")); imp->Append(wxID_ANY, wxT("Import mail...")); file->AppendSubMenu(imp, wxT("I&mport"));
Az almenü készítése hasonló a normál menühöz. Az AppendSubMenu() metódussal fűzzük hozzá.
Eszköztár
A menüben használt minden parancsot használhatunk egy alkalmazásban. Az eszköztár a parancsokhoz gyors hozzáférést biztosít.
virtual wxToolBar* CreateToolBar(long style = wxNO_BORDER | wxTB_HORIZONTAL, wxWindowID id = -1, const wxString& name = "toolBar")
Eszköztárat készíteni, a frame komponens CreateToolBar() metódussal lehet.
Egyszerű eszköztár
Először egy egyszerű eszköztárat készítünk
- toolbar.h
#include <wx/wx.h> class Toolbar : public wxFrame { public: Toolbar(const wxString& title); void OnQuit(wxCommandEvent& event); };
- toolbar.cpp
#include "toolbar.h" Toolbar::Toolbar(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180)) { wxBitmap exit(wxT("exit.png")); wxToolBar *toolbar = CreateToolBar(); toolbar->AddTool(wxID_EXIT, exit, wxT("Exit application")); toolbar->Realize(); Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(Toolbar::OnQuit)); Centre(); } void Toolbar::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); }
- main.h
#include <wx/wx.h> class MyApp : public wxApp { public: virtual bool OnInit(); };
- main.cpp
#include "main.h" #include "toolbar.h" IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { Toolbar *toolbar = new Toolbar(wxT("Toolbar")); toolbar->Show(true); return true; }
A példánkban, készítünk egy eszköztárat és egy nyomógomb eszközt. Az eszköztár gombjára kattintva bezárja az alkalmazást.
wxToolBar *toolbar = CreateToolBar();
Készítünk egy eszköztárt
toolbar->AddTool(wxID_EXIT, exit, wxT("Exit application"));
Egy eszközt adunk az eszköztárhoz.
toolbar->Realize();
Miután hozzáadtuk az eszközt, meg kell hívnunk a Realize() metódust.
Eszköztárak
Ha szeretnél egy eszköztárt készíteni ennek több módja lehetséges, a másik módszer a CreateToolbar() metódus meghívása.
- toolbars.h
#include <wx/wx.h> class Toolbar : public wxFrame { public: Toolbar(const wxString& title); void OnQuit(wxCommandEvent& event); wxToolBar *toolbar1; wxToolBar *toolbar2; };
- toolbars.cpp
#include "toolbars.h" Toolbar::Toolbar(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180)) { wxImage::AddHandler( new wxPNGHandler ); wxBitmap exit(wxT("exit.png"), wxBITMAP_TYPE_PNG); wxBitmap newb(wxT("new.png"), wxBITMAP_TYPE_PNG); wxBitmap open(wxT("open.png"), wxBITMAP_TYPE_PNG); wxBitmap save(wxT("save.png"), wxBITMAP_TYPE_PNG); wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); toolbar1 = new wxToolBar(this, wxID_ANY); toolbar1->AddTool(wxID_ANY, newb, wxT("")); toolbar1->AddTool(wxID_ANY, open, wxT("")); toolbar1->AddTool(wxID_ANY, save, wxT("")); toolbar1->Realize(); toolbar2 = new wxToolBar(this, wxID_ANY); toolbar2->AddTool(wxID_EXIT, exit, wxT("Exit application")); toolbar2->Realize(); vbox->Add(toolbar1, 0, wxEXPAND); vbox->Add(toolbar2, 0, wxEXPAND); SetSizer(vbox); Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(Toolbar::OnQuit)); Centre(); } void Toolbar::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); }
- main.h
#include <wx/wx.h> class MyApp : public wxApp { public: virtual bool OnInit(); };
- main.cpp
#include "main.h" #include "toolbars.h" IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { Toolbar *toolbar = new Toolbar(wxT("Toolbar")); toolbar->Show(true); return true; }
A példánkban, készítünk egy vízszintes eszköztárt. Elhelyezzük egy függőleges méretező dobozban.
toolbar1 = new wxToolBar(this, wxID_ANY); ... toolbar2 = new wxToolBar(this, wxID_ANY);
Két eszköztárat készítünk
vbox->Add(toolbar1, 0, wxEXPAND); vbox->Add(toolbar2, 0, wxEXPAND);
Itt hozzáadjuk a függőleges méretező dobozhoz.