<?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[Fensterhöhe berechnen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hänge gerade irgendwie auf dem Schlauch. Ich möchte die Höhe für ein Fenster berechnen. Das Fenster soll wie folgt aussehen.</p>
<pre><code>--------------------------
|                        |
| Überschrift (1)        |
|                        |
| Hier steht Text (2)    |
--------------------------
</code></pre>
<p>Je nachdem wie breit die Überschrift ist, ergibt sich die Fensterbreite.<br />
Der Text (2), kann beliebig lang sein und wird dann ggf. umgebrochen. Hier überlege ich schon die ganze Zeit wie ich aus der Textlänge (ggf. mit Umbruch) die Höhe errechnen kann.</p>
<p>Folgende Funktion errechnet die Buchstabenbreite</p>
<pre><code class="language-cpp">void GetCharSize(::CDC *pDC, ::CFont *pFont, ::SIZE &amp;Size)
{
    ::CFont *pOldFont = pDC-&gt;SelectObject(pFont);
    Size = pDC-&gt;GetTextExtent(&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;, 52);

    Size.cx = static_cast&lt;long&gt;(ceil(static_cast&lt;float&gt;(Size.cx) / static_cast&lt;float&gt;(52)));
    pDC-&gt;SelectObject(pOldFont);
}
</code></pre>
<p>Abstand von oben zur Überschrift sind 9. Zwischen 1 und 2 sind 20 und Abstand von 2 nach unten 5. Daraus ergibt sich schon mal 34.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183108/fensterhöhe-berechnen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 02:21:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183108.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Jun 2007 15:39:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fensterhöhe berechnen on Fri, 01 Jun 2007 15:39:40 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hänge gerade irgendwie auf dem Schlauch. Ich möchte die Höhe für ein Fenster berechnen. Das Fenster soll wie folgt aussehen.</p>
<pre><code>--------------------------
|                        |
| Überschrift (1)        |
|                        |
| Hier steht Text (2)    |
--------------------------
</code></pre>
<p>Je nachdem wie breit die Überschrift ist, ergibt sich die Fensterbreite.<br />
Der Text (2), kann beliebig lang sein und wird dann ggf. umgebrochen. Hier überlege ich schon die ganze Zeit wie ich aus der Textlänge (ggf. mit Umbruch) die Höhe errechnen kann.</p>
<p>Folgende Funktion errechnet die Buchstabenbreite</p>
<pre><code class="language-cpp">void GetCharSize(::CDC *pDC, ::CFont *pFont, ::SIZE &amp;Size)
{
    ::CFont *pOldFont = pDC-&gt;SelectObject(pFont);
    Size = pDC-&gt;GetTextExtent(&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;, 52);

    Size.cx = static_cast&lt;long&gt;(ceil(static_cast&lt;float&gt;(Size.cx) / static_cast&lt;float&gt;(52)));
    pDC-&gt;SelectObject(pOldFont);
}
</code></pre>
<p>Abstand von oben zur Überschrift sind 9. Zwischen 1 und 2 sind 20 und Abstand von 2 nach unten 5. Daraus ergibt sich schon mal 34.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296759</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Fri, 01 Jun 2007 15:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Fri, 01 Jun 2007 18:13:34 GMT]]></title><description><![CDATA[<p>DrawText mit DT_CALCRECT schon mal verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296847</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 01 Jun 2007 18:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Tue, 05 Jun 2007 11:04:20 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>DrawText mit DT_CALCRECT schon mal verwendet?</p>
</blockquote>
<p>Ja, das hilft zwar, aber ist die Höhe dann nicht immer gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299184</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Tue, 05 Jun 2007 11:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Tue, 05 Jun 2007 11:24:59 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht ganz was Du möchtest.</p>
<p>Du hast evtl. auch DT_CALCRECT für mehrere Zeilen nicht ganz verstanden. DT_CALCRECT passt die Höhe an die gegebene Weite an.</p>
<p>Bestimme die längste Zeile. Das geht sehr einfach auch mit DT_CALCRECT und DT_SINGLELINE.<br />
Dann erzeuge ein Rechteck und setze die rechte Seite auf den maximalen Wert. Nochmal DT_CALCRECT anschmeissen dann hast Du die maximale Breite ohne Umbruch und die entsprechende Höhe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1299204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1299204</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 05 Jun 2007 11:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Wed, 06 Jun 2007 14:41:44 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Ich verstehe nicht ganz was Du möchtest.</p>
<p>Du hast evtl. auch DT_CALCRECT für mehrere Zeilen nicht ganz verstanden. DT_CALCRECT passt die Höhe an die gegebene Weite an.</p>
<p>Bestimme die längste Zeile. Das geht sehr einfach auch mit DT_CALCRECT und DT_SINGLELINE.<br />
Dann erzeuge ein Rechteck und setze die rechte Seite auf den maximalen Wert. Nochmal DT_CALCRECT anschmeissen dann hast Du die maximale Breite ohne Umbruch und die entsprechende Höhe.</p>
</blockquote>
<p>Die Weite ist breits zur Höhenbestimmung bestimmt.</p>
<pre><code class="language-cpp">pToolBarItem-&gt;m_Width = max((pToolBarItem-&gt;m_Text.size() * Size.cx), 150);
// Size.cx enthält die Daten aus GetCharSize(...)
</code></pre>
<p>Mir fiel allerdings gerade auf, dass es doch tatsächlich Fälle gibt, in denen zwar der TitelText kleiner als der Text ist, aber beides kleiner als die Mindestbreite. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300123</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Thu, 07 Jun 2007 07:52:29 GMT]]></title><description><![CDATA[<p>Und warum hilft Dir DT_CALCRECT nun nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300513</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 07 Jun 2007 07:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Fensterhöhe berechnen on Thu, 07 Jun 2007 08:51:10 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Und warum hilft Dir DT_CALCRECT nun nicht?</p>
</blockquote>
<p>Sorry. Jetzt hilft es nachdem ich den beschriebenen Fall einbeziehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300539</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Thu, 07 Jun 2007 08:51:10 GMT</pubDate></item></channel></rss>