<?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[Zerstören von HWND über die ID]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe hier eine Menge von Windows. Der Übersicht zu Gute wollte ich daher die ganzen DestroyWindow(HWND)-Befehle folgendermaßen zusammenfassen: Ich benutze eine for-Schleife, um mich durch alle IDs des Programms durchzuzählen und zerstöre dann die zur ID gehörenden Windows.<br />
Wie bekomme ich aber den Handle zum jeweiligen Fenster wenn ich nur die ID habe? Denn DestroyWindow benötigt ja den Handle.<br />
Gibt es da eine Funktion für?</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200062/zerstören-von-hwnd-über-die-id</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 21:58:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200062.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Dec 2007 12:34:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 12:34:52 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe hier eine Menge von Windows. Der Übersicht zu Gute wollte ich daher die ganzen DestroyWindow(HWND)-Befehle folgendermaßen zusammenfassen: Ich benutze eine for-Schleife, um mich durch alle IDs des Programms durchzuzählen und zerstöre dann die zur ID gehörenden Windows.<br />
Wie bekomme ich aber den Handle zum jeweiligen Fenster wenn ich nur die ID habe? Denn DestroyWindow benötigt ja den Handle.<br />
Gibt es da eine Funktion für?</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418069</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Mon, 10 Dec 2007 12:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 12:51:00 GMT]]></title><description><![CDATA[<p>wozu? Die Fenster werden doch sowieso zerstört, sobald das &quot;Hauptfenster&quot; des Threads per DestroyWindow zerstört wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418085</guid><dc:creator><![CDATA[hey]]></dc:creator><pubDate>Mon, 10 Dec 2007 12:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 12:53:34 GMT]]></title><description><![CDATA[<p>Natürlich, ich möchte die aber manuell löschen können und nicht gleich das gesamte Fenster.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418087</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Mon, 10 Dec 2007 12:53:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 13:12:01 GMT]]></title><description><![CDATA[<p>Mit GetDlgItem bekommst Du das HWND Handle von einer ID eines Child Controls.<br />
Dann kannst Du DestroyWindow aufrufen.</p>
<p>BTW: Manchmal ist es angesagter die Controls nur zu verbergen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418106</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 10 Dec 2007 13:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 15:36:41 GMT]]></title><description><![CDATA[<p>Okay, vielen Dank. Das funktioniert.</p>
<p>Aber mal interessehalber. Wieso sollte man die Controls nur verbergen? Ist das dann bei einem erneute CreateWindow Aufruf schneller, falls man die Controls wieder benötigt? Ich stelle mir vor, dass wenn ich 5 Funktionen habe, die über eine listbox o.ä. anwähle und bei jeder Auswahl die Controls nur verberge, existieren da zich Controls noch weiter und machen das Programm irgentwann ja langsam, wenn da 10 Editfenster verborgen sind und nicht wieder sichtbar gemacht werden. Wobei das bei 5 Funktionen noch kein wesentliches Problem sein dürfte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418234</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Mon, 10 Dec 2007 15:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 15:41:02 GMT]]></title><description><![CDATA[<p>Ich verberge Controls dann, wenn ich z.B. Dialogboxen größer und kleiner mache um erweiterte Funktionen zuzulassen.</p>
<p>Zu Deiner Frage: Wenn Du die Controls nicht mehr benötigst, dann entsorge sie natürlich. Ansonsten warum solltest Du Controls neu anlegen, nachdem Du sie gelöscht hast? Sie waren doch da! Also benutze sie wieder...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418237</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 10 Dec 2007 15:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Mon, 10 Dec 2007 16:14:23 GMT]]></title><description><![CDATA[<p>Erstmal noch zur Ursprungsfrage. Ich hab das jetzt in eine for-Schleife eingebaut. Das tolle ist, dass dadurch der Befehl nicht mehr funktioniert.</p>
<pre><code class="language-cpp">void leeren(HWND hwnd)
{    
     int idzaehler;
     for(idzaehler=91;idzaehler&lt;=92;idzaehler++);
          DestroyWindow(GetDlgItem(hwnd, idzaehler));
}
</code></pre>
<p>Wenn ich die for-Schleife auskommentiere und idzaehler den wert 91 (meine zwei Test Controls haben die ID 91 und 92) zuordne, verschwindet der eine Control.<br />
Wenn ich in der obigen Schleife idzaehler&lt;92 schreibe, verschwindet mit der ID 92.<br />
D.h. er geht erst zum DestroyWindow-Befehle, nachdem er die Schleife beendet ist. Wieso? Zwischen überprüfen, ob der Wert noch im richtigen Bereich ist und erhöhen des Wertes um 1, wird doch das ausgeführt, was in den geschweiften Klammern steht.</p>
<p>Zum Verbergen: Das Problem dabei ist, dass das Programm komplett vom User gesteuert wird. Da ich mal annehme, dass es noch keine Funktion GetUsersThought() (und hoffentlich auch nicht SetUsersThought()) gibt, ist das problematisch. Es ist nicht dringend nötig jede Funktion mehrere Male aufzurufen. Würde ein verborgener Control bzw. ein Neuerschaffen statt Sichtbarmachen mehr Speicher und Leistung fressen/brauchen oder ist das unwesentlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418259</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Mon, 10 Dec 2007 16:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Tue, 11 Dec 2007 08:45:54 GMT]]></title><description><![CDATA[<p>Diese Schleife ist nicht gut. Was ist wenn das Control nicht existiert? Dann wird NULL returniert! Was macht DestroyWindow?</p>
<p>Ansonsten hast Du Dich reingelegt!</p>
<pre><code class="language-cpp">int idzaehler;
     for(idzaehler=91;idzaehler&lt;=92;idzaehler++);
          DestroyWindow(GetDlgItem(hwnd, idzaehler));
</code></pre>
<p>Beachte das Semikolon am Ende der Zeile mit for! :xmas2:</p>
<p>Mit dem folgenden Syntax wäre das nicht passiert:</p>
<pre><code class="language-cpp">for(int idzaehler=91;idzaehler&lt;=92;idzaehler++);
          DestroyWindow(GetDlgItem(hwnd, idzaehler));
</code></pre>
<p>Das hätte einen Compiler Fehler ausgelöst (vorausgesetzt zu arbeitest nicht mit VC6!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418555</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 11 Dec 2007 08:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Tue, 11 Dec 2007 13:14:05 GMT]]></title><description><![CDATA[<p>Hmm, ich hab das Semikolon übersehen. War aber zumindest keine Absicht, das dort hinzuschreiben.<br />
Aber müsste dabei der Compiler nicht auch einen Fehler anzeigen? Der Compiler von Dev-Cpp zeigt zumindest nichts an.</p>
<p>Um zu überprüfen, ob das jeweilige Fenster aktiv ist habe ich noch die Schleife eingebaut:</p>
<pre><code class="language-cpp">if(IsWindow(GetDlgItem(hwnd, idzaehler)))
</code></pre>
<p>Das sollte ja reichen, damit DestroyWindow nicht inexistierendes löscht, oder?</p>
<p>Danke schön Martin Richter.</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418729</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Tue, 11 Dec 2007 13:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Tue, 11 Dec 2007 13:16:45 GMT]]></title><description><![CDATA[<p>Moadeh schrieb:</p>
<blockquote>
<p>Hmm, ich hab das Semikolon übersehen. War aber zumindest keine Absicht, das dort hinzuschreiben.<br />
Aber müsste dabei der Compiler nicht auch einen Fehler anzeigen? Der Compiler von Dev-Cpp zeigt zumindest nichts an.</p>
</blockquote>
<p>Wieso sollte er? Das ist ganz legaler C++ Code - und daß die Schleife sinnlos ist, würde ihm höchstens eine Warnmeldung entlocken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418730</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 11 Dec 2007 13:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zerstören von HWND über die ID on Tue, 11 Dec 2007 14:03:45 GMT]]></title><description><![CDATA[<p>Moadeh schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(IsWindow(GetDlgItem(hwnd, idzaehler)))
</code></pre>
<p>Das sollte ja reichen, damit DestroyWindow nicht inexistierendes löscht, oder?</p>
</blockquote>
<p>Unnötig! Du musst nur auf NULL prüfen, wenn GetDlgItem etwas returniert, das !=NULL ist, dann ist das auch gültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418765</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 11 Dec 2007 14:03:45 GMT</pubDate></item></channel></rss>