<?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[Breite eines Textstrings herausfinden]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich versuche gerade, die Breite (in Pixeln) eines Textstrings herauszufinden, aber das scheint leider nicht so zu klappen wie es soll.</p>
<p>In meinem Progrmm soll der Bediener einen Text eingeben, dieser Text wird in einem STATIC-Textfeld fester Breite angezeigt. Nun möchte ich die Schriftgröße so wählen, daß möglichst die gesamte Breite meines Textfeldes ausgenutzt wird. Dazu wollte ich den Font verstellen.</p>
<p>Hier mein Versuch:</p>
<pre><code class="language-cpp">//hBigFont und hTxtHinweis sind Klassenvariablen von MyClass
void MyClass::SetHinweisText(char* szHinweis)
{
	int lfHeight = 45;
	if(!hBigFont)
	{
		LOGFONT lf;
		memset(&amp;lf, 0, sizeof(LOGFONT));
		lf.lfHeight = lfHeight;
		hBigFont = ::CreateFontIndirect(&amp;lf);
	}
	::SendMessage(hTxtHinweis, WM_SETFONT, (WPARAM) hBigFont, FALSE);
	::SetWindowText(hTxtHinweis, szHinweis);
	int iLen = strlen(szHinweis);
	if(iLen &lt; 10)
		return;
	RECT r; ::GetWindowRect(hTxtHinweis, &amp;r);
	int breite = (r.right - r.left) * 19 / 20;
	for(;;)
	{
		HDC hdc = ::GetDC(hTxtHinweis);
		SIZE strsize;
		BOOL gtep = ::GetTextExtentPoint32(hdc, szHinweis, iLen, &amp;strsize);
		::ReleaseDC(hTxtHinweis, hdc);
		if(!gtep || (strsize.cx &lt; breite))
			break;
		lfHeight--;
		::DeleteObject(hBigFont);
		LOGFONT lf;
		memset(&amp;lf, 0, sizeof(LOGFONT));
		lf.lfHeight = lfHeight;
		hBigFont = ::CreateFontIndirect(&amp;lf);
		::SendMessage(hTxtHinweis, WM_SETFONT, (WPARAM) hBigFont, FALSE);
	}
}
</code></pre>
<p>Wenn ich nun bspw. als Hinweistext &quot;Hallo Leute, wie geht's?&quot; bringen möchte, dann sagt mir VC++, daß strsize.cx=196 und breite=242, aber der Text wird nicht vollständig im Textfeld angezeigt, sondern geclipt.</p>
<p>Wer kann mir helfen? Danke!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152123/breite-eines-textstrings-herausfinden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:45:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152123.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Jul 2006 09:14:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Breite eines Textstrings herausfinden on Mon, 03 Jul 2006 09:14:55 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich versuche gerade, die Breite (in Pixeln) eines Textstrings herauszufinden, aber das scheint leider nicht so zu klappen wie es soll.</p>
<p>In meinem Progrmm soll der Bediener einen Text eingeben, dieser Text wird in einem STATIC-Textfeld fester Breite angezeigt. Nun möchte ich die Schriftgröße so wählen, daß möglichst die gesamte Breite meines Textfeldes ausgenutzt wird. Dazu wollte ich den Font verstellen.</p>
<p>Hier mein Versuch:</p>
<pre><code class="language-cpp">//hBigFont und hTxtHinweis sind Klassenvariablen von MyClass
void MyClass::SetHinweisText(char* szHinweis)
{
	int lfHeight = 45;
	if(!hBigFont)
	{
		LOGFONT lf;
		memset(&amp;lf, 0, sizeof(LOGFONT));
		lf.lfHeight = lfHeight;
		hBigFont = ::CreateFontIndirect(&amp;lf);
	}
	::SendMessage(hTxtHinweis, WM_SETFONT, (WPARAM) hBigFont, FALSE);
	::SetWindowText(hTxtHinweis, szHinweis);
	int iLen = strlen(szHinweis);
	if(iLen &lt; 10)
		return;
	RECT r; ::GetWindowRect(hTxtHinweis, &amp;r);
	int breite = (r.right - r.left) * 19 / 20;
	for(;;)
	{
		HDC hdc = ::GetDC(hTxtHinweis);
		SIZE strsize;
		BOOL gtep = ::GetTextExtentPoint32(hdc, szHinweis, iLen, &amp;strsize);
		::ReleaseDC(hTxtHinweis, hdc);
		if(!gtep || (strsize.cx &lt; breite))
			break;
		lfHeight--;
		::DeleteObject(hBigFont);
		LOGFONT lf;
		memset(&amp;lf, 0, sizeof(LOGFONT));
		lf.lfHeight = lfHeight;
		hBigFont = ::CreateFontIndirect(&amp;lf);
		::SendMessage(hTxtHinweis, WM_SETFONT, (WPARAM) hBigFont, FALSE);
	}
}
</code></pre>
<p>Wenn ich nun bspw. als Hinweistext &quot;Hallo Leute, wie geht's?&quot; bringen möchte, dann sagt mir VC++, daß strsize.cx=196 und breite=242, aber der Text wird nicht vollständig im Textfeld angezeigt, sondern geclipt.</p>
<p>Wer kann mir helfen? Danke!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090562</guid><dc:creator><![CDATA[Krösus]]></dc:creator><pubDate>Mon, 03 Jul 2006 09:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Breite eines Textstrings herausfinden on Mon, 03 Jul 2006 11:04:06 GMT]]></title><description><![CDATA[<p>Evtl. reservier das static selbst ein oder zwei Pixel als Rand. Versuch mal den Stil SS_LEFTNOWORDWRAP.</p>
<p>Ach ja und DrawText mit DT_CALCRECT kannst Du auch noch verwenden, Evtl. ist da noch ein kleiner Unterschied zu GetTextExtent32</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090618</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 03 Jul 2006 11:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Breite eines Textstrings herausfinden on Mon, 03 Jul 2006 11:57:19 GMT]]></title><description><![CDATA[<p>So, ich habe es inzwischen selber gefunden:</p>
<p>Man muß noch einfügen, daß der neue Font auch ausgewählt wird:</p>
<pre><code class="language-cpp">HDC hdc = ::GetDC(hTxtHinweis);
		HFONT hFontOld = (HFONT) ::SelectObject(hdc, hBigFont); //Font auswaehlen
		SIZE strsize;
		BOOL gtep = ::GetTextExtentPoint32(hdc, szHinweis, iLen, &amp;strsize);
		::SelectObject(hdc, hFontOld); //Font wieder zuruecksetzen
		::ReleaseDC(hTxtHinweis, hdc);
</code></pre>
<p>Trotzdem besten Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090650</guid><dc:creator><![CDATA[Krösus]]></dc:creator><pubDate>Mon, 03 Jul 2006 11:57:19 GMT</pubDate></item></channel></rss>