<?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[Fragen zur Texteinlesung mehrzeiliger Editfenster]]></title><description><![CDATA[<p>Guten Abend.</p>
<p>Ich hätte da mal Fragen zum im Titel genannten Thema.</p>
<p>Um jede Zeile einzeln einlesen zu können, habe ich folgenden Code:</p>
<p>Variablen:</p>
<pre><code class="language-cpp">int zeilenlaenge=0;
char zwischenspeicher[50];
HWND hwndEdit=GetDlgItem(hDialog, IDC_EDT1);
</code></pre>
<p>Einlesen:</p>
<pre><code class="language-cpp">zeilenlaenge = (int)SendMessage(hwndEdit, EM_LINELENGTH, (WPARAM)SendMessage(hwndEdit, EM_LINEINDEX, (WPARAM)0, 0), 0); 
SendMessage(hwndEdit, EM_GETLINE, (WPARAM)zeilenlaenge, (LPARAM)zwischenspeicher); 
zwischenspeicher[zeilenlaenge]='\0';
</code></pre>
<p>Funktioniert unter normalen Umständen, welche auch immer das sein mögen, dieser Code? Ich saß am Mittag Stunden daran, habe das Programm aber nicht zum laufen bekommen.<br />
Ich versuche zwischenspeicher mit TextOut auszugeben:</p>
<pre><code class="language-cpp">HDC hdc;
hdc=GetDC(hDialog);
TextOut(hdc, 1, 1, zwischenspeicher, 10);
ReleaseDC(hDialog, hdc);
</code></pre>
<p>TextOut gibt mir in dem Beispiel 10 von den kleinen Rechtecken aus, die man, glaube ich, auch mit Null-Teminierung darstellen kann. Schade nur, dass ich nur am Zeilenende eine Null-Terminierung einfüge.<br />
Wo liegt der Fehler? Ermitteln wie viel Zeilen vorhanden sind, brauch ich nicht, da ich die genaue Anzahl weiß und diese auch vorher überprüft wird.<br />
Da nach stundenlangem selbst probieren, der Code ziemlich ähnlich von irgendwelchen Codes aus dem Petzold und aus dem Forum hier ist, wüsste ich nicht was zum Teufel da schief gelaufen sein könnte.<br />
GetLastError() gibt mir leider auch keine Hilfe dazu.</p>
<p>Ansonsten hätte ich noch die Frage, auch wenn sie sich jetzt vielleicht sehr anfängerisch (wenn das Wort existiert) anhört, wieso ich bei SendMessage() noch für den 3. Parameter, wenn er beinhaltet, ein (WPARAM) bzw. beim 4. (LPARAM) zusätzlich eintragen muss? Der Compiler warnt mich dabei, aber ein richtiger Fehler ist es scheinbar doch nicht, da es auch ohne geht. Ohne kann ich es auch im Petzold finden, aber wieso erwartet der Compiler den Zusatz, der in meinen Augen überflüssig ist, da ja 3. und 4. Parameter für WPARAM bzw. LPARAM bestimmt ist.</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201289/fragen-zur-texteinlesung-mehrzeiliger-editfenster</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 07:08:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201289.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Dec 2007 16:15:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 16:15:54 GMT]]></title><description><![CDATA[<p>Guten Abend.</p>
<p>Ich hätte da mal Fragen zum im Titel genannten Thema.</p>
<p>Um jede Zeile einzeln einlesen zu können, habe ich folgenden Code:</p>
<p>Variablen:</p>
<pre><code class="language-cpp">int zeilenlaenge=0;
char zwischenspeicher[50];
HWND hwndEdit=GetDlgItem(hDialog, IDC_EDT1);
</code></pre>
<p>Einlesen:</p>
<pre><code class="language-cpp">zeilenlaenge = (int)SendMessage(hwndEdit, EM_LINELENGTH, (WPARAM)SendMessage(hwndEdit, EM_LINEINDEX, (WPARAM)0, 0), 0); 
SendMessage(hwndEdit, EM_GETLINE, (WPARAM)zeilenlaenge, (LPARAM)zwischenspeicher); 
zwischenspeicher[zeilenlaenge]='\0';
</code></pre>
<p>Funktioniert unter normalen Umständen, welche auch immer das sein mögen, dieser Code? Ich saß am Mittag Stunden daran, habe das Programm aber nicht zum laufen bekommen.<br />
Ich versuche zwischenspeicher mit TextOut auszugeben:</p>
<pre><code class="language-cpp">HDC hdc;
hdc=GetDC(hDialog);
TextOut(hdc, 1, 1, zwischenspeicher, 10);
ReleaseDC(hDialog, hdc);
</code></pre>
<p>TextOut gibt mir in dem Beispiel 10 von den kleinen Rechtecken aus, die man, glaube ich, auch mit Null-Teminierung darstellen kann. Schade nur, dass ich nur am Zeilenende eine Null-Terminierung einfüge.<br />
Wo liegt der Fehler? Ermitteln wie viel Zeilen vorhanden sind, brauch ich nicht, da ich die genaue Anzahl weiß und diese auch vorher überprüft wird.<br />
Da nach stundenlangem selbst probieren, der Code ziemlich ähnlich von irgendwelchen Codes aus dem Petzold und aus dem Forum hier ist, wüsste ich nicht was zum Teufel da schief gelaufen sein könnte.<br />
GetLastError() gibt mir leider auch keine Hilfe dazu.</p>
<p>Ansonsten hätte ich noch die Frage, auch wenn sie sich jetzt vielleicht sehr anfängerisch (wenn das Wort existiert) anhört, wieso ich bei SendMessage() noch für den 3. Parameter, wenn er beinhaltet, ein (WPARAM) bzw. beim 4. (LPARAM) zusätzlich eintragen muss? Der Compiler warnt mich dabei, aber ein richtiger Fehler ist es scheinbar doch nicht, da es auch ohne geht. Ohne kann ich es auch im Petzold finden, aber wieso erwartet der Compiler den Zusatz, der in meinen Augen überflüssig ist, da ja 3. und 4. Parameter für WPARAM bzw. LPARAM bestimmt ist.</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426898</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Thu, 27 Dec 2007 16:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 16:45:38 GMT]]></title><description><![CDATA[<p>Das geht so nicht. DU hast die Doku nicht gelesen:<br />
lParam<br />
A pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.</p>
<p>also:<br />
*reinterpret_cast&lt;WORD*&gt;(zwischenspeicher) = sizeof(zwischenspeicher);</p>
<p>Und bitte Vorsicht, wenn die Zeilenlänge größer als Dein Speicher wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426910</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 27 Dec 2007 16:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 17:14:47 GMT]]></title><description><![CDATA[<p>Wenn die Zeilenlänge größer als der Speicher ist, wird die Zeile doch abgeschnitten oder nicht?</p>
<p>Zu dem Problem.<br />
Ich schreibe meine Programme in c.<br />
Wie heißt denn das Äquivalent *reinterpret_cast&lt;WORD*&gt;?</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426920</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 18:44:32 GMT]]></title><description><![CDATA[<p>Moadeh schrieb:</p>
<blockquote>
<p>Wenn die Zeilenlänge größer als der Speicher ist, wird die Zeile doch abgeschnitten oder nicht?</p>
</blockquote>
<p>Wenn Du die korrekte Größe angibst wird auch kein Überlauf generiert, jap <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>Moadeh schrieb:</p>
<blockquote>
<p>Wie heißt denn das Äquivalent *reinterpret_cast&lt;WORD*&gt;?</p>
</blockquote>
<pre><code class="language-cpp">*((WORD*)Variable)
</code></pre>
<p>Edit: Zitat korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426931</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 27 Dec 2007 18:44:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 18:32:24 GMT]]></title><description><![CDATA[<p>Danke schön euch beiden.</p>
<p>Funktioniert nun.</p>
<p>Mit freundlichen Grüßen<br />
Moadeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426959</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Thu, 27 Dec 2007 18:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Thu, 27 Dec 2007 19:11:36 GMT]]></title><description><![CDATA[<p>Moadeh schrieb:</p>
<blockquote>
<p>Wenn die Zeilenlänge größer als der Speicher ist, wird die Zeile doch abgeschnitten oder nicht?</p>
</blockquote>
<p>Nicht wenn Du so einen Blödsinn machst:<br />
zwischenspeicher[zeilenlaenge]='\0';</p>
<p>Moadeh schrieb:</p>
<blockquote>
<p>Zu dem Problem.<br />
Ich schreibe meine Programme in c.<br />
Wie heißt denn das Äquivalent *reinterpret_cast&lt;WORD*&gt;?</p>
</blockquote>
<p>Und warum das bitte? Dem Compiler ist es egal ob er C++ oder C Code compiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426973</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 27 Dec 2007 19:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 08:47:57 GMT]]></title><description><![CDATA[<p>Solang das Projekt auch auf C++ eingestellt ist, nehme ich mal an.<br />
Aber sag mir mal bitte, wo der Vorteil ist wenn ich überhaupt kein C++ kann und dann einfach eine C++ Zeile da einbaue? Das macht meiner Ansicht nach wenig Sinn <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 />
Abgesehen davon hat sich mein Compiler beschwert.</p>
<p>Und wieso ist die Zeile mit der Null-Terminierung Blödsinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427116</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Fri, 28 Dec 2007 08:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 09:02:17 GMT]]></title><description><![CDATA[<p>1. C++ ist nicht so viel anders als C.<br />
2. C++ ist härter und genauer in der Syntax. Deshalb vorzuziehen.<br />
3. Kannst Du den C++ Syntax durch Umbenennnen der Sourcen, bzw. Compiler Schalter (individuell je Datei) erreichen.<br />
4. Weil Du die Zeilenlänge anhand der realen Daten ermittelst. Aber Dein Puffer evtl. viel kleiner ist. Im Beispiel bei Dir. 50 ist Deine Puffergröße. Die Zeile mag aber 100 lang sein. In den Puffer wird nur soviel geladen wie Du willst. Diese Befehl<br />
zwischenspeicher[zeilenlaenge]='\0';<br />
geht aber über die Puffergrenze hinaus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427119</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 28 Dec 2007 09:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 11:24:22 GMT]]></title><description><![CDATA[<p>Ich bin totaler Programmieranfänger. Ich programmiere seit Juli meines Wissens nach und eher mäßig aktiv. Richtig aktiv habe ich erst die letzten 3 Wochen programmiert. Wenn ich jetzt in meinen C-Code plötzlich C++-Code einbaue, weiß ich jetzt schon, dass ich hinterher nur noch überfordert bin <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 />
Aber das ist auch eigendlich ziemlich egal. Du bist vielleicht überzeugter C++-Programmierer und ich bin ein Anfänger, der erstmal mit einen Sprache anfangen möchte.</p>
<p>Und zu der Null-Terminierung:<br />
Da hast du wohl Recht. Nur ist das Editfenster nicht großgenug, um den Bereich zu überschreiten. Um genau zu sein ist der Bereich noch um 4 größer, als maximal in das Editfenster eingegeben werden könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427170</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Fri, 28 Dec 2007 11:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 11:40:50 GMT]]></title><description><![CDATA[<p>Moadeh schrieb:</p>
<blockquote>
<p>Und zu der Null-Terminierung:<br />
Da hast du wohl Recht. Nur ist das Editfenster nicht großgenug, um den Bereich zu überschreiten. Um genau zu sein ist der Bereich noch um 4 größer, als maximal in das Editfenster eingegeben werden könnte.</p>
</blockquote>
<p>Du irrst, wenn enfach Daten eingegeben werden ohne das der User die Eingabe-Taste drückt wird ein automatischer Wrap durchgeführt. Die Zeile 4 im Text mag sich auf dem Bildschirm über mehrere Zeilen erstecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427182</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 28 Dec 2007 11:40:50 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 12:43:23 GMT]]></title><description><![CDATA[<p>Okay, gut. Das stimmt wohl. Da das Editfenster aber dazu dient, einfach mit Copy&amp;Paste Daten nach einem bestimmten Shema, welches auch vorher nachgeprüft wird, dort reinzukopieren, kann das Problem nicht auftreten. Sollte es also wirklich dazu kommen, dass das, was dort reinkopiert werden soll, zu lang ist, wird es ja nicht dort eingefügt. Zumindest nicht bei den Styles die ich dem Editfenster zugewiesen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427204</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Fri, 28 Dec 2007 12:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 16:01:12 GMT]]></title><description><![CDATA[<p>Und wie kontrllierst Du das? Und wie kontrollierst Du, dass nicht ein User ein Zeilenende löscht und dadurch eine Zeile verlängert.</p>
<p>Richtig wäre es hier eine maximal Abfrage zu machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427280</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 28 Dec 2007 16:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zur Texteinlesung mehrzeiliger Editfenster on Fri, 28 Dec 2007 17:22:09 GMT]]></title><description><![CDATA[<p>Ich kontrolliere das durch Abfrage der Zeilenanzahl. Wenn eine Zeile zu wenig (zuviel ist nicht möglich) da ist, wird weiteres Behandeln der Eingabe nicht ermöglicht.<br />
Außerdem teste ich noch je das 1. Wort der einzelnen Zeilen, damit die Eingabe dem Shema gerecht wird. Das 2. Wort der Zeilen ergibt dann schon einen individuellen Wert, der gespeichert wird und Daten enthält, die mitkopiert werden. Somit muss ich dieses nicht testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427315</guid><dc:creator><![CDATA[Moadeh]]></dc:creator><pubDate>Fri, 28 Dec 2007 17:22:09 GMT</pubDate></item></channel></rss>