test selber zeichnen und ausrichten: was benutzen
-
hallo leute
ich muss in ein fenster viel text zeichnen, mit transparenten hintergrund.
dafuer muss ich auch die position, die höhe und breite des textes berechnen.
womit mach ich das am besten ?
GDI, GDI+, D2D ?hab mich missl durchs inet gelsen und da hab ich viele vor und nachteile gefunden.
Es gibt auch einige unterschiedliche api funktionen dafuer.auf codeproject hab ich z.b. einen artikel gefunden wo es um die berechnung der breite des textes geht. da ging es darum das die berechnung nicht immer korrekt ist. ging glaub ich um GDI funktionen.
kann mir jenmand da nen tip geben oder gibt es, was textrendering betrifft ein gutes tutorial ?
Meep Meeü
-
Das Thema ist viel zu komplex als dass man eine einfache, für alle passende Antwort geben könnte.
Musst du einfach nur ein paar Paragraphen rausknallen, und nur pro Paragraph die Bounding-Box kennen (bei vorgegebener Maximalbreite)? Oder musst du Layout/Flowing selbst berechnen? Bzw. musst du die Bounding-Boxen von einzelnen Zeichen oder Wörtern (oder allgemein Abschnitten die kleiner als ein Paragraph sind) kennen?
Alles der selbe Font/Grösse/... oder gibt es innerhalb eines Paragraphen Unterschiede?
Muss das ganze device-independent sein?
Was heisst "mit Transparentem Hintergrund"? Brauchst du als Ergebnis dann ne Bitmap mit Alphakanal, oder reicht es wenn du 1x über ein bestehendes Bild drübermalen kannst?
Und wie schnell muss das ganze sein?
Meep Meep schrieb:
auf codeproject hab ich z.b. einen artikel gefunden wo es um die berechnung der breite des textes geht. da ging es darum das die berechnung nicht immer korrekt ist. ging glaub ich um GDI funktionen.
Dir ist schon klar wie wenig wir mit dieser Aussage anfangen können, oder?
-
hola
also ich lad aus einer DB verschiedene texte, die meist aus ein paar wörtern bestehen. je nach aktueller größe des fensters werden sie dann an bestimmten positionen plaziert. die breite der strings brauch ich weil da teilweise common controls mit dabei sind und ich die position und größe berechnen muss.
im groben kann man es mit floating von html elementen vergleichen.
die schriftart und größe ist immer die selbe.
mit transparenten hintergrund meinte ich, das nur der text selbst gerendert wird
und der aktuelle hintergrund nicht angetastet wird.
hab vor längerer zeit mal mit DrawText oder so was probiert gehabt, und da wurde der hintergrund übermalt obwohl ich SetBkColor mit TRANSPARENT verwendet hatte.
aber nagel mich da mal nicht fest, vielleicht hatte ich auch irgend nen fehler drinn.Meep Meep
-
Naja das klingt ja halbwegs einfach.
Dass
SetBkColor TRANSPARENT
nicht funktioniert ist klar. Du musst nämlichSetBk
Mode
TRANSPARENT
verwenden. Dann muss das mitDrawText(Ex)
auch funktionieren.Und wenn du GDI zum Rendern der Texte verwendest (was in einer normalen Win32 Anwendung auch Sinn macht), dann solltest du GDI auch zum "messen" verwenden. Also z.B. ebenfalls
DrawText(Ex)
nur halt mitDT_CALCRECT
.
Wenn du statt dessen eine andere Text-Rendering-Engine verwendest, wirst du nämlich u.U. auch andere Ergebnisse bekommen. Die dann mit der Ausgabe nicht zusammenstimmen, womit das ganze dann keinen rechten Sinn mehr macht.Was das "falsche Breite" angeht: ich kenne nur eine "Seltsamkeit" der GDI Text-Funktionen die dazu passt. Und zwar dass bestimmte Zeichen LINKS aus dem Layout-Rect rausstehen (also quasi in den X < 0 Bereich!). Kann man z.B. mit "Arial Unicode" und arabischen Schriftzeichen sehen.
Bzw. konnte man -- ob das auf aktuellen Windosen immer noch der Fall ist weiss ich nicht, dass ich das gesehen habe ist viele Jahre her.