G
Also, ich bin gerade dabei, einen Funktionsplotter zu "erschaffen".
Aus Unwissentheit habe ich mit GDI angefangen und Rotation und Skalierung selbst implementiert (wusste nicht, dass es schon diese Funktionen gab, war aber eine gute Übung^^), welche ich trotzdem eigentlich auch weiterhin benutzten wollte.
Ich beginne damit, dass ich das Koordinatensytem eines Gerätekontexts (CDC) so einstelle, dass es sich wie ein kartesisches verhält (y-Achse nach oben, x-Achse nach rechts, Einheiten sind Pixel):
CRect ClientRectPP;
GetClientRect(ClientRectPP);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(ClientRectPP.right, ClientRectPP.bottom);
dc.SetViewportExt(ClientRectPP.right, -ClientRectPP.bottom);
dc.SetViewportOrg(CoordSystem->GetCosMovement()->GetOrigin());
Gut, es hat bisher auch immer alles gut funktioniert, Performance war selbst unoptimiert und im Debug-Modus akzeptabel.
Dann bin ich allerdings zu Polarkoordinaten gekommen, wo ich für das Koordinatensystem gedrehte Ellipsen zeichnen muss. Dadurch bin ich dann zu GDI+ gekommen, da dieses auch noch Antialiasing bietet (was natürlich nicht schlecht ist).
Nun gut, die rotierten Ellipsen habe ich hingekriegt, indem ich "die Welt" nur für die Ellipsen drehe, sonst halt das ganze bei 0° belasse (wegen meinen eigenen Funktionen).
Als ich dann die "Text-Funktionen" (Einheiten, etc.) portieren wollte, bin ich auf folgendes Problem gestoßen: Alle Zeichen wurden auf dem Kopf gezeichnet...
Gibts da eine einfache Lösung zu? Die "Welt" um 180° einfach zu drehen hat nichts gebracht (außer, dass sich die Zeichen an einer anderen Stelle befanden).
Außerdem ist mir aufgefallen, dass die Performance (ohne AntiAliasing) ziemlich in den Keller gegangen ist... Ist GDI+ wirklich so viel langsamer als die alte GDI?
Soll ich bei GDI bleiben und lieber CDC::ModifyWorldTransform() benutzten (auch wenn ich mich noch nicht mit Matizen auskenne), um die Ellipsen zu zeichnen (auch wenn ich dann nicht einfach AA zuschalten kann), oder soll ich Text per GDI und den Rest per GDI+ implementieren, oder reines GDI+ verwenden (aber wie dann das fixen + performance)?
Ach ja, und ich weis, absolut Offtopic, aber: Die Offline-MSDN für VS2008-Service Pack 1 ist bei mir fehlerhaft: So gut wie alle Links gehen nicht (wenn ich z.B. auf "XFORM" in "CDC::ModifyWorldTransform" klicke, kommt nur "Die Informationen wurden nicht gefunden"). Das ist bei den meisten Verlinkungen so. Weis jemand einen Fix dafür?