Lista zadań na zajęcia, semestr zimowy 2013/2014, zestaw V
Transkrypt
Lista zadań na zajęcia, semestr zimowy 2013/2014, zestaw V
Lista zadań na zajęcia, semestr zimowy 2013/2014, zestaw V Graficzny interfejs użytkownika przy pomocy wxWidgets Przemysław Krysztowiak, [email protected] Podczas rozwiązywania poniższych zadań wskazane jest posługiwanie się dokumentacją biblioteki wxWidgets. Zadanie 1. W serwisie moodle dostępna jest biblioteka wxWidgets wraz z gotowym projektem Visual Studio 2010. Po rozpakowaniu biblioteki (C:\wxWidgets) zapoznaj się z kodem przykładowego programu, wyświetlającego puste okno i oferującego dwie pozycje w menu. Zadanie 2. Dodaj trzecią pozycję do menu, o nazwie „Powitanie”, która spowoduje wypisanie komunikatu „Dzień dobry”. Zadanie 3. Dodaj (w konstruktorze klasy OknoProgramu) panel (wxPanel), ustawiając budowane okno jako jego okno nadrzędne. Umożliwi to układanie kontrolek w oknie. Zadanie 4. Dodaj do okna przycisk (wxButton) z napisem „Przelicz”. Po kliknięciu program wypisze „Nie ma co przeliczać”. Zadanie 5. Dodaj pole do wprowadzania tekstu (wxTextCtrl). Zadanie 6. Przedefiniuj obsługę przycisku „Przelicz” tak, żeby czytał z pola tekstowego napis i wypisywał go na ekranie (wykorzystaj metodę GetValue()). Zadanie 7. Przedefiniuj obsługę przycisku „Przelicz” tak, żeby czytał liczbę z pola tekstowego, mnożył ją przez 4 i wypisywał na ekranie. Zadanie 8. Dodaj do okna listę wyboru z dwiema opcjami: „PLN→EUR” i „EUR→PLN”. Stowarzysz z nim zdarzenie – zmianę pola logicznego w klasie, pomocnego do rozwiązania następnego zadania. Zadanie 9. Przedefiniuj obsługę przycisku „Przelicz” tak, żeby w zależności od wybranej opcji, wypisywał na ekranie podaną wartość albo pomnożoną przez 4, albo podzieloną przez 4. Zadanie domowe. i zdefiniuj obsługę). Zapoznaj się z inną, dowolnie wybraną kontrolką (dodaj ją do okna 1. Podstawowy program: #include <wx/wx.h> const int ID_Quit = 1; const int ID_About = 2; class OknoProgramu : public wxFrame { public: OknoProgramu(const wxString & title, const wxSize & size) : wxFrame(NULL, -1, title, wxDefaultPosition, size) { wxMenuBar * menuBar = new wxMenuBar(); wxMenu * menuProgramu = new wxMenu(); menuProgramu->Append(ID_About, _("O programie")); menuProgramu->AppendSeparator(); menuProgramu->Append(ID_Quit, _("Wyjdź")); menuBar->Append(menuProgramu, _("Menu programu")); SetMenuBar(menuBar); } void OnQuit(wxCommandEvent & event) { Close(true); } void OnAbout(wxCommandEvent & event) { wxMessageBox(_("Prosty program realizujący GUI z pomocą wxWidgets."), _("Pierwsze GUI"), wxOK|wxICON_INFORMATION, this); } }; class NaszProgram : public wxApp { virtual bool OnInit() { OknoProgramu * okno = new OknoProgramu(_("Pierwszy program z GUI"), wxSize(400, 350)); okno->Connect(ID_Quit, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &OknoProgramu::OnQuit); okno->Connect(ID_About, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &OknoProgramu::OnAbout); okno->Show(true); SetTopWindow(okno); return true; } }; IMPLEMENT_APP(NaszProgram) 2. Konstruktor klasy wxPanel: wxPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = "panel") 3. Konwersja między wxString i double: wxString napisWe = textInput->GetValue(); double numWe; napisWe.ToDouble(&numWe); double numWy = numWe * 2.0; wxString napisWy = wxString::Format(_("%lf"), numWy); 4. Przykład utworzenia przycisku wewnątrz panelu: wxButton * button = new wxButton(panel, ID_Przycisk, _("Przelicz"), wxPoint(100, 100), wxDefaultSize); Zdarzenia generowane przez przycisk mają typ wxEVT_COMMAND_BUTTON_CLICKED. 5. Przykładowa lista wyboru z trzema możliwościami: wxArrayString wybory; wybory.Add(_("Pierwsza opcja")); wybory.Add(_("Druga opcja")); wybory.Add(_("Trzecia opcja")); choice = new wxChoice(panel, ID_Combo, wxPoint(200, 100), wxDefaultSize, wybory); Generowane zdarzenie ma typ wxEVT_COMMAND_CHOICE_SELECTED. 6. Przykłady utworzenia pola tekstowego: textInput = new wxTextCtrl(panel, ID_TextInput, wxEmptyString, wxPoint(0, 0), wxSize(50, -1)); text = new wxTextCtrl(panel, ID_Text, wxEmptyString, wxPoint(120, 120), wxSize(300, 100), wxTE_MULTILINE); Wyrażam zgodę na drukowanie przez studentów i pracowników WMiI UMK treści zawartej w niniejszym pliku.