<?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[OpenGL mit der MFC, OnDraw]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich seit kurzem mit der Windows-Programmierung über die MFC mit dem Ziel, eine Anwendung mit einer OpenGL-Darstellung dreidimensionaler Objekte zu erstelln.</p>
<p>Habe auch einen Haufen Tutorials dazu gefunden und arbeite mich mit einigen Büchern ins Thema MFC ein. Soweit, so gut.</p>
<p>Jetzt tue ich mich aber mit dieser ereignisorientierten Denkweise noch recht schwer:</p>
<p>Ich habe ein Beispielprogramm gefunden (<a href="http://www.francisshanahan.com/detail.aspx?cid=137" rel="nofollow">www.francisshanahan.com/detail.aspx?cid=137</a>), das funktioniert und mir soweit klar ist. Was ich nicht verstehe: Das Programm animiert OpenGL-Objecte. Innerhalb der OnDraw()-Funktion steht folgendes:</p>
<pre><code class="language-cpp">void ....::OnDraw(CDC *pdDC)
{
static int i = 0

i+= 1.11;

.
.
.
//Jetzt folgen OpenGL-Aufrufe mit i als Winkel für die Objekte

SwapBuffers(m_myhDC);

Invalidate(FALSE)
}
</code></pre>
<p>Also wird durch WM_PAINT die OnDraw-Funktion aufgerufen und dabei die Variable i inkrementiert, wodurch die GL-Objekte andere Winkel bekommen und sich beim nächsten OnDraw() gedreht darstellen. Ist das richtig?</p>
<p>Aber normalerweise müßte doch eine Fehlermeldung kommen, weil i bei jedem Aufruf von i neu definiert wird!? Oder hat das was mit static zu tun!?</p>
<p>Außerdem: Wodurch wird überhaupt sichergestellt, daß OnDraw() regelmäßig aufgerufen wird? Muß dazu nicht das Fenster verschoben/die Größe verändert werden? Oder ruft die Funktion sich selbst irgendwo wieder auf - was mit dem Invalidate()?</p>
<p>Ist wahrscheinlich keine wilde Sache, bei mir hakt's aber noch <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>
<p>Danke für Eure Tipps,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83476/opengl-mit-der-mfc-ondraw</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 09:38:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83476.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Aug 2004 08:00:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OpenGL mit der MFC, OnDraw on Sat, 21 Aug 2004 08:28:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich seit kurzem mit der Windows-Programmierung über die MFC mit dem Ziel, eine Anwendung mit einer OpenGL-Darstellung dreidimensionaler Objekte zu erstelln.</p>
<p>Habe auch einen Haufen Tutorials dazu gefunden und arbeite mich mit einigen Büchern ins Thema MFC ein. Soweit, so gut.</p>
<p>Jetzt tue ich mich aber mit dieser ereignisorientierten Denkweise noch recht schwer:</p>
<p>Ich habe ein Beispielprogramm gefunden (<a href="http://www.francisshanahan.com/detail.aspx?cid=137" rel="nofollow">www.francisshanahan.com/detail.aspx?cid=137</a>), das funktioniert und mir soweit klar ist. Was ich nicht verstehe: Das Programm animiert OpenGL-Objecte. Innerhalb der OnDraw()-Funktion steht folgendes:</p>
<pre><code class="language-cpp">void ....::OnDraw(CDC *pdDC)
{
static int i = 0

i+= 1.11;

.
.
.
//Jetzt folgen OpenGL-Aufrufe mit i als Winkel für die Objekte

SwapBuffers(m_myhDC);

Invalidate(FALSE)
}
</code></pre>
<p>Also wird durch WM_PAINT die OnDraw-Funktion aufgerufen und dabei die Variable i inkrementiert, wodurch die GL-Objekte andere Winkel bekommen und sich beim nächsten OnDraw() gedreht darstellen. Ist das richtig?</p>
<p>Aber normalerweise müßte doch eine Fehlermeldung kommen, weil i bei jedem Aufruf von i neu definiert wird!? Oder hat das was mit static zu tun!?</p>
<p>Außerdem: Wodurch wird überhaupt sichergestellt, daß OnDraw() regelmäßig aufgerufen wird? Muß dazu nicht das Fenster verschoben/die Größe verändert werden? Oder ruft die Funktion sich selbst irgendwo wieder auf - was mit dem Invalidate()?</p>
<p>Ist wahrscheinlich keine wilde Sache, bei mir hakt's aber noch <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>
<p>Danke für Eure Tipps,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587565</guid><dc:creator><![CDATA[tronaccount]]></dc:creator><pubDate>Sat, 21 Aug 2004 08:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to OpenGL mit der MFC, OnDraw on Sat, 21 Aug 2004 09:10:15 GMT]]></title><description><![CDATA[<p>das hat was mit static zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587591</guid><dc:creator><![CDATA[......]]></dc:creator><pubDate>Sat, 21 Aug 2004 09:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to OpenGL mit der MFC, OnDraw on Sat, 21 Aug 2004 10:28:50 GMT]]></title><description><![CDATA[<p>... und was ...?</p>
<p>Schließlich wird jedesmal i zu Null gesetzt beim Aufruf, oder...!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587631</guid><dc:creator><![CDATA[tronaccount]]></dc:creator><pubDate>Sat, 21 Aug 2004 10:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to OpenGL mit der MFC, OnDraw on Sat, 21 Aug 2004 10:30:48 GMT]]></title><description><![CDATA[<p>... okay, und was? ...</p>
<p>Müßte nicht eigentlich bei jedem Aufruf das i zu Null gesetzt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587632</guid><dc:creator><![CDATA[tronaccount]]></dc:creator><pubDate>Sat, 21 Aug 2004 10:30:48 GMT</pubDate></item><item><title><![CDATA[Reply to OpenGL mit der MFC, OnDraw on Sat, 21 Aug 2004 19:51:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>tronaccount schrieb:</p>
<blockquote>
<p>Müßte nicht eigentlich bei jedem Aufruf das i zu Null gesetzt werden?</p>
</blockquote>
<p>aber nein, das ist ja das Wesen von static-Variablen, sie werden nur einmal initialisiert und behalten dann ihren aktuellen Wert über Funktionsaufrufe hinweg immer bei.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587976</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Sat, 21 Aug 2004 19:51:21 GMT</pubDate></item></channel></rss>