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 😉


Anmelden zum Antworten