text in rechteck einpassen und hoehe herausbekommen



  • hola leute

    ich muesste einen text in ein rechteck setzen das eine bestimmte breite hat. wenn der text nun zu lang ist, muss der text umgebrochen werden. das ginge ansich mit DrawText auch, jedoch muesste ich vor dem malen schon mal wissen wie viele zeilen bzw. pixel der text dann hoch ist, weil ich das in eine selbstgezeichnete tabelle reinbekommen moechte. jemand ne idee wie ich das am besten bewerkstellige ?

    cermy

    Meep Meep



  • Zeichne es in einem Temp. Feld, welches nicht Sichtbar ist und überprüfe die höhe, danach Zeichnest du das eigentliche Feld



  • und wie bekomme ich da dann die groesse raus ? das ist ja nichts anderes als ein bild.

    Meep Meep



  • GetTextExtentPoint32



  • re

    mein problem hab ich nun teilweise geloest. jedoch brauch ich noch zur berechnung der gesammthoehe noch den zeilenabstand zwischen den Zeilen. wo bekommt man den her ? oder werden die zeile ohne abstand ,bei DrawText(DT_WORDBREAK), untereinander geschrieben ?

    Meep Meep



  • GetTextMetrics



  • ho flenders

    dachte ich zuerst auch, jedoch hab ich da nix gefunden.
    was genau von der strktur textmetric soll da der zeilenabstand sein ?

    Meep Meep



  • Bin mir da auch nicht ganz so sicher, aber ich finde, dass tmExternalLeading gar nicht so schlecht aussieht:

    Specifies the amount of extra leading (space) that the application adds between rows.



  • Mit DT_CALCRECT als letzten Parameter für DrawText() müsste es ungefähr so gehen:

    char* sText = "Dieser Text erstreckt sich, falls nötig, über mehrere Zeilen.";
    int   iLenText = strlen(sText);
    RECT  rc;
    
    /* 90 sei vorgegebenene (Maximal-)Breite */
    SetRect(&rc, 0, 0, 90, 0);
    
    /* DrawText() zum Berechnen des Platzbedarfs aufrufen,
       wg. DT_CALCRECT aber noch keine Textausgabe */
    DrawText(hDc, sText, iLenText, &rc, DT_CALCRECT);
    
    /* rc.bottom enthält nun die erforderliche Gesamthöhe,
    rc.right die exakte Breite (nun wahrscheinlich etwas geringer als oben vorgegeben).
    Hier ggf. Code zur Größenanpassung des Controls einfügen */
    
    /* Und jetzt links-ausgerichtete Textausgabe */
    DrawText(hDc, sText, iLenText, &rc, DT_LEFT);
    

    Walter Z


Anmelden zum Antworten