OldSchoolHack GUI
Eine Form mit Leben füllen

In diesem Tutorial verwenden wir unsere Klasse ErsteForm aus dem Tutorial Eine neue Form erstellen weiter. Ziel dieses Tutorials ist es, der Form einen OSHGui::Button hinzufügen, der, wenn man auf ihn klickt, eine OSHGui::MessageBox anzeigt. Starten wir mit unserer bekannten Klasse:

class ErsteForm : public Form
{
private:
void InitializeComponent()
{
this->SetText("ErsteForm");
}
public:
ErsteForm()
{
InitializeComponent();
}
};

Um unseren Button zu erstellen, definieren wir ihn erst einmal als MemberVariable unserer OSHGui::Form, damit wir später auf diesen zugreifen können.

class ErsteForm : public Form
{
private:
Button *ersterButton; //Zeiger auf einen Button
void InitializeComponent()
{
this->SetText("ErsteForm");
}
public:
ErsteForm()
{
InitializeComponent();
}
};

Innerhalb von InitializeComponent erzeugen wir nun unseren Button und fügen ihn der Form hinzu:

class ErsteForm : public Form
{
private:
Button *ersterButton;
void InitializeComponent()
{
this->SetText("ErsteForm");
ersterButton = new Button();
this->AddControl(ersterButton);
}
public:
ErsteForm()
{
InitializeComponent();
}
};

Wenn wir uns nun die Form anschauen, sehen wir, dass unser Button links oben in der Form angezeigt wird und mit "Button" beschriftet ist. Nun fügen wir dem Button einen neuen Text hinzu und erstellen eine Funktion, die später unsere MessageBox anzeigt.

class ErsteForm : public Form
{
private:
Button *ersterButton;
void InitializeComponent()
{
this->SetText("ErsteForm");
ersterButton = new Button();
ersterButton->SetText("klick mich");
this->AddControl(ersterButton);
}
public:
ErsteForm()
{
InitializeComponent();
}
private: //Neuer private Block, damit es oben übersichtlich bleibt. Die Funktionen dürfen natürlich auch public sein.
void ersterButton_Click(Control *sender) //Funktionen von Steuerelementen sollten einen passenden Namen haben
{
}
};

Nun hat unser Button schonmal die richtige Beschriftung. Damit er nun auch noch auf Mausklicks reagieren kann, müssen wir seinem Click-Event unsere Funktion ersterButton_Click zuweisen. Um dies zu tun, können wir die Funktion std::bind aus der C++ Standardbibliothek benutzen. Ein Tutorial zu std::bind könnt ihr hier finden: http://www.oop-mit-cpp.de/stdbib_html/p9.html Die zweite Möglichkeit wäre einen Lambda-Ausdruck zu verwenden, ein Tutorial dazu, gibt es hier: http://www.roth-soft.de/blog/8-c-plus-plus/94-was-sind-eigentlich-lambda-ausdruecke

class ErsteForm : public Form
{
private:
Button *ersterButton;
void InitializeComponent()
{
this->SetText("ErsteForm");
ersterButton = new Button();
ersterButton->SetText("klick mich");
ersterButton->GetClickEvent() += ClickEventHandler(std::bind(&ErsteForm::ersterButton_Click, this, std::placeholder::_1));
//oder:
//ersterButton->GetClickEvent() += ClickEventHandler([this](Control *sender)
//{
// ersterButton_Click(control);
//});
this->AddControl(ersterButton);
}
public:
ErsteForm()
{
InitializeComponent();
}
private:
void ersterButton_Click(Control *sender)
{
}
};

Nun müssen wir nur noch unsere MessageBox anzeigen lassen, wenn auf den Button geklickt wurde. Dazu benutzen wir die OSHGui::MessageBox Klasse mit ihrer Methode Show.

class ErsteForm : public Form
{
private:
Button *ersterButton;
void InitializeComponent()
{
this->SetText("ErsteForm");
ersterButton = new Button();
ersterButton->SetText("klick mich");
ersterButton->GetClickEvent() += ClickEventHandler(std::bind(&ErsteForm::ersterButton_Click, this, std::placeholder::_1));
this->AddControl(ersterButton);
}
public:
ErsteForm()
{
InitializeComponent();
}
private:
void ersterButton_Click(Control *sender)
{
MessageBox::Show("Ich wurde angeklickt!");
}
};

Auch dieses Tutorial ist schon zu Ende, wie man MessageBoxen auswerten kann, erfahrt ihr im nächsten Tutorial.