Falsche Ergebnisse bei GetTextExtentPoint32



  • Müsste am DC liegen das du der Funktion übergibst. Arbeitest du mit Memory DC's (also Backbuffern)?



  • Hm, naja, ich arbeite nicht wirklich mit DCs. ich lasse mir von meinem fenster in der funktion einfach einen dc "geben" (GetDC), setze dann die font (SelectObject), führe GetTextExtentPoint32 aus, setze die alte font wieder und "lösche" den dc (ReleaseDC). hoffe, diese beschreibung hilft, sorry, hab von der WinAPI nicht so de ahnung, wie gesagt, ich code eigentlich mit DirectX.
    @ D@niel $chumann : Der code kommt noch, bin nur grad am falschen rechner.



  • Erstellst evtl. bei jedem Durchlauf neu den neuen Font (ohne ihn freizugeben)?



  • Ich habe eine LOGFONT struktur und rufe jedes mal CreateFont auf, ja, aber was meinst du mit freigeben?



  • DeleteObject



  • Babbo schrieb:

    aber was meinst du mit freigeben?

    MSDN schrieb:

    When you no longer need the font, call the DeleteObject function to delete it.

    Was ist "Falsch"?

    a) "size" ist in logical units, nicht unbedingt in pixeln
    b) die funktion berücksichtigt kein Escapement oder Rotation

    Ich hab mit DrawText(...,DT_CALCRECT) gute Erfahrungen gemacht, weiß aber nicht ob da Dir in deinem Fall nützt.



  • @ peterchen: zu a, ich weiß, aber zuerst passt es ja, wie im ersten posting gesagt, erst nach 5 - 10 minuten passiert das (dass Die funktion falsche werte ausspuckt).
    zu b, hab ich beides nicht "drin" in meinem geldaenen font.
    ach ja, braucht man für DrawText(...DT_CALCRECT) nicht mindestens einen Wert des Rects? ich möchte ja beide berechnen.
    zu dem delete object: probier ich mal.



  • Also, es klappt jetzt, ich musste tatsächlich nur die erstellte font löschen.
    danke an alle, hab aber noch ne frage:
    nochmal zu dem was peterchen gesagt hat, wegen escapement nd so. gibt es eine funktion, ide das selbe tut, wie GetTextExtentPoint32, aber eben auch escapement, rotation und all den kram berücksichtigt?



  • Soweit ich weiß nicht. Je mehr aber eine Funktion berücksichtigen muss, desto länger wird sie brauchen um zu einem Resultat zu kommen. Vorallem Berechnungen, die mit Text zusammenhängen kann es zu langen Kalkulationszeiten kommen. Wenn es nicht unbedingt notwendig ist, dann würde ich darauf verzichten...insbesondere weil es eine DirectX Anwendung ist. Da zählt die Performance sehr viel. Du brauchst nur in den Google Groups nach den Begriffen "DrawText" und "slow" suchen, dann kannst du dir ein Bild davon machen welche Schwierigkeiten damit auftreten...



  • Nun gut, du hast wohl recht. naja, danke nochmal an alle,
    ciao


Anmelden zum Antworten