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.