<?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[Chatprogramm EditboxProblem]]></title><description><![CDATA[<p>Hallo Liebe Community,</p>
<p>Ich hab nach hin und her nun schonmal ein Chatprogramm zum Laufen bekommen <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="😉"
    /><br />
Auch das Problem mit dem Enter-Taste abfangen ist soweit gelöst.</p>
<p>Einziges Problem ist jetzt, dass wenn ich einen Text schreibe und Enter drücke das Programm zwar die Nachricht abschickt und das Eingabefeld löscht aber automatisch einen Zeilenumbruch macht weil ich ja Enter gedrückt habe.</p>
<p>Ausschnitte aus dem Quellcode:</p>
<pre><code class="language-cpp">LRESULT CALLBACK ChildProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
BYTE cbuf[256];
GetKeyboardState(cbuf);   

if(message == WM_KEYDOWN &amp;&amp; cbuf[VK_SHIFT]&amp;0x80 &amp;&amp; cbuf[VK_RETURN]&amp;0x80)
{
 int i = GetWindowTextLength(hEin);
 char recv[] = &quot;\n&quot;;
 SendMessage(hEin,EM_SETSEL,i,i);
 SendMessage(hEin,EM_REPLACESEL,FALSE,(LPARAM)recv);
 return 0;
}

if(message == WM_KEYDOWN &amp;&amp; cbuf[VK_RETURN]&amp;0x80)
{
GetWindowText(hEin,Self.message,1900);

int TextLength  = GetWindowTextLength(hEin);

if(TextLength == 0)
{
  MessageBox(hwnd,&quot;Du musst zuerst einen Text eingeben!&quot;,&quot;Info&quot;,MB_OK|MB_ICONINFORMATION);
  SetWindowText(hEin,&quot;&quot;);
}
else
{
Verbindung.Send(&amp;Self,hEin);
}
return 0;
}

return CallWindowProc ((WNDPROC) PrevWndProcEdit, hwnd, message, wParam, lParam);
}
</code></pre>
<p>Das ist die Funktion die die Tasten der Editbox abfängt.<br />
Die Editbox wir wie folgt deklariert:</p>
<pre><code class="language-cpp">static LONG_PTR PrevWndProcEdit; 
...
hEin  = CreateWindowEx(WS_EX_CLIENTEDGE,
                                   &quot;edit&quot;,
                                   eingabe,
                                   WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_BORDER,
                                   0, 0, 0, 0,
                                   hwnd,
                                   NULL,
                                   ((LPCREATESTRUCT) lParam) -&gt; hInstance,
                                   NULL);
PrevWndProcEdit = SetWindowLongPtr (hEin, GWLP_WNDPROC, (LONG_PTR) ChildProc);
...
</code></pre>
<p>So mein Eingabefeld ist ein Multiline da ich ja auch Zeilenumbrüche haben möchte nur halt nicht durch Enter sonder Shift+Enter.</p>
<p>Wisst ihr rat bzw habt ihr mein Problem verstanden?</p>
<p>Mit freundlichen Grüßen,<br />
xenus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222007/chatprogramm-editboxproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 00:35:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222007.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Sep 2008 12:55:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 12:55:03 GMT]]></title><description><![CDATA[<p>Hallo Liebe Community,</p>
<p>Ich hab nach hin und her nun schonmal ein Chatprogramm zum Laufen bekommen <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="😉"
    /><br />
Auch das Problem mit dem Enter-Taste abfangen ist soweit gelöst.</p>
<p>Einziges Problem ist jetzt, dass wenn ich einen Text schreibe und Enter drücke das Programm zwar die Nachricht abschickt und das Eingabefeld löscht aber automatisch einen Zeilenumbruch macht weil ich ja Enter gedrückt habe.</p>
<p>Ausschnitte aus dem Quellcode:</p>
<pre><code class="language-cpp">LRESULT CALLBACK ChildProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
BYTE cbuf[256];
GetKeyboardState(cbuf);   

if(message == WM_KEYDOWN &amp;&amp; cbuf[VK_SHIFT]&amp;0x80 &amp;&amp; cbuf[VK_RETURN]&amp;0x80)
{
 int i = GetWindowTextLength(hEin);
 char recv[] = &quot;\n&quot;;
 SendMessage(hEin,EM_SETSEL,i,i);
 SendMessage(hEin,EM_REPLACESEL,FALSE,(LPARAM)recv);
 return 0;
}

if(message == WM_KEYDOWN &amp;&amp; cbuf[VK_RETURN]&amp;0x80)
{
GetWindowText(hEin,Self.message,1900);

int TextLength  = GetWindowTextLength(hEin);

if(TextLength == 0)
{
  MessageBox(hwnd,&quot;Du musst zuerst einen Text eingeben!&quot;,&quot;Info&quot;,MB_OK|MB_ICONINFORMATION);
  SetWindowText(hEin,&quot;&quot;);
}
else
{
Verbindung.Send(&amp;Self,hEin);
}
return 0;
}

return CallWindowProc ((WNDPROC) PrevWndProcEdit, hwnd, message, wParam, lParam);
}
</code></pre>
<p>Das ist die Funktion die die Tasten der Editbox abfängt.<br />
Die Editbox wir wie folgt deklariert:</p>
<pre><code class="language-cpp">static LONG_PTR PrevWndProcEdit; 
...
hEin  = CreateWindowEx(WS_EX_CLIENTEDGE,
                                   &quot;edit&quot;,
                                   eingabe,
                                   WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_BORDER,
                                   0, 0, 0, 0,
                                   hwnd,
                                   NULL,
                                   ((LPCREATESTRUCT) lParam) -&gt; hInstance,
                                   NULL);
PrevWndProcEdit = SetWindowLongPtr (hEin, GWLP_WNDPROC, (LONG_PTR) ChildProc);
...
</code></pre>
<p>So mein Eingabefeld ist ein Multiline da ich ja auch Zeilenumbrüche haben möchte nur halt nicht durch Enter sonder Shift+Enter.</p>
<p>Wisst ihr rat bzw habt ihr mein Problem verstanden?</p>
<p>Mit freundlichen Grüßen,<br />
xenus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577572</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 13:08:26 GMT]]></title><description><![CDATA[<p>subclass mit eigener CALLBACK-Funktion einrichten, dann klappt das. CallWindowProc gehört in diese CALLBACK-Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577586</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 13:12:38 GMT]]></title><description><![CDATA[<p>Sorry aber damit kann ich jetzt nicht direkt was anfangen bzw. steh ich jetzt bisschen aufm Schlauch ich dachte ich hab das schon gemacht mit der Callback-Funktion...</p>
<p>Ich hab ja momentan 2 Callback-Funktionen eine für das Hauptfenster und eins halt für das Editfenster und was meinst du jetzt soll ich machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577588</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 14:03:55 GMT]]></title><description><![CDATA[<p>Editfenster sind Childfenster des übergeordneten Parentfensters. Sie werden von Windows direkt verabeitet und die Details nur komprimiert an das Parentfenster weitergegen. Willst Du zwischendurch eingreifen, dann ist &quot;subclassing&quot; der einzige Weg! Mache Dich schlau, wie &quot;subclassing&quot; funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577632</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 14:38:02 GMT]]></title><description><![CDATA[<p>Hab mal geschaut was mit Subclassing gemeint ist.<br />
Wenn ich das richtig gesehen habe handelt es sich doch darum dass man einem Childfenster mit SetWindowLong eine eigene Callback funktion gibt oder nicht?</p>
<p>Und das hab ich doch gemacht. Es funktioniert ja auch alles das Problem ist doch nur, dass das Enter noch in der Editbox ausgeführt wird obwohl es schon abgefangen wurde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577660</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 14:43:32 GMT]]></title><description><![CDATA[<p>warum nicht einfach das ENTER am Schluss des Editboxtextes einfach löschen?</p>
<pre><code class="language-cpp">char	*search

	search = strrchr(editboxtext, '\n');
	if(search){
		*search = 0;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1577665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577665</guid><dc:creator><![CDATA[DEL ENTER]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 14:49:38 GMT]]></title><description><![CDATA[<p>Das hab ich auch überlegt nur ich weiß nicht so recht wo ich das jetzt aufrufen soll...</p>
<p>Da wo die Editevents verarbeitet werden oder im Hauptfenster?<br />
Aber vllt gibt es ja auch einen einfacheren Weg..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577670</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:49:38 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 15:07:17 GMT]]></title><description><![CDATA[<p>xenus schrieb:</p>
<blockquote>
<p>Das hab ich auch überlegt nur ich weiß nicht so recht wo ich das jetzt aufrufen soll...</p>
<p>Da wo die Editevents verarbeitet werden oder im Hauptfenster?<br />
Aber vllt gibt es ja auch einen einfacheren Weg..</p>
</blockquote>
<p>na hier</p>
<pre><code class="language-cpp">if(message == WM_KEYDOWN &amp;&amp; cbuf[VK_RETURN]&amp;0x80)
{
    char    *search

    GetWindowText(hEin,Self.message,1900); 
    search = strrchr(Self.message, '\n');
    if(search){
        *search = 0;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1577678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577678</guid><dc:creator><![CDATA[DEL ENTER]]></dc:creator><pubDate>Sat, 06 Sep 2008 15:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sat, 06 Sep 2008 15:14:38 GMT]]></title><description><![CDATA[<p>Ja das Problem ist ja die Message wird ja richtig verarbeitet etc.<br />
Und der EditboxText wird auch auf &quot;&quot; gesetzt nur dann kommt nach dem dies alles passiert ist bzw. abgehandelt wurde von der Funktion ein Umbruch rein obwohl das Event eigentlich schon abgearbeitet sein sollte.</p>
<p>Deshalb würde es glaub ich nichts bringen das letzte \n vom Eingabetext wegzunehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577680</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sat, 06 Sep 2008 15:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sun, 07 Sep 2008 05:24:53 GMT]]></title><description><![CDATA[<p>Ja dann musst du hat deinen Text an verschiedenen Stellen deines Programms mal ausgeben, z.B. in eine Datei, um nachzuvollziehn ab wann sich der unerwünschte Zeilen Umbruch einschleicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577912</guid><dc:creator><![CDATA[DEL ENTER]]></dc:creator><pubDate>Sun, 07 Sep 2008 05:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sun, 07 Sep 2008 06:06:16 GMT]]></title><description><![CDATA[<p>Du hast das &quot;subclassing&quot; schon richtig gemacht. Bist Du aber sicher, dass ENTER etc, tatsächlich abgefangen werden? Füge in ChildProc mal Kontrollausgaben ein. Vielleicht fehlt - wie bei Dialogen - eine Abfrage auf WM_GETDLGCODE mit return DLG_WANTALLKEYS oder so etwas ähnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577916</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Sun, 07 Sep 2008 06:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Sun, 07 Sep 2008 06:42:20 GMT]]></title><description><![CDATA[<p>Ja darauf wollt ich ja hinaus die Taste wird nicht ganz abgefangen sie wird zwar untersucht und dementsprechend wird gehandelt aber wirklich abgefangen ist sie noch nicht wenn sie nämlich die Callback vom Child verläßt ist der Edittext auch leer aber dann kommt erst der nächste Zeilenumbruch in dem Editfeld...</p>
<p>Also wird sie noch nicht ganz abgefangen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577921</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Sun, 07 Sep 2008 06:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Mon, 08 Sep 2008 10:19:00 GMT]]></title><description><![CDATA[<p>Ich habe versucht, das Problem mit einem Testprogramm nachzuvollziehen. In einer mehrzeiligen Edit-Box kannst Du das ENTER zwar zu sehen bekommen, aber leider nicht vollkommen abfangen als wäre nichts geschehen. Der Zeilenumbruch bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578485</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 08 Sep 2008 10:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Mon, 08 Sep 2008 10:35:39 GMT]]></title><description><![CDATA[<p>seid ihr alle hohl oder was lol</p>
<pre><code class="language-cpp">static WNDPROC oldProc;

LRESULT CALLBACK EditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
	switch(message) {
		case WM_CHAR:
			if(wParam == VK_RETURN) {
				SetWindowText(hDlg, &quot;&quot;);
				return 0;
			}
	}
	return CallWindowProc(oldProc, hDlg, message, wParam, lParam);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1578500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578500</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Mon, 08 Sep 2008 10:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Chatprogramm EditboxProblem on Mon, 08 Sep 2008 13:50:42 GMT]]></title><description><![CDATA[<p>LOL <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Okay also manchmal hat man aber auch ein Brett vorm Kopf oO</p>
<p>Vielen Dank WM_CHAR war die Lösung <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/1578651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578651</guid><dc:creator><![CDATA[xenus]]></dc:creator><pubDate>Mon, 08 Sep 2008 13:50:42 GMT</pubDate></item></channel></rss>