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?
-
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.