Herd Software Entwicklung
DaVinci Grafikbibliothek
DaVinci Dokumentation
Die METARESOLUTION - Struktur enthält Zusatzangaben zu Windows MetaFiles über die Auflösung des MetaFiles (Größe in Millimetern und das Verhältnis zwischen Breite und Höhe). Diese Angaben sind in einer Windows MetaFile HMETAFILE leider nicht gespeichert und müssen daher von der Anwendung getrennt verwaltet werden. Das übliche Dateiformat mit der Kennung .WMF enthält dazu einen kleinen Header, der die in der METARESOLUTION-Struktur zusammengefassten Daten enthält.
Für Enhanced MetaFiles unter 32-Bit Windows ist diese Struktur nicht notwendig, da die Anwendung die Auflösung mit der API Funktion GetEnhMetaFileHeader erfragen kann.
typedef struct
{
RECT bbox;
WORD inch;
char reserved[2];
} METARESOLUTION, FAR *LPMETARESOLUTION;
Die METARESOLUTION-Struktur hat folgende Felder:
| Feld | Typ | Beschreibung |
| bbox | RECT | das kleinste Rechteck in Metafile-Koordinaten, das die Grafik gerade noch umschließt, |
| inch | WORD | Skalierungsfaktor: Metafile-Einheiten (in bbox) je Inch, |
| reserved | char[2] | reserviert für zukünftige Definition (Bringt die METARESOLUTIONS-Struktur auf eine Compiler-Alignment Neutrale Länge). |
Zum Austausch zwischen Anwendungen bestimmte MetaFiles sollten immer den Skalierungsmodus MM_ANISOTROPIC verwenden und die Größe des logischen Koordinatensystems mit SetWindowExtEx und SetWindowOrgEx setzen.
Das Element bbox der METARESOLUTION-Struktur enthält üblicherweise dieselben Angaben wie die Angaben in SetWindowExtEx und SetWindowOrgEx, lediglich als RECT-Element formuliert.
Vor dem Abspielen eines MetaFiles muß die Anwendung mit SetViewportExtEx und SetViewportOrgEx die Größe des Ausgabebereiches im DC festlegen. Dazu müssen die Angaben in der METARESOLUTION-Struktur mit der Auflösung des Ausgabe-DCs in Pixel je Inch verrechnet werden. Obwohl die METARESOLUTION-Struktur die Angabe von Auflösung und Position eines MetaFiles zuläßt, wird die Zielkoordinate meist von der Anwendung vorgegegeben.
LPMETARESOLUTION lpmr; HDC hPrinterDC; RECT rcPrinter; POINT PrinterPixelPerInch; PrinterPixelPerInch.x = GetDeviceCaps(hPrinterDC, LOGPIXELSX); PrinterPixelPerInch.y = GetDeviceCaps(hPrinterDC, LOGPIXELSY); rcPrinter.left = MulDiv( PrinterPixelPerInch.x, lpmr->bbox.left , lpmr->inch); rcPrinter.top = MulDiv( PrinterPixelPerInch.y, lpmr->bbox.top , lpmr->inch); rcPrinter.right = MulDiv( PrinterPixelPerInch.x, lpmr->bbox.right , lpmr->inch); rcPrinter.bottom = MulDiv( PrinterPixelPerInch.y, lpmr->bbox.bottom, lpmr->inch); SetMapMode(hPrinterDC, MM_ANISOTROPIC); SetViewportExtEx(hPrinterDC, rcPrinter.right-rcPrinter.left, rcPrinter.bottom-rcPrinter.top, NULL); SetViewportOrgEx(hPrinterDC, rcPrinter.left , rcPrinter.top , NULL);
Die Auflösungsangaben in der METARESOLUTION – Struktur sind in Pixel je Inch gespeichert. Beim Umrechnen muß berücksichtigt werden, daß ein Inch = 25.4 Millimeter entspricht.
SIZE size10mm; size10mm.cx = MulDiv( lpmr->bbox.right-lpmr->bbox.left, 254, lpmr->inch); size10mm.cy = MulDiv( lpmr->bbox.bottom-lpmr->bbox.top, 254, lpmr->inch);