DrawText mit DT_PATH_ELLIPSIS



  • Hi!
    Ich habe ein CDC-Objekt, auf das ich Text mittels DrawText ausgeben möchte. Der Text besteht aus zwei Teilen, dem unwichtigeren Teil (der jedoch vorne stehen muss), und dem wichtigeren Teil, der hinten steht. Der unwichtigere Teil kann gekürzt werden, und das übernimmt DrawText auch automatisch, wenn ich DT_PATH_ELLIPSIS angebe. Mit dieser Flag wird das, was vor \ steht, gekürzt. Das ist zwar recht praktisch, aber \ wird dann eben auch ausgegeben.

    Das will ich natürlich umgehen. Bis jetzt habe ich das so gelöst, das ich zuerst eine Ausgabe mit den Flags DT_PATH_ELLIPSIS und DT_MODIFY_STRING mit der Hintergrundfarbe durchführe, dann \ wieder aus dem String entferne, und diesen String dann mit normaler Textfarbe ausgebe.
    Diese Lösung ist aber imho weder elegant, noch performant. Welche Alternativen gibt es?

    MfG, phreaking



  • Wenn Du zusätzlich den Parameter DT_CALCRECT angibst, wird gar nix gezeichnet, aber den '\'wegmachen musst Du manuell!



  • Mit DT_CALCRECT wird das Rechteck aber auf die richtige Größe gebracht, ich will aber nicht, das das Rechteck an den Text angepasst wird, sondern das der Text an das Rechteck angepasst wird...

    MfG, phreaking



  • Dann halt manuell:

    const int maxWidth;  // maximale Länge
    LPCTSTR str = "abcded\\ghijklm", strBSPos = NULL;
    for( int i=_tcslen( str)-1; i>=0; i--)
    {
      if( str[i] == '\\')
        strBSPos = str+i;
      if( dc.GetTextExtent( str+i).cx >= maxWidth)
        break;
    }
    dc.DrawText( strBSPos ? strBSPos+1 : str, ...);
    

    Nachtrag: Kleiner Fehler im Code!

    [ Dieser Beitrag wurde am 01.11.2002 um 15:39 Uhr von RenéG editiert. ]


Anmelden zum Antworten