Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# .net: versch. Points wofür? (https://www.delphipraxis.net/143618-net-versch-points-wofuer.html)

jfheins 19. Nov 2009 13:40


.net: versch. Points wofür?
 
Hallo,
ich stolpere gerade über folgendes: Es gibt 3 verschiedene Point-Strukturen in 2 Namespaces.

Und zwar System.Drawing.Point, System.Drawing.PointF und System.Windows.Point.

Was ich bis jetzt an Unterschieden habe:
Grundtypen (int vs. float vs. double)
Die zugehörigen Typen aind auch anders. Windows.Point hat einen Windows.Vector und Drawing.Point hat Drawing.Size (bzw. SizeF)
Die Zeichen-Routinen brauchen die Drawing.Point(F) (logisch, ist ja auch der gleiche namespace)

Jetzt wüsste ich gerne warum man diese Funktionalität dupliziert hat und wann man welchen am besten verwendet.

Oder ist es am Ende ein "Oh das ist ja ein andere namespace, die könnten ihren Point ja ändern also machen wir unseren eiegenen Point" :?:

Medium 19. Nov 2009 14:30

Re: .net: versch. Points wofür?
 
Naja letztlich geht's schon um 2 recht unterschiedliche Dinge. Ein Mal die GDI+, und ein Mal WPF. Selbst wenn die Typen intern identisch wären, würde ein jeweils eigener wohl OOP-technisch sinnvoll (oder zumindest okay) sein, so es denn keinen weiteren gleichartigen Typen in den Namespaces gibt die beide gemeinsam referenzieren. So, oder in der Version die MS gewählt hat wäre eine Abhängigkeit zweier eher nebeneinander stehender Namespaces vermieden. Dadurch kannst du dann auch prinzipiell leicht ein System unterstützen, dass GDI+, aber keine WPF implementiert (gibt's glaub ich nicht, aber wäre ja möglich). Du könntest aber auch auf die Idee kommen statt WPF ein anderes Fenstersystem einzusetzen (GTK+ z.B.), willst aber auf die GDI+ nicht verzichten - ginge, ohne Teile der WPF zu brauchen. Joa, so die Ecke wäre jetzt mein Erklärungsansatz :)

OregonGhost 19. Nov 2009 17:43

Re: .net: versch. Points wofür?
 
Medium hat's im Prinzip schon. Hier noch als Ergänzung zur Frage, wann man welches nimmt:

System.Windows und System.Drawing haben nichts miteinander zu tun und haben keinerlei Abhängigkeiten untereinander. Zumindest ist das der Plan. Wenn du also System.Drawing oder System.Windows.Forms benutzt, dann ist System.Drawing.Point dein Freund. Verwendest du hingegen WPF, ist es System.Windows.Point. Wenn du beides verwendest (ungewöhnlich, außer wenn du eine Anwendung teilweise portierst bzw. neue Funktionalität in WPF bereitstellst), musst du eben das verwenden, was gerade passt. Das coole ist, dass für eine reine WPF-Anwendung (zumindest theoretisch) die System.Drawing.dll nicht geladen werden muss.

WPF verwendet an solchen Stellen immer double, weil es auf dem Konzept von device independent pixels aufsetzt, also quasi virtuellen Pixeln. Da kann man schonmal krumme Werte bekommen, wenn man flüssig skalierbar sein will. SWF hingegen kennt eigentlich nur das Konzept von ganzen Pixeln und verwendet deshalb meistens ganzzahlige Werte, also ints. Für einige Berechnungen und Zeichnungen muss man hingegen auch mal halbe Pixel zeichnen können, also hat man sich damals für die float-Varianten entschieden. Das kommt gewöhnlich aber nur in System.Drawing und nicht in den Forms zum Einsatz, weil SWF wie gesagt auf ganzen Pixeln aufsetzt. Praktischerweise kann man aber PointF und Point ineinander konvertieren (ebenso wie RectangleF und Rectangle).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz