LPtoDP berechnet Koordinaten falsch



  • Hallo!

    Folgendes Problem:
    Es wird versucht ein DIN A4 Blatt auf dem Bildschirm zu zeichnen, unabhängig von der Bildschirmauflösung / Größe. Das hat unter Win XP / 2000 gut funktioniert. Seit Win7 wird das Blatt aber um ca 1/3 pro x/y Seite kleiner gezeichnet.
    Die Seitenvorschau inkl. des Ausdrucks (als DIN A4) funktioniert einwandfrei.

    Folgender Code wird angewendet:

    CDC* pDC = GetDC();
    	pDC->SetMapMode(MM_TWIPS);
    
    	m_dina4size = GetPageSize(EPF_DINA4, MM_TWIPS, true);
    	pDC->LPtoDP(&m_dina4size);
    

    Die DIN A4 Abmessungen sind als "logical units" mit 16838 / 11906 angeben und werden von "GetPageSize" in das "CSize m_dina4size" geladen um sie anschliessend in das "LPtoDP" zu übergeben. Der CDC Modus ist "MM_TWIPS".
    Der LPtoDP aufruf macht aus den m_dina4size{cx=16838 cy=-11906} nicht die richtigen Abmessungen.

    Weiß jemand Rat?


  • Mod

    Ich würde nie mit MM_TWIPS arbeiten weil diese Auflösung alleine durch den Device festgelegt wird.

    Die festen Maping Modes des GDI basieren in keiner Weise auf LOGPIXELSX/SY.
    Siehe:
    http://blog.m-ri.de/index.php/2010/04/20/achtung-die-festen-mapping-modes-des-gdi-basieren-nicht-auf-logpixelsx-und-logpixelsy/

    Das ist vermutlich kein Bug sondern by Design und kommt durch die neuen High Resolution Regeln von Windows 7.


Anmelden zum Antworten