Wie Compatible ist ein mit CreateCompatibleDC erzeugter DCCreateCompatibleDC



  • Warscheinlich verstehe ich die Funktion CreateCompatibleDC nicht. Wenn ich von meinem Listview Fenster den DC hole und mit CreateCompatibleDC einen "compatibelen" DC erzeuge, überrascht mich das Ergebnis dann schon.

    Erwartet hätte ich eine Kopie des Listview DCs. Wenn ich mir von beiden DCs den LOGFONT hole sehe ich aber, dass die DCs unterschiedliche Fonts benutzen.

    Aufgefallen ist mir das, als ich mit DrawText in Verbindung mit DT_CALCRECT die Höhe von Textzeilen messen wollte und immer wieder falsche Ergebnisse raus kamen. Da hatte ich schon den Font in Verdacht und so wars dann auch.

    Was ist demnach ein compatibeler DC? Worin besteht die Komatibilität?



  • Das ist alles völlig normal und steht auch so in der Doku zu CreateCompatibleDC: "When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high ... When a memory DC is created, all attributes are set to normal default values."

    Du kannst aber auf dem kompatiblen DC alle Operationen ausführen, die Du auch auf dem Original ausführen kannst -> Ist ja schließlich kompatibel 😉



  • Ich schätze so Sachen wie DPI, Farbformat für Bitmaps (DDBs) etc. sollten identisch zur "Vorlage" sein.



  • hustbaer schrieb:

    Ich schätze so Sachen wie DPI, Farbformat für Bitmaps (DDBs) etc. sollten identisch zur "Vorlage" sein.

    Das Farbformat für Bitmaps? Meinst Du das, was als "monochrome" dokumentiert ist? Gehst Du davon aus, dass Oxigen ein schwarz/weiß ListView einsetzt? Oder was?



  • Nein.
    Ich meinte was für eine Art Bitmap du bekommst wenn du CreateCompatibleBitmap mit dem so erzeugten memory DC aufrufst.

    Meine Vermutung stimmt bloss nicht:

    MSDN schrieb:

    Note: When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap. To create a color bitmap, use the HDC that was used to create the memory device context, as shown in the following code:

    Mist 🙂

    Auf jeden Fall kann man in den so erzeugten memory DC aber DDBs reinselektieren, sofern diese auch im original DC funktionieren.
    Der "compatible" DC ist also "compatible" mit den DDBs des original DCs.



  • Danke erstmal für die Antworten. Aber was ist den DDB. Damit kann ich leider nix anfangen.



  • Oxigen schrieb:

    Aber was ist den DDB.

    Device Dependent Bitmap -> Das, was Du per SelectObject in Deinen DC selektierst

    @hustbaer
    Stehen diese Erkenntnisse nicht alle schon gleich in der ersten Antwort?



  • @Mox
    Wenn du meinst.



  • Meine ich. Vielleicht solltest Du auch einfach mal die Fresse halten, wenn Du nichts sinnvolles beizutragen hast, hm?



  • Oder du?



  • So einfach ist das nicht...man kann nicht mit "CreateCompatibleDC()" einen ListView-DC holen...warum brauchst Du das? ich hab' das noch nie gebraucht...man kann doch ListViews auch sehr gut mit den Standard-Funktionen manipulieren...



  • DrawText in Verbindung mit DT_CALCREC liefert nur korrekte Ergebnisse, wenn der DC den man fürs messen benutzt auch die gleiche Schrift eingestellt hat, wie der wo der Text dann ausgeben werden soll.


Log in to reply