<?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[MDI ohne MFC]]></title><description><![CDATA[<p>tagchen,</p>
<p>hab mir jetzt mal einfach, weil ich wissen wollte, wie MDI ohne MFC aussieht,<br />
die MSDN hergenommen und einen kleinen Editor mit der Windows-API geschrieben.</p>
<p>jetzt meine Frage:<br />
wie bekomme ich es hin, dass immer wenigstens ein MDI-Child offen ist?<br />
also dass der Nutzer nie alle schließen kann?</p>
<p>thx schonmal für die Antworten xD</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189502/mdi-ohne-mfc</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 17:51:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189502.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Aug 2007 17:48:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MDI ohne MFC on Mon, 13 Aug 2007 17:48:24 GMT]]></title><description><![CDATA[<p>tagchen,</p>
<p>hab mir jetzt mal einfach, weil ich wissen wollte, wie MDI ohne MFC aussieht,<br />
die MSDN hergenommen und einen kleinen Editor mit der Windows-API geschrieben.</p>
<p>jetzt meine Frage:<br />
wie bekomme ich es hin, dass immer wenigstens ein MDI-Child offen ist?<br />
also dass der Nutzer nie alle schließen kann?</p>
<p>thx schonmal für die Antworten xD</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343880</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 13 Aug 2007 17:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to MDI ohne MFC on Mon, 13 Aug 2007 18:45:37 GMT]]></title><description><![CDATA[<p>Schlagt mich nicht, wenn ich was falsches schreibe, aber..:<br />
Jedes MDI-Fenster bekommt doch auch ein Handle. Beim Schließen eines Dokumentfensters muß sich also anhand der Handels überprüfen lassen, ob noch andere Doku-Fenster geöffnet sind (da gibts eine Funktion &quot;GetNextWindow&quot;()). Falls nicht, wird das Schließen des letzten Fensters verhindert, indem man WM_CLOSE abfängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343912</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 13 Aug 2007 18:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to MDI ohne MFC on Tue, 14 Aug 2007 07:38:16 GMT]]></title><description><![CDATA[<p>Du solltest selber eine Verwaltung aufbauen, die sich alle entsprechenden MDI-Child Windows merkt.<br />
Wir Du richtig gesehen hast kannst Du alle Child-Windows des MDI-Frames auch mit GetNextWindow enummerieren. Aber Achtung. Es werden mehr Fnster (auch unsichtbare) erzeugt für die minimierte Darstellung im MDI-Frame.<br />
Aber alle sichtbaren Fenster im MDI-Frame entsprechen auch einem Deiner Fenster, die Du mit WM_MDICREATE erzeugt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344094</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 14 Aug 2007 07:38:16 GMT</pubDate></item><item><title><![CDATA[Reply to MDI ohne MFC on Tue, 14 Aug 2007 15:44:54 GMT]]></title><description><![CDATA[<p>gut, dankse erstmal, das hilft mir schonmal weiter.</p>
<p>jetzt noch ne Frage:<br />
gibt es eine Notification, die meinem Frame-Window sagt, dass das Aktuelle MDI-Child gewechselt wurde?<br />
wie gesagt, es handelt sich um einen Editor und ich würde gerne als Menüpunkt haben: &quot;... speichern&quot;,<br />
also wenn die Datei schonmal gespeichert wurde natürlich.<br />
dazu müsste ich den Eintrag natürlich immer aktualisieren, wenn das Child gewechselt wird.</p>
<p>selbiges gilt für das schließen von Childs -&gt; wenn kein Child mehr da ist,<br />
sollen entsprechende Menüpunkte ausgegraut werden.</p>
<p>gibt es dafür eine Notification dafür?<br />
und wie fange ich die ab?</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344433</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Tue, 14 Aug 2007 15:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to MDI ohne MFC on Tue, 14 Aug 2007 17:03:14 GMT]]></title><description><![CDATA[<p>Du bekommst doch WM_SETFOCUS gesendet an Dein Client. Eine andere spezielle Nachricht gibt es nicht. Du kannst aber auch mit WM_MDIGETACTIVE aufrufen um jederzeit, das aktive Fenster zu ermitteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344489</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 14 Aug 2007 17:03:14 GMT</pubDate></item><item><title><![CDATA[Reply to MDI ohne MFC on Tue, 14 Aug 2007 19:29:32 GMT]]></title><description><![CDATA[<p>Die Message heißt WM_MDIACTIVATE. Allerdings bekommt das Hauptfenster sie nicht zu sehen; sie sollte also in der MDIChildProc verarbeitet werden.</p>
<p>Die Nachricht wird sowohl vom aktivierten als auch vom de-aktivierten MDI-Child-Fenster empfangen. In beiden Fällen steht in lParam der Handle zum aktivierten, in wParam zum de-aktivierten Fenster. In der MDIChildProc kann man also mit 'if(lParam==hWnd)' überprüfen, ob man sich gerade im aktivierten oder im de-aktivierten Fenster &quot;befindet&quot;.</p>
<p>Ich würde die Programmlogik so aufbauen, dass die Reihenfolge, in der die beiden Childfenster WM_MDIACTIVATE empfangen, keine Rolle spielt. Z.B. indem man alle Aktionen dann durchführt, wenn gerade das aktivierte Fenster die Nachricht verarbeitet (also wenn lParam==hWnd). Wie gesagt, mit wParam hat man ja auch dann Zugriff auf das soeben de-aktivierte Fenster. Das sollte problemlos sein, wenn man Aktionen beim Schließen eines Child-Fensters in WM_CLOSE oder WM_DESTROY statt in WM_MDIACTIVATE durchführt.</p>
<p>Wie Martin R. schrieb, macht es Sinn, eine eigene Verwaltung aufzubauen.</p>
<p>Man könnte z.B. eine Struktur/Klasse 'MDI_KID' definieren, eine Instanz davon für jedes neu erstellte MDI-Child allozieren, und per SetWindowLongPtr() mit dem Childfenster assoziieren. In diese Stuktur kann man alle Daten packen, die man für das jeweilige Child (einschließlich dessen HWND, siehe unten) braucht.</p>
<p>Das macht sich wahrscheinlich spätestens dann bezahlt, wenn man komplexere Features für die MDI-Children implementieren möchte, z.B. eine Tab-Leiste (dann könnte man jeden Tab mit einem Pointer auf die jeweilige MDI_KID-Struktur versehen, und so den Tab mit einem Childfenster verknüpfen, einschließlich dessen HWND), oder eine Seitenleiste, die Daten des aktiven Fensters anzeigen soll...</p>
<p>Wenn man die 'MDI_KID'-Instanzen zu einer Liste verkettet, kann man schön durch sämtliche vorhandenen MDI-Children navigieren. Wenn sowohl der Rückwärts- als auch der Vorwärts-Listenpointer des gerade aktiven MDI_KIDs NULL sind, weiß man, dass nur ein MDIChild existiert, usw.</p>
<p>Walter Z</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344574</guid><dc:creator><![CDATA[Walter Z]]></dc:creator><pubDate>Tue, 14 Aug 2007 19:29:32 GMT</pubDate></item></channel></rss>