Textlänge



  • Ich habe noch eine Frage bezüglich der Textlänge.
    Man nehme einen beliebigen Text, initialisiere dazu eine passende Schrift und nun möchte man diesen Text zentriert in das DX-Fenster plazieren.

    Meine Lösung funktioniert nicht

    m_cFont->DrawDXText ( szString, m_cTools->GetFontColor ( ).White, m_nWidth / 2 - ( lstrlen ( szString ) / 2 ), m_nHeight / 2 + 100, 0, 
      0, m_cFont->GetTahomaNormal14 ( ));
    

    Zumindestens habe ich das Gefühl, der Text ist nicht wirklich mittig.
    Wie kann ich die Pixellänge eines Schriftzuges bestimmen, egal welche Schriftart, grad, größe initialisiert worden ist.



  • ich bin mir nicht ganz sicher da auch ich noch nicht ganz fit darin bin aber so wie es aussieht teilst du ja die länge des Strings und nicht die Anzahl der Buchstaben im String durch 2. Es ist nähmlich ein Unterschied.

    Gruß



  • Wird wohl an deiner Höhenberechnung liegen. Du weißt nämlich nicht wieviele Pixelspalten ein Font einnimmt. Falls du das irgendwie rausbekommen kannst (mit DirectX) dann einfach: ((m_nHeight / 2) - (fontsize / 2)). Musste halt mal schauen wegen dem Fließkommawert.



  • lstrlen(szString) != TextBreiteInPixel



  • Ich weiß, daß lstrlen ( ... ) nicht die Textlaufweite ermittelt! Das wollte ich eigentlich auch gar nicht wissen, sondern viel mehr, wie ich sie berechnen kann, unter Berücksichtigung der Schriftgröße etc. pp.
    Ich habe vor langer, langer Zeit mal sowas gesehen, aber leider ist mir entfallen, wo. 😕



  • Gib mal bei google C++ Reference ein(oder nimm den hier:http://www.cppreference.com/wiki/), eine sehr schöne Seite und schau dann einfach im Register strings was für Funktionen diese Klasse anbietet.

    Gruß



  • socco schrieb:

    Gib mal bei google C++ Reference ein(oder nimm den hier:http://www.cppreference.com/wiki/), eine sehr schöne Seite und schau dann einfach im Register strings was für Funktionen diese Klasse anbietet.

    Gruß

    Da das absolut nichts mit Standard C++ zu tun hat, wird er da nichts finden.


Anmelden zum Antworten