Momentan versuche ich mich ein wenig an der Win32 API & das C-Zeugs hat mich irgendwann genervt, also habe ich angefangen, Wrapper für die GUI-Elemente zu schreiben.
Momentan sind 2 Controls fertig, Button und Window. Bis auf WM_COMMAND und WM_DESTROY wird bisher keine Nachricht verarbeitet.
nd::Window kann mit dem += Operator neue Controls hinzufügen (wie z.B. den Button) und mit dem -= Operator können diese wieder entfernt werden.
nd::Button kann mit dem += Operator EventHandler hinzufügen, die müssen dem Prototypen LRESULT(UINT, WPARAM, LPARAM) entsprechen, Lambda-Funktionen gehen natürlich ohne Probleme.
Jedes Element erbt von Control, das eine abstrakte Klasse ist. Pure virtuals sind hier bisher nur der () Operator (UINT, WPARAM, LPARAM) und die einzigen Member sind das HWND und das HINSTANCE.
Wer Lust hat, kann das ganze gerne ausbauen oder was auch immer damit machen. Ich werde das ganze immer mal wieder erweitern & hier updaten, als nächstes sind Label, TextFields und Timer geplant.
Beispiel zur Verwendung:
Code:
nd::Window window("Testwindow", "wnd");
nd::Button button("Click me!", { 10, 10, 80, 30 });
button += [](UINT message, WPARAM wParam, LPARAM lParam) -> LRESULT { MessageBoxA(nullptr, "Hi!", "nd test!", MB_OK); return 0; };
nd::Button exit_button("Delete other button :O", { 60, 200, 200, 40 });
exit_button += [&](UINT message, WPARAM wParam, LPARAM lParam) -> LRESULT { window -= button; return 0; };
window += button;
window += exit_button;
return nd::Window::Run();
Verbesserungsvorschläge sind gerne gesehen, ich hab das ganze innerhalb von ein paar Stunden und ohne vorheriges Konzept geschrieben.






