<?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[PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;?]]></title><description><![CDATA[<p>Hallo zusammen... und ja ich bin es schon wieder :(...</p>
<p>Aber ich habe unter dem Artikel <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-174732.html" rel="nofollow">hier</a> folgende Aussage gefunden:</p>
<blockquote>
<p>Das tut in den Augen weh und gehört verboten. Veränderungen an GUI-Komponenten immer mit PostMessage realisieren. Ausführliche Begründungen gibst wie immer bei Google.</p>
</blockquote>
<p>&quot;Gegoogeld&quot; habe ich jetzt schon und ich verstehe ja auch das es so nicht sein sollte :)...</p>
<p>Also ich sende jetzt Nachrichten per PostMessage an den Cwnd und den Cwnd selber übergebe ich nicht als Zeiger an den Thread (bzw. die Methode die im Thread läuft) sondern per HWND und dann per Cwnd::GetFromHwnd. Den Zeiger den ich dann habe kann ich getrost verwenden und die PostMessage Methode aufrufen.</p>
<p>Nun würde ich gerne eine Nachricht mit Parametern senden und zwar am besten einen std::vector&lt;CString&gt; :). Da es sich aber um einen PostMessage aufruf handelt und ich nicht weiß wann (und ob) die Nachricht bearbeitet wird kann ich auch keinen Zeiger auf den Vector übergeben... denn sonst hab ich Memory Lecks oder aber Zugriffsfehler...</p>
<p>Kennt jemand eine Lösung mit der man auch andere Dinge per PostMessage versenden kann :)? Ich wäre dafür sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175156/postmessage-mit-parameter-std-vector-lt-cstring-gt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 21:02:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175156.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Mar 2007 16:14:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Wed, 07 Mar 2007 16:14:21 GMT]]></title><description><![CDATA[<p>Hallo zusammen... und ja ich bin es schon wieder :(...</p>
<p>Aber ich habe unter dem Artikel <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-174732.html" rel="nofollow">hier</a> folgende Aussage gefunden:</p>
<blockquote>
<p>Das tut in den Augen weh und gehört verboten. Veränderungen an GUI-Komponenten immer mit PostMessage realisieren. Ausführliche Begründungen gibst wie immer bei Google.</p>
</blockquote>
<p>&quot;Gegoogeld&quot; habe ich jetzt schon und ich verstehe ja auch das es so nicht sein sollte :)...</p>
<p>Also ich sende jetzt Nachrichten per PostMessage an den Cwnd und den Cwnd selber übergebe ich nicht als Zeiger an den Thread (bzw. die Methode die im Thread läuft) sondern per HWND und dann per Cwnd::GetFromHwnd. Den Zeiger den ich dann habe kann ich getrost verwenden und die PostMessage Methode aufrufen.</p>
<p>Nun würde ich gerne eine Nachricht mit Parametern senden und zwar am besten einen std::vector&lt;CString&gt; :). Da es sich aber um einen PostMessage aufruf handelt und ich nicht weiß wann (und ob) die Nachricht bearbeitet wird kann ich auch keinen Zeiger auf den Vector übergeben... denn sonst hab ich Memory Lecks oder aber Zugriffsfehler...</p>
<p>Kennt jemand eine Lösung mit der man auch andere Dinge per PostMessage versenden kann :)? Ich wäre dafür sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241101</guid><dc:creator><![CDATA[Jochen_82]]></dc:creator><pubDate>Wed, 07 Mar 2007 16:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Wed, 07 Mar 2007 21:01:15 GMT]]></title><description><![CDATA[<p>Tja, da bin ich auch schon wieder <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><em>PostMessage(..)</em> hat drei Parameter. Das ist ein <em>UINT</em>, ein <em>WPARAM</em> (32 Bit Wert) und ein <em>LPARAM</em> (32 Bit Wert). Nun kannst du mit WPARAM und LPARAM zwei Werte and das Empfängerfenster übergeben. Das könnten ganz banale 32-Bit Werte sein (numerischer Natur) oder Adressen auf andere Daten (z.B auf einen std::vector&lt;CString&gt;). Bei Adressen musst Du casten. Nehmen wir den Einfachen Fall eines Strings:</p>
<pre><code class="language-cpp">// das Dingens muss gültig sein, also entweder auf dem Heap (=&gt; new), oder sonst wie
static CSrting sGlobalString = &quot;Ich bin ein Text&quot;;

// &quot;Der&quot; Thread 
DWORD WINAPI ThreadProc(LPVOID lpParameter )
{
  ...

  // hWndReceiver bekommt eine WM_USER Message mit Parametern
  ::PostMessage( hWndReceiver, WM_USER, (WPARAM)&amp;sGlobalString, 0 );

  ...
}
</code></pre>
<p>Und nun das Fenster (Dialog, View, oder was Dir sonst einfallen mag)</p>
<pre><code class="language-cpp">BEGIN_MESSAGE_MAP(CDlgMenuApp, CWinApp)
  ...
  ON_MESSAGE( WM_USER, OnCatchWMUserMessages )
  ..
END_MESSAGE_MAP()

...

LRESULT CDlgMenuApp::OnCatchWMUserMessages(WPARAM wParam, LPARAM lParam)
{
  // damit bekommst Du dann den &quot;geposteten&quot; string
  CString sMyString( (CString *)(wParam) );  

  ...
}
</code></pre>
<p>Das funktioniert mit allen beliebigen Datentypen. Dir muss nur bewusst sein, dass eine gepostete Message nicht unbedingt sofort verarbeitet wird. Die Werte, die über die Parameter übergeben werden, müssen natürlich im Message-Handler Deines Fensters gültig sein. Also können das keine Stack-Variablen aus Deinem Thread sein!</p>
<p>Was immer Du erreichen willst, ich glaube, Du musst noch etwas über Threads und deren Synchronisation lesen <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>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241286</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Wed, 07 Mar 2007 21:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Thu, 08 Mar 2007 09:14:13 GMT]]></title><description><![CDATA[<p>Danke Gio für das ausführliche Beispiel...</p>
<p>So hatte ich mir das auch schon gedacht... nur beim googeln bzw. in dem angesprochenen Artikel steht irgendwo das eine durch PostMessage gesendete Nachricht nicht mit sicherheit ausgeführt wird.</p>
<p>Nehmen wir also nun mal an ich lege einen neuen CString mit new auf dem Heap an und zerstöre diesen wenn die Nachricht bearbeitet wurde. Was passiert aber mit dem CString wenn die Nachricht nicht bearbeitet wird? =&gt; Memory Leak :)...</p>
<p>Ein anderer Fall ist es wenn das Programm beendet wird bevor alle Nachrichten abgearbeitet wurden... wer sorgt dann dafür das die Objekte im Speicher entfernt werden?!</p>
<blockquote>
<p>Was immer Du erreichen willst, ich glaube, Du musst noch etwas über Threads und deren Synchronisation lesen</p>
</blockquote>
<p>Das glaube und weiß ich auch :)... Nur ist es immer schwer irgendwo anzufangen ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241465</guid><dc:creator><![CDATA[Jochen_82]]></dc:creator><pubDate>Thu, 08 Mar 2007 09:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Thu, 08 Mar 2007 09:33:04 GMT]]></title><description><![CDATA[<p>du machst das super jochen_82:) genau deine fragen hier helfen mir auch immer weiter;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241485</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 08 Mar 2007 09:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Thu, 08 Mar 2007 16:08:45 GMT]]></title><description><![CDATA[<p>Ich hab folgendes bei CodeProject gefunden:</p>
<p><a href="http://www.codeproject.com/string/sendcstring.asp" rel="nofollow">Sending and posting CString to windows via PostMessage, SendMessage</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241755</guid><dc:creator><![CDATA[Jochen_82]]></dc:creator><pubDate>Thu, 08 Mar 2007 16:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Thu, 08 Mar 2007 16:50:37 GMT]]></title><description><![CDATA[<p>Ich hab das jetzt auch mal bei mir eingebunden... jedoch steht in dem CMessageString immer nur &quot;Müll&quot; drin...</p>
<p>Ich rufe das folgende auf:</p>
<pre><code class="language-cpp">CString sMessage = &quot;HALLO&quot;;
	CMessageString* pString = new CMessageString(sMessage);
</code></pre>
<p>Natürlich wird dann der folgende Konstruktor verwendet:</p>
<pre><code class="language-cpp">CMessageString::CMessageString(const CString&amp; string) : CString(string) {
	m_Manager.Add(this);
}
</code></pre>
<p>Aber wenn ich mir das nun ausgeben lasse</p>
<pre><code class="language-cpp">TRACE(&quot;Ausgabe: %s %s\n&quot;, sMessage, (*pString));
</code></pre>
<p>Steht in der Ausgabe:</p>
<blockquote>
<p>Ausgabe: HALLO [C</p>
</blockquote>
<p>Hat jemand schonmal mit dieser Klasse gearbeitet? Hat jemand einen schnellen Lösungshinweis?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1241786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1241786</guid><dc:creator><![CDATA[Jochen_82]]></dc:creator><pubDate>Thu, 08 Mar 2007 16:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to PostMessage mit Parameter std::vector&amp;lt;CString&amp;gt;? on Fri, 09 Mar 2007 19:03:00 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="😉"
    /> Die Tücke einer abgeleiteten Klasse! Mach mal:</p>
<pre><code class="language-cpp">TRACE(&quot;Ausgabe: %s %s\n&quot;, sMessage, (CString)(*pString));
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">TRACE(&quot;Ausgabe: %s %s\n&quot;, sMessage, (const char *)(*pString));
</code></pre>
<p>Die Klasse CString selbst hat den Operator ***const char **** implementiert. Das erwartet ***TRACE(..)***. <em><strong>CMessageString</strong></em> dagegen implementiert diesen Operator nicht. Deswegen musst Du casten.</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242521</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Fri, 09 Mar 2007 19:03:00 GMT</pubDate></item></channel></rss>