Länge eines Strings in Pixel?



  • Hallo zusammen!

    Sofort zur Sache.
    Ich will prüfen, ob die Breite eines Static-Feldes für die vollständige Darstellung eines Strings reicht.
    Dabei gehe ich so vor:

    ...
    CDC* pDC = GetDC();
    CSize csSize = pDC->GetTextExtent(m_strText);
    int iStringWidth = csSize.cx;
    

    Laut MSDN, kriege ich die Stringdimensionierung (als Rückgabewert der Funktion GetTextExtent()) in "logical units". Ich brauche aber diesen Wert in Pixel, um mit der Breite des Static-Feldes vergleichen zu können. Wie kann ich es konvertieren und was ist eigentlich dieses "logical unit"?

    Danke im voraus.



  • Ein "Logical Unit" kann eingestellt werden. Am Bildschirm werden in der Regel "Logical Units" in Pixeln angegeben... Bei dir kannst du sicher sein, dass du Pixel zurückbekommst, da du den DC eines Fensters verwendest...



  • Eben nicht!
    Sonst hätte ich nicht gefragt!
    Ich habe in einem Static-Feld einen Text geschrieben, der ca. 80% der Feldbreite annimmt. Dabei war der Wert für den String größer, als die Breite des Static-Feldes



  • Hi,

    und woher weißt du, wie breit dein Static ist? Hoffentlich nicht aus dem Resourceneditor. Der verwendet nämlich eine eigene Einheit.

    Das nur nebenbei...

    Grüße, Volle.



  • Na ja...
    **Wahrscheinlich doch...
    Ich nehme GetWindowRect() von dem Control.

    Dann formuliere ich meine Frage anders: wie bringe ich die beiden Werte auf gleichen Einheiten?**



  • GetWindowRect gibt aber Pixel zurück. Dein Fehler ist: Du musst in dem DC den Font auswählen, welchen das Control benutzt... Sonst bekommst du die Breite von dem Text in der fixen Systemschriftart zurück. Und die ist viel breiter als z.B. "Ms Sans Serif", da jedes Zeichen gleich breit ist und die Breite nicht variieren kann...



  • Danke!
    Es hat mir zwar nicht direct geholfen, aber auf ein Paar Ideen gebracht



  • Hol dir den FOnt von dem Static und selektier ihn vorher in deinen DC



  • @Laie: Zur Verständnis: Schau dir mal etwas zum Thema "Dialog Dimensions" in der MSDN an.



  • @WebFritzi
    Ich glaub nicht, dass Dialog Units zurückgegeben werden...


Anmelden zum Antworten