2016/09/15 13:58
1/31
wxWidgets
< wxWidgets
wxWidgets Ablak igazítása CenterOnParent(); CentreOnParent(); CenterOnScreen(); CentreOnScreen(); Centre(); Center(); SetTitle(_("Az ablak címe"));
Combobox s = _("empty"); ComboBox1->Append(s); Valamely részét törli. :) ComboBox1->Clear();
ListBox Hozzáfűzés ListBox1->Append(wxT("Valami"));
Lista törlése ListBox1->Clear();
Rendezés A wxListBox osztályhoz nincs rendezőmetódus, viszont be lehet állítani, hogy rendezett legyen a lista. Ez a tulajdonság viszont bugos a 2.8.x wxWidgets verzióval (Debian GNU/Linux 6.0), így ne SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
használjuk, mert nem lesz megfelelő a rendezettség. A listát tegyük egy wxArrayString tömbbe, ott rendezzük és tegyük vissza: wxArrayString templist; for(int i=; i< ListBox1->GetCount();i++) templist.Add(ListBox1->GetString(i)); templist.Sort(); ListBox1->Clear(); for(int i=; i< templist.GetCount();i++) ListBox1->Append(templist[i]); Vagy írjunk egy rendezőalgoritmust a lista elemeire magunk.
Lista adott számú eleme wxString s = ListBox1->GetString(index); Az index annak az elemnek a száma, amit szeretnénk megkapni.
Keresés a listában if(ListBox1->FindString(wxT("alma")) == wxNOT_FOUND) //Ami történjen, ha nincs alma a listában
Szelekció lekérése Lekérdezzük: wxString str = ListBox1->GetStringSelection();
Szelekció módosítása ListBox1->SetString(ListBox1->GetSelection(), _("szöveg"); Figyelem! A SetStringSelection() metódust is erre találták ki, de valamikor minden ok nélkül nem működik. Biztos bugos: ListBox1->SetStringSelection(_("szöveg");
http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
3/31
Szelekció törlése ReceiptsListBox->Delete(ReceiptsListBox->GetSelection());
Engedélyezés A használat engedélyezése, vagy tiltása: ListBox1->Enable(false);
StaticText Font beállítás: wxFont font; font.SetPointSize(18); statictext1->SetFont(font); Színbeállítás 1: wxColour szin = wxColour(, , 255); statictext1->SetForegroundColour(szin); Színbeállítás 2: statictext1->SetForegroundColour(wxColour(255,,)); Érték beállítása: statictext1->SetLabel(wxT("alma"));
TextCtrl Egy TextCtrl panelra illesztése az objektum létrehozásával: wxTextCtrl *szovegdoboz = new wxTextCtrl(panel, wxID_ANY, wxT(""), wxPoint(100,100)); Így is beállíthatjuk: wxTextCtrl *szovegdoboz = new wxTextCtrl(panel, wxID_ANY); Méret beállítása:
SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
szovegdoboz->SetSize(200, 200); Háttérszín beállítása: szovegdoboz->SetBackgroundColour(wxColour(255,,)); Előtér, vagyis szöveg színe: szovegdoboz->SetForgroundColour(wxColour(,,255)); Stílusok beállítása (wxTE_MULTILINE): szovegdobooz = new wxTextCtrl(panel, wxID_ANY, wxT(""), wxPoint(100,100), wxDefaultSize, wxTE_MULTILINE); Több stílust is beállíthatunk a | karakterrel: wxTE_MULTILINE|wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB Érték beállítása TextCtrl1->SetValue(wxT("Tartalom")); Ha a tabulátor billentyűvel szeretnénk a következő kontrollra lépni, akkor egy Panelra kell helyezni a kontrollokat. Frame-en nem működik.
ListCtrl wxListCtrl *kontroll; kontroll = new wxListCtrl(panel, ID_KONTROLL, wxPoint(200,300), wxDefaultSize, NULL, wxDefaultValidator, _T("")); kontroll = new wxListCtrl(panel, wxID_ANY, wxPoint(200,300), wxDefaultSize, wxSIMPLE_BORDER); Háttérszín beállítása kontroll->SetBackgroundColour(wxColour(255,,));
Konvertálás A szöveg számokat tartalmaz és ezzel szeretnénk dolgozni.
http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
5/31
wxString -> long wxString szoveg = wxT("243"); long szam; szoveg.ToLong(&szam);
wxString -> double wxString strszam = wxT("53.422"); double szam; strszam.ToDouble(&szam);
int -> wxString wxString szoveg; int szam = 3; szoveg = wxString::Format(_T("%d"), szam);
Link http://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString
Fájlkezelés Fejléc #include <wx/textfile.h>
Fájl megnyitása 1 wxString FilePath = _T("adat.txt"); wxTextFile f(FilePath); if(!f.Exists()) { wxMessageBox(wxT("A fájl nem létezik"), wxT("Exist file")); } else { f.Open(); f.AddLine(_T("----------"), wxTextFileType_Unix); f.Write(); f.Close(); SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
}
Fájl megnyitása 2 wxString FilePath = _T("adat.txt"); wxTextFile f; f.Open(FilePath); f.AddLine(_T("----------"), wxTextFileType_Unix); f.Write(); f.Close(); Ebben a verzióban a megnyitáskor adjuk meg, milyen állományt szeretnénk megnyitni. Így viszont nem tudjuk ellenőrizni, hogy a fájl létezik-e.
Olvasás a fájl végétől az elejéig wxTextFile f(MachineFilePath); wxString sz, sz2, sz3; f.Open(); wxString FirstLine = f.GetFirstLine(); if(!FirstLine.IsEmpty()) { for ( sz = f.GetLastLine();f.GetCurrentLine() > ;sz = f.GetPrevLine() ) { ... } }
Fájl végéhez fűzés wxString FilePath = _T("adat.txt"); wxTextFile f(FilePath); if(!f.Exists()) { wxMessageBox(wxT("A fájl nem létezik"), wxT("Exist file")); } else { f.Open(); f.Open(FilePath); f.AddLine(_T("----------"), wxTextFileType_Unix); http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
7/31
f.Write(); f.Close(); }
Fájl tartalmának törlése f.Clear(); f.Write();
Fájl létrehozása wxString FilePath = _T("adat.txt"); wxTextFile f(FilePath); f.Create(FilePath);
Olvasás a fájl elejétől a végéig wxString row; wxString FilePath = _T("adat.txt"); wxTextFile f(FilePath); if(!f.Exists()) { wxMessageBox(_("A fájl nemlétezik!"), _("Fájl létezésének ellenőrzése")); return; } else { f.Open(); for ( row = f.GetFirstLine(); !f.Eof(); row = f.GetNextLine() ) { // Csinálunk valamit a row-val } f.Close(); }
Könyvtárkezelés Könyvtár létezésének ellenőrzése if(!wxDirExists(_T("könyvtárútvonal")))
SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
//Amit teszünk ha nemlétezik Így is lehet wxString dirpath(_T("valahol/valami")); wxDir dir; if(dir.Exists(dirpath)) //Amit teszünk ha nem létezik
Könyvtár létrehozása wxMkdir(_T("konyvtarnev"), 0770);
Program ikon Fejléc #include <wx/icon.h> #include <wx/image.h> #include <wx/bitmap.h>
Példa Programikon betöltése: wxString IconDir = _T("/usr/share/programnev/"); wxIcon FrameIcon; wxString IconPath = IconDir + _T("programikon.png"); FrameIcon.CopyFromBitmap(wxBitmap(wxImage(IconPath))); SetIcon(FrameIcon);
Programba épített xpm // the application icon #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) // #include "res/eidviewer.xpm" static char *eidviewer_xpm[] = { "32 32 5 1", " c None", "a c Black", "b c #FF0000", "c c #FFFF00", http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
"d c #800000", /* pixels */ " d " ddddd " dd ddddddd " dddddddddddddddddddddd " dddddddddddddddddddddddd "ddddddddddddddddddddddddddd "ddddddddddddddddddddddddddd "dddddddddddddddddddddddddd "ddddddddddddddddacccacdddd " ddddddddddddddcacccaaadddd " dd ddddddddddccaccaccddddd " ddddddddddcaaaaaacddddddd " dddddddddacaccacadddddd " ddddddddcaccacddddddddd " dddddddddddddddddddddd " ddddddddddddddddddd " ddddddddddddddddd " dddddddddddddddd " ddddddddddddddd " dddd dddddddddd " ddd dddddddddd " dddddddddd " ddddddddddd " dddddddddd "aaaaccccbbbb dddddd "aaaaccccbbbb ddddd "aaaaccccbbbb ddd "aaaaccccbbbb "aaaaccccbbbb "aaaaccccbbbb "aaaaccccbbbb "aaaaccccbbbb
9/31
wxWidgets
", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", ", "};
#endif
Másik példa //================= Icon =========== wxString IconFilePath; wxString ExecutablePath; wxStandardPaths Paths;
ExecutablePath = Paths.GetExecutablePath(); wxRegEx* regex = new wxRegEx(_T("/[a-z]*$"), wxRE_ADVANCED); regex->Replace(&ExecutablePath, _T("")); IconFilePath = ExecutablePath + _T("/") + _T("icons/gnumerology.xpm"); SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
if( !wxFile::Exists(IconFilePath) ) IconFilePath = _T("icons/gnumerology.xpm"); if( !wxFile::Exists(IconFilePath) ) IconFilePath = _T("gnumerology.xpm");
#ifndef __WXMSW__ if( !wxFile::Exists(IconFilePath) ) IconFilePath = _T("/usr/share/gnumerology/icons/gnumerology.xpm"); if( !wxFile::Exists(IconFilePath) ) IconFilePath = _T("/usr/local/gnumerology/icons/gnumerology.xpm"); #endif //__WXMSW__ wxIcon FrameIcon; FrameIcon.CopyFromBitmap(wxBitmap(wxImage(IconFilePath))); SetIcon(FrameIcon); //================= End of Icon ===========
wxFileDialog Fájl párbeszédablakok
Fejlécfájl #include <wx/filedlg.h>
Osztály wxFileDialog osztályt használjuk. A konstruktorban egy minimális paramétert szoktunk használni, amely megadja a szülőobjektumot. Ez általában this.
Példa wxFileDialog *BrowseFileDialog = new wxFileDialog(this); BrowseFileDialog->ShowModal(); if(BrowseFileDialog->ShowModal() != wxID_OK) return; TextCtrl1->SetValue(BrowseFileDialog->GetFilename()); wxFileDialog *filedialog = new wxFileDialog(this, _("Choose a file"), http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
11/31
wxWidgets
_("/default/directory"), _("defaultfile"), _("*.*"), wxFD_DEFAULT_STYLE); filedialog->ShowModal(); A wxFD_DEFAULT_STYLE állandó helyére behelyettesíthetők más azonosítók is. Lásd alább.
Állandók wxFD_DEFAULT_STYLE Megegyezik a wxFD_OPEN állandóval wxFD_OPEN Megnyitás párbeszédablak Nem kombinálható a wxFD_SAVE állandóval. wxFD_SAVE Mentés párbeszédablak. Nem kombinálható a wxFD_OPEN állandóval. wxFD_OVERWRITE_PROMPT Csak mentés. A fájl felülírásra rákérdez wxFD_FILE_MUST_EXIST Megnyitás csak. Csak kész fájl kiválasztása wxFD_MULTIPLE Csak megnyitás. Több fájl kiválasztása is megengedett wxFD_CHANGE_DIR Az aktuális könyvtár cseréje arra, ahol a kiválasztott fájl található. A kiválasztott fájlok előnézetét adja (jelenleg csak a wxGTK támogatja a wxFD_PREVIEW GTK+ 2.4 és későbbi változatában).
Teljes konstruktor wxFileDialog *a = new wxFileDialog(this, _("Choose a file"), _("/default/directory"), _("defaultfile"), _("*.*"), wxFD_DEFAULT_STYLE, wxDefaultPosition, wxDefaultSize, _("filedlg"));
wxDirDialog Könyvtár párbeszédablak használata
Fejlécfájl #include <wx/dirdlg.h>
Példa wxDirDialog *BrowseDirDialog = new wxDirDialog(this); if(BrowseDirDialog->ShowModal() == wxID_OK) DataSavePathTextCtrl->SetValue(BrowseDirDialog->GetPath());
Státuszsor A státuszsor szövegének beállítása:
SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
StatusBar1->SetStatusText(_wxT("státusz szöveg")); Ha több mezőből áll: StatusBar1->SetStatusText(_wxT("első"), ); StatusBar1->SetStatusText(_wxT("második"), 1);
Reguláris kifejezések Fejlécállomány #include <wx/regex.h> ... wxString vs = _T("^([[.a.]-[.z.]]|[[.A.]-[.Z.]])+$"); wxRegEx* GoodName = new wxRegEx(vs); if(!GoodName->Matches(FamilyName)) wxMessageBox(wxT("Az e-mail címed")); Lehet így is: wxString vs = _T("^([[.a.]-[.z.]]|[[.A.]-[.Z.]]|-|_)+$"); Ekkor a kötőjelre és az alulvonásra is illeszkedik.
HTML tagek kiszedése A HTML tagek kiszedése egy webforrásból: wxRegEx* regex = new wxRegEx(wxT("<.*?>"), wxRE_ADVANCED); size_t count = regex->ReplaceAll(&htmldata, wxT("")); Ha egy \. akarunk a reguláris kifejezésbe illeszteni, két vissza-perjel kell, mert a C++ a visszaperjelnek egyébként is speciális jelentése van: wxRegEx* regex = new wxRegEx(wxT("\\."), wxRE_ADVANCED);
Ha újra szeretnénk felhasználni a regex változót wxString regstr; wxRegEx* regex = new wxRegEx(); regstr = _T("^1|4|8$"); regex->Compile(regstr); if(regex->Matches(_T("amit_ellenőrizni_kell"))) http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
13/31
wxWidgets
//Amit tenni akarunk ha egyezés van
Unicode használat Nem csak wxWidget esetén lehet hasznos az UNICODE definiálása #define UNICODE Mindig az #include sorok előtt legyenek.
Táblázat -- wxGrid Alapbeállíátsok Oszlop címke beállítása (0-dik): Grid1->SetColLabelValue(, wxT("alma")); Sor és oszlopcímkék elrejtése: Grid1->SetRowLabelSize(); Grid1->SetColLabelSize(); Sorok és oszlopok száma: Grid1->CreateGrid(9,9); Szélesség, magasság állítása: //Grid1->SetRowLabelSize(10); Grid1->SetColLabelSize(50);
//Oldalt
//felül
Grid1->SetDefaultColSize(30, true ); //oszlopok szélessége Grid1->SetColLabelTextOrientation(wxVERTICAL); //wxHORIZONTAL Ez alapértelmezett Cellafelirat beállítása Grid1->SetColLabelValue(, _T("Valami")); Grid1->SetRowLabelValue(1, _T("MásValami")); Sorok hozzáadása:
SzitWiki - http://szit.hu/
az
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
Grid1->AppendRows(1,true); Oszlopok hozzáadása: Grid1->AppendCols(1,true); AppendCols(int AppendRows(int ClearGrid() DeleteCols(int DeleteRows(int GetNumberCols( GetNumberRows( InsertCols(int InsertRows(int
numCols = 1, bool updateLabels = TRUE) numRows = 1, bool updateLabels = TRUE) pos pos ) ) pos pos
= , int numCols = 1, bool updateLabels = TRUE) = , int numRows = 1, bool updateLabels = TRUE)
= , int numCols = 1, bool updateLabels = TRUE) = , int numRows = 1, bool updateLabels = TRUE)
Színezés Grid2->SetCellBackgroundColour(5, 10, wxColour(, , 255)); //y, x, szín Igazítás wxGrid::SetDefaultCellAlignment void SetDefaultCellAlignment(int horiz, int vert) Alapértelmezett vízszintes és függőleges igazítás a cellák szövegei számára. Vízszintesen a következő értékeke egyike: wxALIGN_LEFT, wxALIGN_CENTRE vagy wxALIGN_RIGHT. Függőlegesen a következő értékek egyike: wxALIGN_TOP, wxALIGN_CENTRE vagy wxALIGN_BOTTOM. Font wxGrid::SetDefaultCellFont void SetDefaultCellFont(const wxFont& font) Alapértelmezett font a szöveg számára a táblázatban. Egyéb Grid2->CreateGrid(16,16); //A táblázat cellái http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
15/31
wxWidgets
Grid2->SetRowLabelSize(); //Nincs oldalcímke Grid2->SetColLabelSize(); //Nincs felsőcímke Grid2->SetDefaultColSize(20); //Az oszlopok szélessége Grid2->SetDefaultRowSize(20); //A sorok magassága Grid2->SetSize(350, 350); //Táblázat szélessége, magassága Grid2->SetCellBackgroundColour(5, 10, wxColour(, , 255)); //y, x, szín Grid2->SetCellTextColour(5, 10, wxColour(255,255,255)); //Szöveg színe Grid2->SetCellAlignment(wxALIGN_CENTRE, 5, 10); //Igazítás Grid2->SetCellValue(5, 10, _("X")); //Tartalom Grid2->SetGridLineColour(wxColour(,,)); //Szegély színe
wxFont font; font.SetPointSize(18); Grid2->SetDefaultCellFont(font); A felső és bal szegély nem látszik, ezért alá szokás tenni egy wxPenel objektumot.
Cellaszerkesztők Legördülő listadoboz wxString strChoices[3] = {_("one"), _("two"), _("three")}; Grid1->SetCellEditor(1, 1, new wxGridCellChoiceEditor(3, strChoices, true)); Léptetődoboz Grid1->SetCellEditor(1, 1, new wxGridCellNumberEditor(1,1000)); Jelőlőnégyzet Grid1->SetCellEditor(1, 1, new wxGridCellBoolEditor()); Törtszám Grid1->SetCellEditor(1, 1, new wxGridCellFloatEditor());
Kép a cellába class wxBmpCellRenderer : public wxGridCellRenderer { SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
public: wxBmpCellRenderer(const wxBitmap& bmp) : wxGridCellRenderer(), m_bmp(bmp) {} void
Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, const wxRect& rect, int row, int col, bool isSelected); wxSize GetBestSize(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, int row, int col) { return wxSize(m_bmp.GetWidth(), m_bmp.GetHeight()); } wxGridCellRenderer *Clone() const { return new wxBmpCellRenderer(m_bmp); } private: wxBitmap m_bmp; }; void wxBmpCellRenderer::Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, const wxRect& rect, int row, int col, bool isSelected) { //wxColour BgColor = attr.GetBackgroundColour(); wxColour BgColor = wxColour(255,,); dc.SetBrush(wxBrush(BgColor, wxSOLID)); //dc.SetPen(*wxTRANSPARENT_PEN); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); //dc.DrawRectangle(2, 2, 10, 15);
} wxString IconPath = _T("kepfajl.xpm"); Grid1->SetCellRenderer(1, 1, new wxBmpCellRenderer(wxBitmap(wxImage(IconPath))));
Üzenet ablak Egyszerű üzenetablak wxMessageBox(wxT("Üzenet"));
http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
17/31
Szükséges könyvtárak #include <wx/msgdlg.h>
Lehetséges használat int answer = wxMessageBox("Quit program?", "Confirm", wxYES_NO | wxCANCEL, main_frame); if (answer == wxYES) main_frame->Close(); A wxMessageBox utolsó paramétere nem kötelező.
Másik lehetséges használat if(wxMessageBox(_("The file is exist! Append?"), _("Exist file"),wxYES_NO)!=wxYES) return;
Szöveg darabolása #include <wx/tokenzr.h> wxStringTokenizer tkz(wxT("alma:körte:barack:szilva"), wxT(":")); while ( tkz.HasMoreTokens() ) { wxString token = tkz.GetNextToken(); // Amit szeretnénk csinálni a szóval (tokennel) } A token változóban megkapjuk az egyes szöveg részeket, úgy mint alma, kört, stb. Szeparátor megadható több is, egymás után: wxStringTokenizer tkz(wxT("alma:körte:barack:szilva"), wxT(":;\t\n")); A példában kettőspont, pontosvessző, tabulátor és sortörés is szeparátor.
wxAboutDialogInfo #include <wx/aboutdlg.h> wxAboutDialogInfo a; SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
a.AddDeveloper(_T("Sallai András")); a.SetCopyright(_T("Copyright (c) Sallai András, 2011")); a.SetLicence(_T("GNU GPL v.3")); a.SetVersion(_T("0.1")); a.SetWebSite(_T("http://szit.hu")); wxAboutBox(a);
Konfiguráció Fejléc #include <wx/config.h>
Beállítások mentése wxConfig *config = new wxConfig(wxT("programnev")); config->SetPath(wxT("CsoportNev")); config->Write(wxT("Változó1"), wxT("érték")); config->Write(wxT("Változó2"), wxT("érték")); config->Flush(); delete config;
Beállítások betöltése wxConfig *config = new wxConfig(wxT("programnev")); config->SetPath(wxT("CsoportNev")); wxString beallitas1 = config->Read(wxT("Valtozo1")); wxString beallitas2 = config->Read(wxT("Valtozo2")); config->Flush(); delete config;
Komplexebb példa wxConfig *config = new wxConfig(wxT("gregistry")); config->SetPath(wxT("MachinePosition")); machinePosx << Machine01Panel->GetPosition().x; machinePosy << Machine01Panel->GetPosition().y; machinePos.Append(machinePosx); http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
19/31
wxWidgets
machinePos.Append(_T("x")); machinePos.Append(machinePosy); config->Write(wxT("Machine01"), machinePos); machinePos.Clear(); machinePosx.Clear(); machinePosy.Clear(); machinePosx << Machine02Panel->GetPosition().x; machinePosy << Machine02Panel->GetPosition().y; machinePos.Append(machinePosx); machinePos.Append(_T("x")); machinePos.Append(machinePosy); config->Write(wxT("Machine02"), machinePos); config->Flush(); delete config;
Programneven könyvtárba mentés wxConfig *config = new wxConfig(wxT("programnev/config"));
Eseménykezelés Komponenshez esemény ComboBox2->Connect(wxEVT_LEFT_DOWN,wxMouseEventHandler(aFrame::ComboBox2OnMo tion), NULL, this); Értelmezés: A ComboBox2 komponens egy eseményét szeretném figyelni. Az egér LEFT_DOWN eseményére szeretnék reagálni Ha az esemény bekövetkezik akkor a következő metódus hajtódjon végre: aFrame::ComboBox2OnMotion Az eseménytáblában nincsenek adatok A metódust this (ez az osztály hívja)
Eseménykezelő metódus void gregistryFrame::OnMotion(wxMouseEvent& event) { if(event.LeftIsDown()) { //Mi történjen, ha a bal egérgomb le volt nyomva. }
SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
} Az event objektumon keresztül lekérdezhetjük az egér aktuális állapotát: int x = event.GetX(); int y = event.GetY();
Melyik objektum váltotta ki az eseményt? Az eseménykezelő metódusban: if(event.GetEventObject() == ComboBox1) wxMessageBox(wxT("A ComboBox1 váltott ki az eseményt"));
Másik Frame Hivatkozás a másik framre Sokszor szeretnénk másik Framet készíteni. Például egy beállítás frame. Legyen a főprogramunk ProgramFrame a beállítások a OptionsFrame osztályban. Az OptionsFrame megjelenítését a következő módon érhetem el: OptionsFrame *optionsframe = new OptionsFrame(this, ); optionsframe->Show(); Fontos a szülőparaméter beállítása: this. Az első sort ne a megjelenítést végző metódusba tegyük, mert akkor minden megjelenítés eseménynél létrejön. Tegyük az osztály egyik tagjának, amit a konstruktorban hozunk létre. A ProgramFrame fejrészében természetesen kell egy include: #include "OptionsFrame.h"
Visszafele hivatkozás Általában szeretnénk a másik frame-ből visszafele is hivatkozni, a hívó frame egyes objektumaira. ProgramFrame *programframe = (ProgramFrame *) this->GetParent(); Ezek után meghívhatjuk a ProgramFrame osztály metódusait, ha azok publikusak: programframe->SetProgramFrameObject(SomeParameter);
http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
21/31
Billentyűzet figyelése FamilynameTextCtrl->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(gnumerologyFrame::OnKeyDown), NULL, this); void Board::OnKeyDown(wxKeyEvent& event) { if (!isStarted || curPiece.GetShape() == NoShape) { event.Skip(); return; } int keycode = event.GetKeyCode(); if (keycode == 'p' || keycode == 'P') { Pause(); return; } if (isPaused) return; switch (keycode) { case WXK_LEFT: TryMove(curPiece, curX - 1, curY); break; case WXK_RIGHT: TryMove(curPiece, curX + 1, curY); break; case WXK_DOWN: TryMove(curPiece.RotateRight(), curX, curY); break; case WXK_UP: TryMove(curPiece.RotateLeft(), curX, curY); break; case WXK_SPACE: DropDown(); break; case 'd': OneLineDown(); break; case 'D': OneLineDown(); break; default: event.Skip(); } }
SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
WXK_BACK WXK_TAB WXK_RETURN WXK_ESCAPE WXK_SPACE WXK_DELETE
= = = = = =
8 9 13 27 32 127
// Az alábbiak nem kompatibilisek a unicode karakterekkel. // Ha key eseményből unicode karaktert szeretnél, akkor használt a következőt: // wxKeyEvent::GetUnicodeKey WXK_START = 300 WXK_LBUTTON WXK_RBUTTON WXK_CANCEL WXK_MBUTTON WXK_CLEAR WXK_SHIFT WXK_ALT WXK_CONTROL WXK_MENU WXK_PAUSE WXK_CAPITAL WXK_END WXK_HOME WXK_LEFT WXK_UP WXK_RIGHT WXK_DOWN WXK_SELECT WXK_PRINT WXK_EXECUTE WXK_SNAPSHOT WXK_INSERT WXK_HELP WXK_NUMPAD0 WXK_NUMPAD1 WXK_NUMPAD2 WXK_NUMPAD3 WXK_NUMPAD4 WXK_NUMPAD5 WXK_NUMPAD6 WXK_NUMPAD7 WXK_NUMPAD8 WXK_NUMPAD9 WXK_MULTIPLY WXK_ADD WXK_SEPARATOR WXK_SUBTRACT http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
WXK_DECIMAL WXK_DIVIDE WXK_F1 WXK_F2 WXK_F3 WXK_F4 WXK_F5 WXK_F6 WXK_F7 WXK_F8 WXK_F9 WXK_F10 WXK_F11 WXK_F12 WXK_F13 WXK_F14 WXK_F15 WXK_F16 WXK_F17 WXK_F18 WXK_F19 WXK_F20 WXK_F21 WXK_F22 WXK_F23 WXK_F24 WXK_NUMLOCK WXK_SCROLL WXK_PAGEUP, WXK_PAGEDOWN, WXK_NUMPAD_SPACE, WXK_NUMPAD_TAB, WXK_NUMPAD_ENTER, WXK_NUMPAD_F1, WXK_NUMPAD_F2, WXK_NUMPAD_F3, WXK_NUMPAD_F4, WXK_NUMPAD_HOME, WXK_NUMPAD_LEFT, WXK_NUMPAD_UP, WXK_NUMPAD_RIGHT, WXK_NUMPAD_DOWN, WXK_NUMPAD_PAGEUP, WXK_NUMPAD_PAGEDOWN, WXK_NUMPAD_END, WXK_NUMPAD_BEGIN, WXK_NUMPAD_INSERT, WXK_NUMPAD_DELETE, WXK_NUMPAD_EQUAL, WXK_NUMPAD_MULTIPLY, SzitWiki - http://szit.hu/
23/31
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
WXK_NUMPAD_ADD, WXK_NUMPAD_SEPARATOR, WXK_NUMPAD_SUBTRACT, WXK_NUMPAD_DECIMAL, WXK_NUMPAD_DIVIDE,
Dátum Az aktuális nap lekérdezése wxDateTime now = wxDateTime::Now(); wxString CurrentDay = now.Format(_T("%d")); NumberOfDayDayComboBox->SetValue(CurrentDay);
Színek Fejlécfájl #include <wx/colour.h>
Színek előállítása RGB kódokkal wxColour(255,,)
Külső program futtatása wxString s = _T("espeak -ven ") + Word; char str[100]; strcpy(str, s.mb_str().data()); system(str);
Tömb wxArray Ez a fejlécállomány kell: ?? http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
25/31
A fejlécállományban definiáljuk a tömböt: WX_DEFINE_ARRAY_INT(int, TIntTomb); TIntTomb *tomb; Helyet foglalunk: tomb = new TIntTomb; Egy számot a tömbbe teszünk: tomb->Add(35);
wxArrayString wxArrayString *gyumolcsok = new wxArrayString(); gyumolcsok->Add(wxT("alma")); gyumolcsok->Add(wxT("körte")); gyumolcsok->Add(wxT("barack")); gyumolcsok->Add(wxT("szilva")); wxString str = gyumolcsok->Item(); //az "alma"-át adja eredményül
TrayIcon Fejléc #include <wx/taskbar.h>
Példa wxTaskBarIcon osztályt használjuk taskbaricon->SetIcon(ikonvaltozo); taskbaricon->PopupMenu(menu); taskbaricon->RemoveIcon() // Felülírható: wxMenu *MyTaskBarIcon::CreatePopupMenu() { // Try creating menus different ways // TODO: Probably try calling SetBitmap with some XPMs here wxMenu *menu = new wxMenu; SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
menu->Append(PU_RESTORE, _T("&Restore TBTest")); menu->AppendSeparator(); menu->Append(PU_OLD_ICON, _T("&Restore Old Icon")); menu->Append(PU_NEW_ICON, _T("&Set New Icon")); menu->AppendSeparator(); menu->Append(PU_CHECKMARK, _T("Checkmark"),wxT(""), wxITEM_CHECK); menu->AppendSeparator(); wxMenu *submenu = new wxMenu; submenu->Append(PU_SUB1, _T("One submenu")); submenu->AppendSeparator(); submenu->Append(PU_SUB2, _T("Another submenu")); menu->Append(PU_SUBMAIN, _T("Submenu"), submenu); #ifndef __WXMAC_OSX__ /*Mac has built-in quit menu*/ menu->AppendSeparator(); menu->Append(PU_EXIT, _T("E&xit")); #endif return menu; }
Példalinkek http://freenet.googlecode.com/svn/trunk/apps/wxFCP/demo/SysTray/systray.cpp http://freenet.googlecode.com/svn/trunk/apps/wxFCP/demo/SysTray/systray.h http://code.google.com/p/daodict/source/browse/trunk/daodict/src/daodict/taskbaricon.cpp http://code.google.com/p/daodict/source/browse/trunk/daodict/src/daodict/taskbaricon.h
Környezet vizsgálata Példa 1 #ifdef __WXMSW__ //Ha Windowsos környezet #elif __WXGTK__ //Ha GTK környezet #else //Ha egyik sem #endif // __WXMSW__
http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
27/31
wxWidgets
Példa 2 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) #include "logo_connected.xpm" #endif
Példa 3 #ifndef __WXMAC_OSX__ /*A Mac elkészíti a quit menüben. */ menu->AppendSeparator(); menu->Append(PU_EXIT, _T("E&xit")); #endif
Nemzetköziesítés Forrásfájlban wxMessageBox(_("Üzenet"));
A fordítandó fájlok kinyerése xgettext -f sources.txt -p po -o programnev.pot -L C++ -k_
A fordítások megadása A nemzetközíesítést a wxApp osztályból származtatott osztályban kell megvalósítani. Az osztály fejlécállományában: private: wxLocale locale; wxStandardPaths* paths = new wxStandardPaths; wxString ExecutablePath = paths->GetExecutablePath(); wxString LocalePath; wxDir d; if(d.Exists(ExecutablePath + _T("/po"))) LocalePath = ExecutablePath + _T("/po"); locale.Init(); locale.AddCatalogLookupPathPrefix(LocalePath); SzitWiki - http://szit.hu/
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
locale.AddCatalog(_T("programnev")); locale.AddCatalog(_T("sregister"),wxLANGUAGE_HUNGARIAN,_T("UTF-8") );
Komplett példa //Get execute Path wxStandardPaths* paths = new wxStandardPaths; wxString Path = paths->GetExecutablePath(); //Remove from right the filename wxRegEx* regex = new wxRegEx(_T("/[a-z]*$"), wxRE_ADVANCED); regex->Replace(&Path, _T("")); locale.Init(); locale.AddCatalogLookupPathPrefix(_T("/usr/share/locale")); locale.AddCatalogLookupPathPrefix(_T("/usr/local/gnumerology/share/locale")) ; locale.AddCatalogLookupPathPrefix(Path); locale.AddCatalogLookupPathPrefix(_T("po")); //locale.AddCatalog(_T("gnumerology"),wxLANGUAGE_HUNGARIAN,_T("UTF-8") ); locale.AddCatalog(_T("gnumerology"));
Link http://wiki.wxwidgets.org/Internationalization
Standard útvonalak Bevezetés wxStandardPaths osztályt használjuk #include <wx/stdpaths.h>
Melyik könyvtárból fut a program? wxString ExecutablePath; wxStandardPaths Paths; ExecutablePath = Paths.GetExecutablePath(); http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
29/31
wxRegEx* regex = new wxRegEx(_T("/[a-z]*$"), wxRE_ADVANCED); regex->Replace(&ExecutablePath, _T(""));
Adatok legjobb helye wxStandardPaths Paths; wxString UserDataDir = Paths.GetUserDataDir();
Két operációs rendszeren a fájlnév eltávolítása wxRegEx* regex = new wxRegEx(_T("(/[a-z]*$)|(\\B[a-z]*\\.exe$)"), wxRE_ADVANCED); regex->Replace(&ExecutablePath, _T(""));
Folyamatsáv Osztály: wxGauge gauge [UK: ɡeɪdʒ] mérték
Metódusok void SetValue(int pos): Gauge1->SetValue(50); void SetRange(int range): Guage1->SetRAnge(120); int GetValue() const: int a = Gauge1->GetValue(); Gauge1->SetValue(Gauge1->GetValue()+5); int GetRange() const: int a = Gauge1->GetRange(); void Pulse(): Gauge1->Pulse(); SzitWiki - http://szit.hu/
wxWidgets
Last update: oktatas:programozás:wxwidgets:wxwidgets_minták http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k 2014/12/06 01:52
Léptető doboz spin [UK: spɪn] [US: ˈspɪn] forgat
Metódusok void SetValue(const wxString& text): SpinCtrl1->SetValue(_("alma")); void SetValue(int value): SpinCtrl1->SetValue(5); int GetValue() const: int b = SpinCtrl1->GetValue(); void SetRange(int minVal, int maxVal): SpinCtrl1->SetRange(5,10);
Temp könyvtár #include <wx/stdpaths.h> ... wxStandardPaths stdPath; wxString tpath=stdPath.GetTempDir(); wxString tfpath; tfpath.Append(tpath); tfpath.Append(_("/scite_input")); wxString = wxFileName::GetPathSeparator(wxPATH_NATIVE); A wxPATH_NATIVE azt jelenti az adott rendszer aktuális szeparátorát szeretnénk. Ezen kívül használhatók még a következő állandók: wxPATH_UNIX wxPATH_BEOS wxPATH_MAC wxPATH_DOS http://szit.hu/
Printed on 2016/09/15 13:58
2016/09/15 13:58
31/31
wxWidgets
wxPATH_WIN wxPATH_OS2 wxPATH_VMS wxPATH_MAX A következő példában elkészültjük az adott rendszerben a fájlt, majd kiíratjuk a teljes útvonalat: wxString tempDir = wxStandardPaths::Get().GetTempDir(); //Az adott rendszer temp könyvtára tempDir.Append(wxFileName::GetPathSeparator(wxPATH_NATIVE)); //Az adott rendszer útvonal szeparátorát hozzáfűzzük wxString path = wxFileName::CreateTempFileName(tempDir,(wxFFile*)NULL); //Elkészítjük a fájlt, majd eltároljuk a teljes útvonalat. wxMessageBox(path);
Komponensek helye, mozgatása Egy nyomógomb mozgatásai a 20, 20 helyre: EgyButton->SetPosition(wxPoint(20,20)); A nyomógombot 3 pixellel jobbra mozdítjuk: wxPoint pont = EgyButton->GetPosition(); pont.x = pont.x + 3; EgyButton->SetPosition(pont);
From: http://szit.hu/ - SzitWiki Permanent link: http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:wxwidgets:wxwidgets_mint%C3%A1k Last update: 2014/12/06 01:52
SzitWiki - http://szit.hu/