DrawText formatieren



  • Unter Windows CE hab ich die Funktion in der MSDN-Library auch nicht gefunden, aber CreateFontIndirect gibt es da! Ist ja fast das gleiche, nur dass die einzelnen Parameter eben nicht direkt, sondern in einer LOGFONT-Stuktur übergeben werden 🙂



  • Nach zwei Seiten kommt er damit raus, dass er für CE programmiert. 🙄



  • 🙄



  • Original erstellt von <Noname01>:
    und buildfont hat die api net (winapi für windows-ce)

    Arrrgh! 😡 Das ist ja auch meine Funktion, du ..... ! Diese benutzt allerdings CreateFont(). Also jetzt mal für dich:

    // Definitions of font formats
    #define  FF_NORMAL     0
    #define  FF_BOLD       2
    #define  FF_ITALIC     4
    #define  FF_UNDERLINE  8
    #define  FF_STRIKEOUT  16
    
    HFONT BuildFont(LPTSTR lpszName, UINT uiPointSize, WORD wFontFormat)
    {
       LOGFONT lf;
       BYTE    bBold, bIt, bUl, bStrikeout;
       INT     iWeight;
       HFONT   hFont;
    
       bBold       = (BYTE)(wFontFormat & FF_BOLD);
       bIt         = (BYTE)(wFontFormat & FF_ITALIC);
       bUl         = (BYTE)(wFontFormat & FF_UNDERLINE);
       bStrikeout  = (BYTE)(wFontFormat & FF_STRIKEOUT);
       iWeight     = bBold ? FW_BOLD : FW_NORMAL;
    
       lf.lfWeight = -MulDiv(uiPointSize, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
       lf.lfWidth  = 0;
       lf.lfEscapement = 0;
       lf.lfOrientation = 0;
       lf.lfWeight = iWeight;
       lf.lfItalic = bIt;
       lf.lfUnderline = bUl;
       lf.lfStrikeOut = bStrikeout;
       lf.lfCharSet = ANSI_CHARSET;
       lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
       lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
       lf.lfQuality = DEFAULT_QUALITY;
       lf.lfPitchAndFamily = DEFAULT_PITCH;
       lstrcpy(lf.lfFaceName, lpszName);
    
       hFont = CreateFontIndirect(&lf);
    
       return hFont;
    }
    


  • hab es jetzt anders gemacht. hab den text mit paint als bitmap gespeichert und das zeich ich jetzt in mein fenster an



  • Alter, ich erwürg dich gleich! 😡 😡 😡 Was meinst du, wie lange ich an dieser besch... Funktion gebastelt habe. Sorry, aber du bist echt ein Blödmann. :o



  • :p hab mir da einen kleinen Scherz unter Nonames Nickname erlaubt. Das war nicht das original. 😉



  • Na, ich hoffe doch...



  • passt nicht aber ich bin durch diesen thread darauf gekommen..

    @WebFritzi: hast du zufällig mal was mit Pascal / Delphi zu schaffen gehabt?!

    zitat von seiner page: "Mit Hilfe der Unit Fonts soll man[...]"



  • Erarbeitet wohl mit dem Builder.



  • @Albert: Jo, Luckie hat recht. Eine Unit ist im BCB eine cpp-Datei mitsamt einer h-Datei für die Definitionen.



  • Original erstellt von WebFritzi:
    @Albert: Jo, Luckie hat recht. Eine Unit ist im BCB eine cpp-Datei mitsamt einer h-Datei für die Definitionen.

    aha! ich benutz den BCB net desshalb wust ich es nicht..

    *freu* wieder was dazu gelernt 🙂



  • wenn es euch interessiert.
    ich hab die farbe mit settextcolor(...) gemacht.
    der spaß mit setfontindirect geht jetzt.
    danke.



  • der compiler schimpft zwar net aber es passiert auch nix, bis auf das der text rot is. was stimmt noch nicht? ich finbd den fehler net

    switch (iMsg)

    {
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rcClient;

    LOGFONT mylogfont;
    HFONT myfont;
    mylogfont.lfHeight = 1;
    lstrcpy(mylogfont.lfFaceName, _T("Arial"));
    myfont = CreateFontIndirect(&mylogfont);

    case WM_PAINT:
    hdc = BeginPaint(hwnd,&ps);
    GetClientRect(hwnd,&rcClient);

    SetTextColor(hdc,200);
    SelectObject(hdc,myfont);

    DrawText(hdc,L"Hallo",5,&rcClient,DT_CENTER);
    EndPaint(hwnd,&ps);
    break;



  • 1. Die LOGFONT-Struktur hat noch ein paar mehr Parameter (dazu hat ja WebFritzi die Funktion geschrieben, die das Besetzen erleichtert)
    2. Solltest du Das mit dem belegen der Struktur und CreateFontIndirect in WM_CREATE erledigen
    3. Solltest du beim Aufruf von SelectObject in WM_PAINT den Rückgabe-Wert speichern und am Ende (vor EndPaint) diesen wieder zurückselektieren (mit SelectObject)
    4. So solltest du auch mit SetTextColor verfahren (Rückgabewert speichern und diesen nachher wieder einsetzen)
    5. In WM_DESTROY dann DeleteObject für myfont aufrufen

    Ich hoffe mal, dass ich nichts vergessen habe 😉



  • mylogfont.lfHeight = 1;

    Das iss'n bisschen sehr dünn 😃



  • SetTextColor(hdc,200);

    Auch nicht gerade das Gelbe vom Ei! 😃



  • ist mir schon klar das ich den font wieder freigeben muß.
    das der logfont ein paar parameter mehr hat ist mir auch klar,
    allerdings sind die (laut der lib) net notwendig.
    mir ist nur unklar warum mein text net formatiert wird.
    um mal dumm zu fragen funzt die formatierung unter 9x-WinAPI?
    wenn ja dann is das wieder son schönes ce-problem.



  • Was meinst du mit Formatierung?



  • ich bekomme gleich nen schreikrampf.
    was will ich denn die ganze zeit lang machen?
    was macht man den wenn man nen text formatiert?
    man verändert sein aussehen.
    (das was mit meinem quelltext anscheinent net geht und das was ich wissen will wie es geht)


Anmelden zum Antworten