Text um 90° drehen



  • Hi,
    ich möchte einen Text um 90° gedreht ausgeben.
    Also,
    ich hatte mir das so vorgestellt.

    HFONT font=CreateFont(....,90,...); // der 3. oder 4. Parameter gibt den Winkel zwischen Text und x-Achse an

    SelectFont(font);
    TextOut(hdc,x,y,"Text",längetext);

    Leider erzeugt das keinen um 90° gedrehten Text, sondern einen "ganz normalen" Text.

    Kann mir einer helfen?

    MfG



  • Enrweder du machst dir nen eigenen Font wo alle Buchstaben um 90° gedreht sind, oder du arbeitest mit Direct-X, Dort würde ich das folgender maßen machen.

    Du schreibst deinen Text in eine Offscreen-Surface liest dort dann die Zeile Pixel für Pixel aus, und gibst diese Zeile dann vertikal in der Primary-Surface wieder, währe ganz einfach.

    Da du aber mit der WinAPI arbeiten willst, wirst du dir wahrscheinlich nen eigenen Font machen müssen.



  • Und wie erstelle ich einen?



  • aargh, meinst du jeder der vertikalen text ohne dx darstellt hat sich nen eigenen font gebastelt? So ein Bullshit...

    Auch in WinApi kann man Pixel einzeln ansprechen und neu blitten.
    Warhscheinlich gibts sogar noch ne einfachere Möglichkeit... keine Ahung aber du brauchst mit Sicherheit nich extra nen Font.



  • Das funktioniert z.B. mit CreateFontIndirect(). Vorher setzt Du in der LOGFONT-structure den Wert "lfOrientation" auf den gewünschten Winkel - ist ähnlich CreateFont()

    Hast Du auch beachtet, das der Wert mit 1/10 Grad angegeben wird ???

    Funktioniert bestens !

    So far ... RockNix///

    [ Dieser Beitrag wurde am 24.10.2001 um 14:10 Uhr von RockNix editiert. ]



  • Kannst du mir dann erklären, warum folgender Code zur Bearbeitung der WM_PAINT Nachricht nicht funktioniert?

    Auszug:
    HFONT font;
    LOGFONT struc;
    struc.lfOrientation=900;
    font=CreateFontIndirect(&struc);
    if (font==NULL)
    MessageBox(hwnd,"Fehler","Fehler",0);
    SelectObject(hdc,font);
    TextOut(hdc,10,10,"90° gedreht",5);



  • Du musst doch noch viel mehr Variablen der Structur LOGFONT einen Wert zuweisen. (Die hat ziemlich viele Werte!)



  • Ich bin ja lieb:

    LOGFONT lf;
            lf.lfHeight=18;
            lf.lfWidth=9;
            lf.lfEscapement=-900;
            lf.lfOrientation=3;
            lf.lfWeight=300;
            lf.lfItalic=false;
            lf.lfUnderline=false;
            lf.lfStrikeOut=false;
            lf.lfCharSet=HANGEUL_CHARSET;
            lf.lfOutPrecision=OUT_TT_ONLY_PRECIS;
            lf.lfClipPrecision=CLIP_MASK;
            lf.lfQuality=PROOF_QUALITY;
            lf.lfPitchAndFamily=DEFAULT_PITCH;
            lf.lfFaceName[LF_FACESIZE]='D';
            hFont = CreateFontIndirect( &lf);
    

    das würde ich in der WM_CREATE Message machen und hFont als static HFONT und beim beenden DeleteObject(hFont); aufrufen.
    In der WM_PAINT Nachricht würde ich das dann noch so machen:

    HFONT old;
            old=(HFONT)SelectObject(hdc,hFont);
            SetBkMode(hdc,TRANSPARENT);
            TextOut(hdc,20,10,"WinAPI um 90°",13);
            SelectObject(hdc,old);
    

    Dann ist wird alles schön Sauber hinterlassen, wie es war images/smiles/icon_wink.gif und Windows ist zufrieden


Anmelden zum Antworten