Zeichensalat bei folgender Funktion
-
int OwnDrawText(HDC hDC, const char* szText, RECT* rect, unsigned int iFlags) { int i = 0; int iSpace = 80; int iVSpace = 20; int iChars = 0; int iWordLength = 0; int iCharsperLine = 0; rect->top = iVSpace; SIZE word; SIZE line; int iLastLine = 0; while(++i != lstrlen(szText)) { if(szText[i] == ' ') { iWordLength = i - iChars; char szWord[iWordLength]; int iTemp=0; for(; iChars <= i; ++iChars) { szWord[iTemp]=szText[iChars]; ++iTemp; } GetTextExtentPoint32(hDC, szWord, iWordLength, &word); char szLine[((i-iLastLine)-iWordLength)]; iTemp = 0; for(int a = iLastLine; a <= (i - iWordLength); ++a) { szLine[iTemp] = szText[a]; ++iTemp; } GetTextExtentPoint32(hDC,szLine,lstrlen(szLine), &line); if((line.cx + word.cx + iSpace) >= rect->right) { DrawText(hDC, szLine, lstrlen(szLine), rect, iFlags); rect->top += word.cy; iCharsperLine = 0; iLastLine=i; } iCharsperLine += iChars; } } char szLine[i]; int iTemp = 0; for(int a = iLastLine; a <= i; ++a) { szLine[iTemp] = szText[a]; ++iTemp; } DrawText(hDC, szLine, lstrlen(szLine), rect, iFlags); }
Das eigentliche Ziel ist DrawText um automatische Linebreaks zu erweitern, leider wird bei einem Zeilenumbruch vom (neuen) letzten Wort der gebrochenen Zeile immer nur der 1. Buchstabe + ein wenig Buchstabensalat angezeigt, und da ich den Fehler auch nach dem 10. Umsachreiben nicht gefunden hab dacht ich mit ich Post mal hier...
[ Dieser Beitrag wurde am 28.12.2002 um 18:20 Uhr von Psycho_Dad editiert. ]
-
Schau dir doch mal DrawTextEx an, das macht glaube ich schon genau das, was du brauchst
-
*msdn* hmm... aber ich wuerd trotzdem gern wissen was ich falsch gemacht hab...
-
Ich glaube das liegt daran, dass ud bei szWord und szLine die abschließenden NUL-Zeichen vergessen hast!
-
Oh ja, zummindest der Zeichensalat ist jetzt weg, leider wird vom letzten Wort vorm dem Linebreak immer noch nur der 1. Buchstabe angezeigt...
-
Mit was für einen Compiler arbeitest du überhaupt?
Bie mir meckert er nämlich bei char szWord[iWordLength];!
Da müsste ja normalerweise auch was mit malloc oder new stehen, oder lieg ich da flasch
-
Dev-c++, und wenn ich hier:
char szLine[((i-iLastLine)-iWordLength)]; iTemp = 0; for(int a = iLastLine; a <= (i - iWordLength); ++a)
das -iWordLegth rausnehme funktioniert die funktion auch endlich