Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » OpenGL mit der MFC, OnDraw()

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.08.2004, 10:15 Uhr
tronaccount



Hallo,

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.

Habe auch einen Haufen Tutorials dazu gefunden und arbeite mich mit einigen Büchern ins Thema MFC ein. Soweit, so gut.

Jetzt tue ich mich aber mit dieser ereignisorientierten Denkweise noch recht schwer:

Ich habe ein Beispielprogramm gefunden (www.francisshanahan.com/detail.aspx?cid=137), das funktioniert und mir soweit klar ist. Was ich nicht verstehe: Das Programm animiert OpenGL-Objecte. Innerhalb der OnDraw()-Funktion steht folgendes:


C++:

void ....::OnDraw(CDC *pdDC)
{
static int i = 0

i+= 1.11;

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

SwapBuffers(...)

Invalidate(FALSE)
}



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?

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!?

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 sich OnDraw automatisch selbst auf? Kenne mich in den member-Funktionen noch nicht so aus...

Ist wahrscheinlich keine wilde Sache, bei mir hakt's aber noch

Danke für Eure Tipps,

Tobias

Dieser Post wurde am 21.08.2004 um 10:31 Uhr von tronaccount editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2004, 10:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


durch das Invalidate(FALSE) wird OnDraw neu aufgerufen.

Zu deiner ersten Frage: dadurch das i als static deklariert ist, behält i den wert bei

also so:


Code:
1. Aufruf: i = 0 (da i noch nicht initialisiert)
2. Aufruf: i = 1.11
3. Aufruf: i = 2.22
...


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2004, 12:26 Uhr
tronaccount



Okay, danke!

Und daß bei jedem Aufruf der Befehl


C++:
static int i = 0;



aufgerufen wird, führt nicht zur Rücksetzung von i zu Null? Warum nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2004, 12:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


weil die variable eben statisch ist, diese zuweisung wird nur ausgeführt, wenn die variable zum ersten mal initialisiert wird, danach wird die komplette anweisung sozusagen ignoriert
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: