Die Dokumentation [ here ] sagt, wenn wir die DT_CALCRECT
Flag verwenden, dann würde unten getan: Wie wird das 'DrawText' Rechteck genau in den Text eingefügt?
Bestimmt die Breite und Höhe des Rechtecks
. Wenn mehrere Textzeilen vorhanden sind, verwendet DrawText die Breite des Rechtecks , auf die der Parameter pRect zeigt, und erweitert die Basis des Rechtecks , um die letzte Textzeile zu begrenzen. Wenn es nur eine Zeile Text gibt, ändert DrawText die rechte Seite des Rechtecks, so dass das letzte Zeichen in der Zeile begrenzt. In beiden Fällen gibt DrawText die Höhe des formatierten Texts zurück, zeichnet jedoch den Text nicht.
Es ist aus der Beschreibung klar, dass DT_CALCRECT
wird die DrawText
nicht machen, den Inhalt zu ziehen, so dass ich so etwas wie
DrawTextExA(hdc, fromsqlite->descrip, -1, &rect, DT_CALCRECT, NULL);
// On debugging, I can see that rect is being modified in the above step.
if (DrawTextExA(hdc, fromsqlite->descrip, -1, &rect,
DT_LEFT | DT_EDITCONTROL | DT_WORDBREAK, NULL) == 0) {
MessageBox(NULL, L"DrawText failed", NULL, MB_OK);
}
Das Problem ist jetzt soll, dass die Breite des Rechtecks tun sollte repariert sein. Also möchte ich nur die Basis des Rechtecks rect
erweitert werden. In meinem Fall wird jedoch fromsqlite->descrip
, die aus einer sqlite
Datenbank abgerufen wird immer als single-line
Text betrachtet.
Jede Hilfe wird geschätzt.
Prost Kumpel! Ich untersuche das. 'DrawTextA' ist hier beabsichtigt, da ich mich streng mit ANSI-Eingaben beschäftige. – sjsam
Nun, das hat funktioniert! Eine schöne Technik in der Tat. Aber ich habe nicht das 'DT_EDITCONTROL'-Flag verwendet, das ich hier nicht brauche. – sjsam
@sjsam Sie verwenden' DT_EDITCONTROL' in Ihrem Beispiel. Wie diese Antwort korrekt zeigt, müssen Sie beim ersten Aufruf von 'DrawText' die gleichen Flags verwenden wie beim zweiten Aufruf von' DrawText', andernfalls ist das berechnete Rechteck falsch. – zett42