FAQ "Text um 90° drehen" - Frage



  • Kleine Frage an Daniel Schumann, falls er noch unter uns weilt:

    C/C++ Code:
    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 [img]images/smiles/icon_wink.gif[/img] und Windows ist zufrieden

    Vielen Dank dafür erstmal, aber wie bekomme ich nun meinen vertikalen
    Text dazu, an der Fensterkante einen Zeilenumbruch zu machen ?
    DrawText() mit DT_WORDBREAK funktioniert mit dem font von oben einfach nicht.
    Wäre toll, wenn sich auf das ausgegraben Thema nochmal einer meldet,

    CU

    Biff



  • Ich hab es jetzt nicht getestet, aber kann mir das nicht so recht vorstellen 🙄
    Dein RECT hast du aber schon richtig angegeben, oder 🤡

    Ansonsten musst du dir das Ganze eben selber coden 😉



  • Bin noch da 🙂

    MSDN schrieb:

    The DrawText function supports only fonts whose escapement and orientation are both zero.

    Musst dir so eine Funktion, wie flenders schon schrieb, also selber bauen. So in der Art:

    void MyDrawText(HDC hdc, TCHAR *string, unsigned int TextHeight, int x, int y){
        TCHAR *nextCR;
        while(*string!='\0'){
            nextCR=StrChr(string, '\n');
            if(nextCR){
                TextOut(hdc, x, y, string, (nextCR-string)/sizeof(TCHAR));
            }
            else{//kein CR mehr im String
                TextOut(hdc, x, y, string, strlen(string));
                return;
            }
            x-=TextHeight;//evtl. +=TextHeight, je nachdem in welche Richtung gedreht wurde
            string=nextCR+1;
        }
    }
    

    Keine Garantie, dass es so geht, habs nicht getestet, aber so ähnlich müsste es gehen. (Ich hoffe mal die String-Funktionen unterstützen UNICODE).

    Viel Spaß noch



  • Danke, hab ich mir irgendwie schon gedacht. Die Remarks zu DrawText() muss ich wohl überlesen haben. *schäm*
    Danke auch für die Codeschnipsel, da ich aber auch die einzelnen Wörter abschneiden muss, falls sie zu lang sind komme ich um GetTextExtent32() wohl nicht herum. 😡
    Allzu viel Spaß werd ich dabei wohl nicht haben, 😞

    CU

    biff



  • du könntest ja auch den Text gerade lassen und dann, natürlich mit DrawText, in ein Bitmap rendern und dieses um 90° gedreht ausgeben. Wäre evtl. ein anderer Lösungsweg, jenachdem, was dir einfacher erscheint.



  • Mit dieser Methode würde der vertikale Text in der rechten oberen Ecke anfangen und nach links hin umbrechen. Er will aber vermutlich, dass der Text links oben anfängt und nach rechts hin umbricht.


Anmelden zum Antworten