Font (malwieder) [frage ob code ok]



  • hi,
    ja ich mal wieder 🙂

    ich bastel noch an meiner picture (bitmap) Klasse und wollt mal fragen ob das hier ok ist (hinsichtlich memory leak / GDI gedönse..

    void Picture::WriteText(LPCTSTR FontName,int FontSize,int FontWeight,bool FontItalic,bool FontUnderline,bool FontStrikeOut,char TextBuf[],int x,int y,int ColRed,int ColGreen,int ColBlue)
    {
            int TextBufLen;
            TextBufLen = strlen(TextBuf);
        SetBkMode(hdcMem,TRANSPARENT); 
        SetTextColor(hdcMem,RGB(ColRed,ColGreen,ColBlue));
        hFont = CreateFont(-MulDiv(FontSize, GetDeviceCaps(hdcMem, LOGPIXELSY), 72)
    ,0,0,0,FontWeight,FontItalic,FontUnderline,FontStrikeOut,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,FontName);
        hOldFont = (HFONT) SelectObject(hdcMem,hFont);
            TextOut(hdcMem,x,y,TextBuf,TextBufLen);
        SelectObject(hdcMem,hOldFont);
        DeleteObject(hFont);
    };
    


  • mein formatierungs versuch (forum) ist leicht in die Hose gegangen ich hoffe
    man erkennt trotzdem noch was... (wenn nicht versuch ich es nochmal..)



  • hab mir das jetzt nicht angekuckt, aber wenn du windows xp (oder 2000?) hast kannst du im taskmanager die gdi-resourcen begutachten und so gucken ob da was nicht freigegeben wird.



  • Original erstellt von <taskmgr>:
    aber wenn du windows xp (oder 2000?) hast [...]

    ich bin leidenschaftlicher ME nutzer!



  • ok, da dürfte es ned gehen

    cu 🕶



  • Wenn du es ganz korrekt machen willst solltest du noch von SetBkMode und SetTextColor jeweils den Rückgabewert speichern und am Ende wieder setzen! 🙂



  • Original erstellt von flenders:
    **Wenn du es ganz korrekt machen willst solltest du noch von SetBkMode und
    SetTextColor jeweils den Rückgabewert speichern und am Ende wieder setzen! 🙂
    **

    ok THX!

    PS: muss! ich das machen oder kann! ich das machen? damit mein ich ist es
    falsch es nicht zu machen?



  • ich tipp mal auf sowas wie GetTextColor und GetBkMode



  • Es ist halt so:
    angenommen du setzt die Textfarbe auf rot, machst irgendwas und rufst dann deine Funktion auf. Nach dessen Rückkehr sollte die Textfarbe (zwecks bedienfreundlichkeit) auch wieder rot sein (du hast ja nicht selbst direkt SetTextColor aufgerufen). Sie ist aber jetzt auf transparent, da du nicht den alten Wert wieder gesetzt hast!
    Fazit: Es ist keine Pflicht (vielleicht willst du dieses Verhalten ja sogar) aber als "guter" Programmierer sollte man es imho machen 😉

    @<99%>: Ich sagte doch, einfach den Rückgabewert speichern 🙂



  • großes danke an flenders 🙂 🙂 🙂


Anmelden zum Antworten