+ if (emfplusheader.Header.Type == EmfPlusRecordTypeHeader)
+ {
+ if ((emfplusheader.Header.Flags & 1) == 1)
+ metafile_type = MetafileTypeEmfPlusDual;
+ else
+ metafile_type = MetafileTypeEmfPlusOnly;
+ }
+ else
+ metafile_type = MetafileTypeEmf;
+
+ header->Type = metafile_type;
+ header->Size = emfheader.nBytes;
+ header->DpiX = (REAL)emfheader.szlDevice.cx * 25.4 / emfheader.szlMillimeters.cx;
+ header->DpiY = (REAL)emfheader.szlDevice.cy * 25.4 / emfheader.szlMillimeters.cy;
+ header->X = gdip_round((REAL)emfheader.rclFrame.left / 2540.0 * header->DpiX);
+ header->Y = gdip_round((REAL)emfheader.rclFrame.top / 2540.0 * header->DpiY);
+ header->Width = gdip_round((REAL)(emfheader.rclFrame.right - emfheader.rclFrame.left) / 2540.0 * header->DpiX);
+ header->Height = gdip_round((REAL)(emfheader.rclFrame.bottom - emfheader.rclFrame.top) / 2540.0 * header->DpiY);
+ header->u.EmfHeader = emfheader;
+
+ if (metafile_type == MetafileTypeEmfPlusDual || metafile_type == MetafileTypeEmfPlusOnly)
+ {
+ header->Version = emfplusheader.Version;
+ header->EmfPlusFlags = emfplusheader.EmfPlusFlags;
+ header->EmfPlusHeaderSize = emfplusheader.Header.Size;
+ header->LogicalDpiX = emfplusheader.LogicalDpiX;
+ header->LogicalDpiY = emfplusheader.LogicalDpiY;
+ }
+ else
+ {
+ header->Version = emfheader.nVersion;
+ header->EmfPlusFlags = 0;
+ header->EmfPlusHeaderSize = 0;
+ header->LogicalDpiX = 0;
+ header->LogicalDpiY = 0;
+ }