<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[GUI Bibliothek OOP Design]]></title><description><![CDATA[<p>Also, gehen wir mal davon aus, das ich eine GUI Bibliothek am schreiben bin.</p>
<p>Das GUI von einem Container (HWND) soll verwaltet werden. Hab letztens hier gelesen das Th sich schonmal mit GUI Bibliotheken-Design rumschlagen musste. Wie würdet ihr so eine Bibliothek sinvoll anlegen? Die einzellnen Widgets (Controls) befinden sich jeweils in Frames (Windows). Soll ich einen Seperaten &quot;Renderer&quot; haben? Zwischen Eingabe und Ausgabe strikt trennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205087/gui-bibliothek-oop-design</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 22:13:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205087.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Feb 2008 12:47:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 12:47:50 GMT]]></title><description><![CDATA[<p>Also, gehen wir mal davon aus, das ich eine GUI Bibliothek am schreiben bin.</p>
<p>Das GUI von einem Container (HWND) soll verwaltet werden. Hab letztens hier gelesen das Th sich schonmal mit GUI Bibliotheken-Design rumschlagen musste. Wie würdet ihr so eine Bibliothek sinvoll anlegen? Die einzellnen Widgets (Controls) befinden sich jeweils in Frames (Windows). Soll ich einen Seperaten &quot;Renderer&quot; haben? Zwischen Eingabe und Ausgabe strikt trennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452975</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 10 Feb 2008 12:47:50 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 13:54:35 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Also, gehen wir mal davon aus, das ich eine GUI Bibliothek am schreiben bin.</p>
</blockquote>
<p>*lol* Du _bist_ dran, eine GUI Lib zu schreiben!</p>
<p>Ein- und Ausgabe kann man in GUIs oft nicht strikt trennen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Welche Aufgabe hätte Dein Renderer?</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453031</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 10 Feb 2008 13:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 14:01:58 GMT]]></title><description><![CDATA[<p>Naja eigtl. wäre das nutzen eines Renderers unnütz, es sei denn, man arbeitet mit verschiedenen Grafikbibliotheken. Dann würde man dem Renderer ein Device-Objekt geben und der Renderer ruft dann mit Device-Objekt-Referenz als Parameter die Zeichenmethode des Controls auf.</p>
<p>Ist aber in dem Fall nicht wirklich angebracht... da zum rendern fest GDI+ genutzt wird.</p>
<blockquote>
<p>*lol* Du _bist_ dran, eine GUI Lib zu schreiben!</p>
</blockquote>
<p>Wie soll man deine Aussage interpretieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453036</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 10 Feb 2008 14:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 14:38:44 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>*lol* Du _bist_ dran, eine GUI Lib zu schreiben!</p>
</blockquote>
<p>Wie soll man deine Aussage interpretieren?</p>
</blockquote>
<p>Du fragst wegen dem *lol*? Bitte denk' jetzt nicht, dass ich mich über Dein Vorhaben lustig mache. Mich hat nur Deine Ausdrucksweise amüsiert - so hart am Konjunktiv. Und zudem hab ich ein paar Minuten vor deinem Post wieder 'mal in &quot;<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-202501.html" rel="nofollow">Warum machen wir uns nicht eine neue schöne C++ GUI Bibliothek?</a>&quot; gestöbert.</p>
<p>Mein Hauptaugenmerk bei einer GUI Bibliothek würde ganz klar auf der Usability liegen - für den Programmierer. Hast Du Dir schon über das Entstehen einer Oberfläche innerhalb Deines Konzepts Gedanken gemacht?</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453060</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 10 Feb 2008 14:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 15:17:53 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Okay also es ist keine Platformübergreifende Bibliothek usw. gemeint <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Es ist nur im Moment so, dass ich es wie folgt aufgeteilt habe:<br />
- Basisklasse Window<br />
- Klasse Button<br />
- Klasse List<br />
- Klasse Label<br />
- usw. (Controls ...)<br />
- Klasse Frame</p>
<p>Diese werden von der Klasse Manager verwaltet. D.h. dieser kapselt ein WinAPI-Fenster (HWND) in eine Klasse und bei entsprechender Nachricht, kümmert er sich darum, das die Windows mit den entsprechenden Informationen versorgt werden.<br />
Dann gibt es noch eine Klasse Menu, die auf gleicher ebene wie der Manager ist und einen Zeiger auf diesen hat. Dadurch kann durch ein Klick auf ein Menu-Item erreicht werden, dass bestimmte Fenster aus/eingeblendet werden.<br />
Zusätzlich hat der Manager noch einen Status &quot;waiting&quot; in dem er durch ein Overlay abgedunkelt wird und ein &quot;Ladekreis&quot; eingeblendet wird(mit Animation).</p>
<p>Doch ehrlich gesagt finde ich das Klassendesign so sehr schlecht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Und d.h. wollte ich mal eure Vorschläge dazu hören. (Hab anfangs kein Konzept gehabt und einfach drauf los geschrieben ... es funktioniert, aber schön / wiederverwendbar ist das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453093</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 10 Feb 2008 15:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 15:48:22 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Diese werden von der Klasse Manager verwaltet. D.h. dieser kapselt ein WinAPI-Fenster (HWND) in eine Klasse und bei entsprechender Nachricht, kümmert er sich darum, das die Windows mit den entsprechenden Informationen versorgt werden.</p>
</blockquote>
<p>Klingt mir sehr künstlich. Auf die schnelle würd' ich eher:</p>
<pre><code class="language-cpp">class menu_bar_t;
class tool_bar_t;
class status_bar_t;
class window_t;
class child_window_t : window_t;
class parent_window_t : window_t {

    menu_bar_t   m_menu_bar;
    tool_bar_t   m_tool_bar;
    status_bar_t m_status_bar;

    container_t&lt; parent_window_t | child_window_t &gt; childs;
};

class app_t;

class pushbutton_t : child_window_t;
class listbox_t : child_window_t;
...
</code></pre>
<p>Aber wahrscheinlich nicht praxistauglich (?)</p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453120</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 10 Feb 2008 15:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 20:20:38 GMT]]></title><description><![CDATA[<p>(D)Evil das wird doch eh nichts. Du brichst spätestens nach ein paar Wochen dein Vorhaben ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453314</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Sun, 10 Feb 2008 20:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 20:26:11 GMT]]></title><description><![CDATA[<p>@rolleis<br />
Warum sollte er das? - Ist doch interessantes Thema. Werde das früher, oder später auch noch machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453320</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 10 Feb 2008 20:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Sun, 10 Feb 2008 20:35:14 GMT]]></title><description><![CDATA[<p>Das macht so gut wie jeder mal und 99% brechen es kurz danach wieder ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453327</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Sun, 10 Feb 2008 20:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Mon, 11 Feb 2008 13:22:52 GMT]]></title><description><![CDATA[<p>Wie bei GUIs offensichtlich oft verwendet, wuerde ich das Composite-Pattern nutzen.<br />
Dann so aehnlich vorgehen, wie du es schon selbst geschrieben hast: du hast eine Basisklasse und die elementaren Steuerelemente erben direkt von dieser. Des weiteren gibt es eine weitere Klasse fuer Container-Controls (Dialoge etc.), welche die zuvor erwaehnte Basisklasse erweitert.</p>
<blockquote>
<p>Diese werden von der Klasse Manager verwaltet. D.h. dieser kapselt ein WinAPI-Fenster (HWND) in eine Klasse und bei entsprechender Nachricht, kümmert er sich darum, das die Windows mit den entsprechenden Informationen versorgt werden.</p>
</blockquote>
<p>Ja, so in etwa wuerde ich das auch loesen. Wobei das Verteilen der Nachrichten ja schon von Windows gehandled wird. Die Manager-Klasse selbst wuerde ich als ein Container-Control implementieren.</p>
<blockquote>
<p>Dann gibt es noch eine Klasse Menu, die auf gleicher ebene wie der Manager ist und einen Zeiger auf diesen hat. Dadurch kann durch ein Klick auf ein Menu-Item erreicht werden, dass bestimmte Fenster aus/eingeblendet werden.<br />
Zusätzlich hat der Manager noch einen Status &quot;waiting&quot; in dem er durch ein Overlay abgedunkelt wird und ein &quot;Ladekreis&quot; eingeblendet wird(mit Animation).</p>
</blockquote>
<p>Also das halte ich fuer Quark (sprichst du von Windows-Menues oder irgendwie etwas anderem?). Ich weiss nicht genau fuer was du das machen willst, aber ein Menue-Item sollte nicht irgendwie fest beinhalten, nur fuer das Verschwinden von Fenstern da zu sein.<br />
Mach es zu einem Control wie etwa einen Button auch (ggf. gleiche &quot;Zwischen&quot;-Basisklasse) und mach das OnClick-Ereignis zu einer Callback-Methode (oder so...) und damit leicht aenderbar.<br />
Aehnliches gilt fuer den &quot;Ladekreis&quot;.</p>
<p>Ich bin selbst auch so vorgegangen (du hast ja offensichtlich den letzten Thread dazu gelesen) und bin damit auch sehr zufrieden, allerdings ist die Problemstellung bei mir etwas anders. Ich kapsle nicht nur fuer eine Plattform sondern will das ganze plattformunabhaengig haben. Ausserdem ist es mehr fuer Grafik-APIs wie OpenGL ausgelegt.</p>
<p>Naja...wie heißt es so schoen...Just my two cents <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453616</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Mon, 11 Feb 2008 13:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Mon, 11 Feb 2008 14:03:05 GMT]]></title><description><![CDATA[<blockquote>
<p>Also das halte ich fuer Quark (sprichst du von Windows-Menues oder irgendwie etwas anderem?). Ich weiss nicht genau fuer was du das machen willst, aber ein Menue-Item sollte nicht irgendwie fest beinhalten, nur fuer das Verschwinden von Fenstern da zu sein.</p>
</blockquote>
<p>Naja, es ist kein Quark <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Es handelt sich natürlich nicht um ein Standard Windows-Menü. Es ist noch ein weiteres &quot;HWND&quot; (gewrappet ...), das einen Array von Fenster-Zeigern, Menütitel, Menüicon beinhaltet.</p>
<p>Naja das Menü ist vielmehr die Möglichkeit, sich verschiedene &quot;Desktops&quot; aufzurufen. Jeder Menü-Punkt ist sozusagen ein Desktop (mit den einzellnen Frames, die wieder einzellne Controls haben) und der Benutzer kann den entsprechenden &quot;Desktop&quot; dann auswählen.</p>
<blockquote>
<p>Aehnliches gilt fuer den &quot;Ladekreis&quot;.</p>
</blockquote>
<p>Naja ich könnte höchstens hingehen und einen Thread für den Ladekreis starten, und im anderen Thread dann eine OnLoad()-Callback aufrufen. Aber ob das wirklich komfortabel ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453648</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 11 Feb 2008 14:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Mon, 11 Feb 2008 14:55:22 GMT]]></title><description><![CDATA[<p>Ich dachte bei einem Menue an son ein Popup-Menue bei Windows (oder ein &quot;Haupt&quot;-Menue einer Anwendung), da wuerde so eine feste Implementierung nicht wirklich sinnvoll sein. Ggf. koennte man auch durch Ueberschreiben eine Aenderung der Reaktion auf ein Ereignis aendern, aber das fuehrt zu zig Klassen ohne wirklichen Unterschied.<br />
Bei dem Desktop-Switcher ist das vermutlich etwas anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453718</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Mon, 11 Feb 2008 14:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Mon, 11 Feb 2008 19:46:10 GMT]]></title><description><![CDATA[<p>Hat denn da jemand noch eine schöne Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453930</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 11 Feb 2008 19:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Mon, 11 Feb 2008 21:32:57 GMT]]></title><description><![CDATA[<p>nein. Zu meinem Design hast Du dich ja nicht geäußert...</p>
<p>DeSoVoDaMu schrieb:</p>
<blockquote>
<p>Wie bei GUIs offensichtlich oft verwendet, wuerde ich das Composite-Pattern nutzen.</p>
</blockquote>
<p>Ich sollte mir GOF mal einverleiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1454020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454020</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 11 Feb 2008 21:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to GUI Bibliothek OOP Design on Tue, 12 Feb 2008 20:39:02 GMT]]></title><description><![CDATA[<p>Hab da ehrlich gesagt nicht ganz verstanden wie du das meintest <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8250">@Swordfish</a> ...</p>
<p>Also ich denke, das ich das so mache:<br />
-Manager (Desktop):<br />
* Container: Window<br />
* MessageProc (WinAPI) an Fenster weiterleiten<br />
* (De-)aktivierung der Eingaben: d.h. Layer über Desktop-Fenster blenden &amp; Nachrichten-Weiterleitung unterbinden<br />
-Fenster (Frames):<br />
* Container: Control<br />
* Behandeln der Nachrichten(von Desktop empfangen) &amp; Weiterleiten an Controls<br />
- Control (abstract)<br />
* Behandeln der Nachrichten<br />
* Alle Controltypen werden von Control abgeleitet</p>
<p>Naja recht einfaches Konzept, aber nun gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1454710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454710</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 12 Feb 2008 20:39:02 GMT</pubDate></item></channel></rss>