<?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[swprintf formatiert nicht wie gewünscht]]></title><description><![CDATA[<p>Grüsse,</p>
<p>ich habe ein kleines Problemchen mit der Funktion swprintf.</p>
<p>Und zwar ich mir bei einem Mausclick in einem Fenster die Position des Cursors aus (in der wndproc).</p>
<p>Aus dem lParam der message (WM_LBUTTONDOWN) lese ich die x- und y-Koordinate aus, und möchte die dann erstmal mit swprintf in einen wchar-Array speichern um sie dann via TextOut(...) im Fenster zu printen.</p>
<p>Die Koordinate wird auch korrekt ausgelesen (lasse nebenbei eine Konsole laufen und dort sind die Werte korrekt), allerdings formatiert mir swprintf den Wert ab und an korrekt - und manchmal eben nicht.</p>
<p>Kurz der code (steht wie gesagt in wndproc):<br />
Hier wird jetzt nur die y-Koordinate gezeigt.</p>
<pre><code>case WM_LBUTTONDOWN: {
		unsigned short xcoord = LOWORD(lparam);
		unsigned short ycoord = HIWORD(lparam);
		wchar_t coords[10] = {0};

		int anzahlchars = swprintf(coords,L&quot;%hd&quot;,ycoord);
		std::wcout	&lt;&lt; L&quot;swprintf: &quot; 
					&lt;&lt; anzahlchars
					&lt;&lt; L&quot; -- y-coord:&quot;
					&lt;&lt; coords[0]&lt;&lt;coords[1]&lt;&lt;coords[2]
					&lt;&lt; L&quot; -- Groesse: &quot;
					&lt;&lt;sizeof(HIWORD(lparam))&lt;&lt;&quot;  &quot;&lt;&lt;sizeof(ycoord)
					&lt;&lt;std::endl;
		TextOut(hDC,0,0,coords,anzahlchars);
		break;
}
</code></pre>
<p>HIWORD() ist ein Makro und lautet:</p>
<pre><code>#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) &gt;&gt; 16) &amp; 0xffff))
</code></pre>
<p>Was mich wundert ist, dass es mit der x-Koordinate wunderbar klappt, aber bei der y-Koordinate Probleme gibt. Zwar wird sie meistens korrekt angezeigt, aber manchmal eben nicht.<br />
Was mir dabei aufgefallen ist - (hm wie soll ich das jetzt beschreiben?):<br />
War beispielsweise die y-coord des vorherigen clicks 156 (also 3 digits), und der aktuelle click ist bei 30 oder beispielsweise 8 (weniger als 3 digits), so wird zwar die neue Koordinate angezeigt aber gleichzeitig werden noch 1 oder 2 weitere Ziffern (sodass die Anzahl insgesamt wieder 3 ist) angehängt, und zwar die letzten beiden oder die letzte des vorherigen clicks.</p>
<p>Beispiel:<br />
click --&gt; Koordinate 24 --&gt; wird richtig als 24 angezeigt<br />
click --&gt; Koordinate 192 --&gt; wird richtig als 192 angezeigt<br />
click --&gt; Koordinate 8 --&gt; wird falsch angezeigt als 8<strong>92</strong></p>
<p>Am macro kann es eigentlich nicht liegen, da die Koordinaten in der Konsole richtig ausgegeben werden.<br />
Ich komm aber nicht drauf, warum das so ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273822/swprintf-formatiert-nicht-wie-gewünscht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 22:38:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273822.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Sep 2010 22:33:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to swprintf formatiert nicht wie gewünscht on Mon, 13 Sep 2010 22:33:23 GMT]]></title><description><![CDATA[<p>Grüsse,</p>
<p>ich habe ein kleines Problemchen mit der Funktion swprintf.</p>
<p>Und zwar ich mir bei einem Mausclick in einem Fenster die Position des Cursors aus (in der wndproc).</p>
<p>Aus dem lParam der message (WM_LBUTTONDOWN) lese ich die x- und y-Koordinate aus, und möchte die dann erstmal mit swprintf in einen wchar-Array speichern um sie dann via TextOut(...) im Fenster zu printen.</p>
<p>Die Koordinate wird auch korrekt ausgelesen (lasse nebenbei eine Konsole laufen und dort sind die Werte korrekt), allerdings formatiert mir swprintf den Wert ab und an korrekt - und manchmal eben nicht.</p>
<p>Kurz der code (steht wie gesagt in wndproc):<br />
Hier wird jetzt nur die y-Koordinate gezeigt.</p>
<pre><code>case WM_LBUTTONDOWN: {
		unsigned short xcoord = LOWORD(lparam);
		unsigned short ycoord = HIWORD(lparam);
		wchar_t coords[10] = {0};

		int anzahlchars = swprintf(coords,L&quot;%hd&quot;,ycoord);
		std::wcout	&lt;&lt; L&quot;swprintf: &quot; 
					&lt;&lt; anzahlchars
					&lt;&lt; L&quot; -- y-coord:&quot;
					&lt;&lt; coords[0]&lt;&lt;coords[1]&lt;&lt;coords[2]
					&lt;&lt; L&quot; -- Groesse: &quot;
					&lt;&lt;sizeof(HIWORD(lparam))&lt;&lt;&quot;  &quot;&lt;&lt;sizeof(ycoord)
					&lt;&lt;std::endl;
		TextOut(hDC,0,0,coords,anzahlchars);
		break;
}
</code></pre>
<p>HIWORD() ist ein Makro und lautet:</p>
<pre><code>#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) &gt;&gt; 16) &amp; 0xffff))
</code></pre>
<p>Was mich wundert ist, dass es mit der x-Koordinate wunderbar klappt, aber bei der y-Koordinate Probleme gibt. Zwar wird sie meistens korrekt angezeigt, aber manchmal eben nicht.<br />
Was mir dabei aufgefallen ist - (hm wie soll ich das jetzt beschreiben?):<br />
War beispielsweise die y-coord des vorherigen clicks 156 (also 3 digits), und der aktuelle click ist bei 30 oder beispielsweise 8 (weniger als 3 digits), so wird zwar die neue Koordinate angezeigt aber gleichzeitig werden noch 1 oder 2 weitere Ziffern (sodass die Anzahl insgesamt wieder 3 ist) angehängt, und zwar die letzten beiden oder die letzte des vorherigen clicks.</p>
<p>Beispiel:<br />
click --&gt; Koordinate 24 --&gt; wird richtig als 24 angezeigt<br />
click --&gt; Koordinate 192 --&gt; wird richtig als 192 angezeigt<br />
click --&gt; Koordinate 8 --&gt; wird falsch angezeigt als 8<strong>92</strong></p>
<p>Am macro kann es eigentlich nicht liegen, da die Koordinaten in der Konsole richtig ausgegeben werden.<br />
Ich komm aber nicht drauf, warum das so ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952236</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Mon, 13 Sep 2010 22:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to swprintf formatiert nicht wie gewünscht on Tue, 14 Sep 2010 00:06:00 GMT]]></title><description><![CDATA[<p>ARGHL, ich nehm alles zurück Oo</p>
<p>Problem erkannt, und hatte nichts mit swprintf zu tun.<br />
(sondern damit, dass das Fenster nicht neugezeichnet)</p>
<p>heuuul - sowas einfaches und ich grübel hier seit Ewigkeiten Oo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952247</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Tue, 14 Sep 2010 00:06:00 GMT</pubDate></item></channel></rss>