<?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[verstaendnisfrage zu GetMessage]]></title><description><![CDATA[<p>hola leute</p>
<p>bei der WinApi programmierung sind mit einige dinge noch nicht so klar.<br />
GetMessage erwartet erwartet ja unter anderem als parameter einen HWND.<br />
den erhalte ich von CreateWindow(Ex).<br />
der ist dann fuer die gesammte lebzeit des fensters gueltig und wird auch beim systemaufrauf meinen WinProc uebergeben ?<br />
und wenn ich bei GetMessage fuer den HWND 0 eingebe, dann bekommt dieses GetMessage von allen existierenden fenstern die MSG und verteilt sie dann an die dazugehoerigen WndProcs der fenster wie sie in der WNDCLASS(EX) struktur angeben worden waren ?</p>
<p>HINSTANCE welchen ich von der WinMain uebergeben bekomme, wird fuer jedes erzeugte fenster in der application hergenommen. auch fuer buttons usw ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157913/verstaendnisfrage-zu-getmessage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 08:14:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157913.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Aug 2006 15:03:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 15:03:09 GMT]]></title><description><![CDATA[<p>hola leute</p>
<p>bei der WinApi programmierung sind mit einige dinge noch nicht so klar.<br />
GetMessage erwartet erwartet ja unter anderem als parameter einen HWND.<br />
den erhalte ich von CreateWindow(Ex).<br />
der ist dann fuer die gesammte lebzeit des fensters gueltig und wird auch beim systemaufrauf meinen WinProc uebergeben ?<br />
und wenn ich bei GetMessage fuer den HWND 0 eingebe, dann bekommt dieses GetMessage von allen existierenden fenstern die MSG und verteilt sie dann an die dazugehoerigen WndProcs der fenster wie sie in der WNDCLASS(EX) struktur angeben worden waren ?</p>
<p>HINSTANCE welchen ich von der WinMain uebergeben bekomme, wird fuer jedes erzeugte fenster in der application hergenommen. auch fuer buttons usw ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127708</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 30 Aug 2006 15:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 16:28:22 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Eigentlich hast du alles schon richtig gesagt. Jedes Fenster-Handle bleibt bis zu dessen Tod erhalten und wird auch an die entsprechende WinProc übergeben.<br />
Nur dass es (meines Wissens) nicht so ist, dass Windows die WndProc aufruft.<br />
Ferner hast du ja wahrscheinlich so eine Standard-Msg-Schleife:</p>
<pre><code>MSG Msg;
while ( 1 )
{
    BOOL Res = GetMessage( &amp;Msg, NULL, 0, 0 );
    if ( Res==-1 || Res==0 )    // -1 bedeutet Fehler; 0 heißt, Nachricht enthält WM_QUIT
        break;
    TranslateMessage( &amp;Msg );
    DispatchMessage( &amp;Msg );
}
</code></pre>
<p>Die Funktion &quot;GetMessage&quot; holt die nächste Nachricht aus dem Nachrichten-Pott und überträgt sie in deine Variable &quot;Msg&quot;.<br />
Die Funktion &quot;TranslateMessage&quot; prüft, ob sich aus bestimmten Nachrichten, z.B. WM_KEYDOWN/-UP benutzerfreundlichere Nachrichten erstellen lassen wie WM_CHAR. WM_CHAR wird, glaube ich, von Edit-Feldern benutzt.<br />
Und letztlich ruft deine Funktion &quot;DispatchMessage&quot; die zugehörige Fensterprozedur mit den entsprechenden Parametern (entnimmt sie der Msg-Variable) auf.</p>
<p>Windows schickt deinem Fenster bzw. Thread nur die Nachricht.</p>
<p>In der Regel ist es besser, wenn du bei &quot;GetMessage&quot; für das Fenster-Handle NULL angibst. Dann fängst du auch Nachrichten wie WM_QUIT ab <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>
<p>Grüße,<br />
Badestrand</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127770</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 30 Aug 2006 16:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 17:36:06 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Nur dass es (meines Wissens) nicht so ist, dass Windows die WndProc aufruft.</p>
</blockquote>
<p>Doch genau das werden sie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Deswegen heißen sie auch CALLBACK-Funktionen. <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="💡"
    /></p>
<p>Nähere Informationen siehe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://msdn2.microsoft.com/en-us/library/843s5s5x.aspx" rel="nofollow">&lt;&lt;Hier&gt;&gt;</a> und <a href="http://msdn2.microsoft.com/en-us/library/d186xcf0.aspx" rel="nofollow">&lt;&lt;Hier&gt;&gt;</a> <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/1127813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127813</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 30 Aug 2006 17:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 19:07:33 GMT]]></title><description><![CDATA[<p>wie ist das eigendlich, wen man in einer application 2 top-level fenster hat ?<br />
wir da dann auch nur eine GetMessage schleife verwendet oder gibts dann zwei?<br />
so wie ich es jetzt verstanden habe kann es eigendlich pro thread nur eine GetMessage geben oder ?<br />
kann man dann ueberhaupt zwei top-level fenster in einem thread erstellen ? wenn ja, wie wuerde das von statten gehen ?</p>
<p>die dispatch ist doch die funktion, die es veranlaesst, das vom system meine WndProc aufgerufen wird.<br />
vorausgesetzt, das das richtig ist koennte ich dann theoretisch meine WndProcs selber aufrufen? weil der hwnd wird mir ja geliefert.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127912</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 30 Aug 2006 19:07:33 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 19:16:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>wie ist das eigendlich, wen man in einer application 2 top-level fenster hat ?<br />
wir da dann auch nur eine GetMessage schleife verwendet oder gibts dann zwei?</p>
</blockquote>
<p>Selbstverständlich nur eine.</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>so wie ich es jetzt verstanden habe kann es eigendlich pro thread nur eine GetMessage geben oder ?</p>
</blockquote>
<p>Pro Programm eine Nachrichten-Schleife, pro Thread würde wenig Sinn machen (-&gt; CreateThread ?! <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>Meep Meep schrieb:</p>
<blockquote>
<p>kann man dann ueberhaupt zwei top-level fenster in einem thread erstellen ? wenn ja, wie wuerde das von statten gehen ?</p>
</blockquote>
<p>'top-level fenster' ?! Meinst du als Extended-Style Flag WS_EX_TOPMOST ? ...<br />
Naja du rufst einfach n-Mal CreateWindow(Ex) auf...je nachdem ob du für jedes Fenster ne eigente WndProc<br />
einrichten willst (nicht zwingend aber sinnvoll wg Übersichtlichkeit) musst du jeweils ne neue Fensterklasse<br />
reggen.</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>die dispatch ist doch die funktion, die es veranlaesst, das vom system meine WndProc aufgerufen wird.<br />
vorausgesetzt</p>
</blockquote>
<p>Sieh dir <a href="http://www.cpp-tutor.de/mfc/mfc/kap2/lektion7.htm" rel="nofollow">das</a> mal an...da wird das ganz gut erklärt (dt.)</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>das das richtig ist koennte ich dann theoretisch meine WndProcs selber aufrufen? weil der hwnd wird mir ja geliefert.</p>
</blockquote>
<p>Jo schon, aber mit welchem Hintergedanken/Grund/Ziel ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127915</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 30 Aug 2006 19:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Wed, 30 Aug 2006 19:48:15 GMT]]></title><description><![CDATA[<p>re</p>
<p>CodeFinder schrieb:</p>
<blockquote>
<p>Jo schon, aber mit welchem Hintergedanken/Grund/Ziel ?</p>
</blockquote>
<p>war nur eine reine interessensfrage. ich probier das system nur mal zu verstehen.</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<p>so wie ich es jetzt verstanden habe kann es eigendlich pro thread nur eine GetMessage geben oder ?</p>
<p>Pro Programm eine Nachrichten-Schleife, pro Thread würde wenig Sinn machen (-&gt; CreateThread ?! <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>
</blockquote>
<p>naja, aber ich koennte doch wenn ich lustig bin einen thread erzeugen und ein fenster mit ner eigenen GetMessage laufen lassen oder etwa nicht?<br />
wenn man ansich nur eine GetMessage-schleife pro application hat, was macht das dann fuer einen sinn, wenn man anstatt NULL einen hwnd angibt? dann bekommt man ja nur die MSGs von dem einen fenster und von sonst nichts. da wuerde man dann von den unterfenstern sprich buttons usw. keine benachrichtigung bekommen. oder irre ich mich da ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127937</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 30 Aug 2006 19:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to verstaendnisfrage zu GetMessage on Thu, 31 Aug 2006 05:59:18 GMT]]></title><description><![CDATA[<p>Ich würde eher von Message-Loops reden.<br />
Eigene Messageschleifen werden verwendet wenn zum Beispiel modale Dialoge benutzt werden. Auch wenn ein Menü aufgeklappt wird läuft intern eine eigene Messageschleife. Auch für Drag&amp;Drop Vorgänge hat man manchmal eigene Messageschleifen entwickelt (ist aber sleten in den Beispielen geworden).</p>
<p>Eine eigene Message-Loop macht immer dann Sinn, wenn man etwas entkoppeln will vom normalen Betrieb, wie eben einen modalen Dialog.<br />
Das diese natürlich alle auch WM_QUIT berücksichtigen sollten ist auch klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128068</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 31 Aug 2006 05:59:18 GMT</pubDate></item></channel></rss>