3 /* DEFINES *******************************************************************/
6 /* PRIVATE DATA **************************************************************/
8 PMF_ENTRY hMF_List
= NULL
;
11 /* INTERNAL FUNCTIONS ********************************************************/
14 MF_CreateMFDC ( HGDIOBJ hMDC
,
19 pMFME
= LocalAlloc(LMEM_ZEROINIT
, sizeof(MF_ENTRY
));
28 InitializeListHead(&hMF_List
->List
);
31 InsertTailList(&hMF_List
->List
, &pMFME
->List
);
42 MF_GetMFDC ( HGDIOBJ hMDC
)
44 PMF_ENTRY pMFME
= hMF_List
;
48 if ( pMFME
->hmDC
== hMDC
) return pMFME
->pmfDC
;
49 pMFME
= (PMF_ENTRY
) pMFME
->List
.Flink
;
51 while ( pMFME
!= hMF_List
);
58 MF_DeleteMFDC ( HGDIOBJ hMDC
)
60 PMF_ENTRY pMFME
= hMF_List
;
64 if ( pMFME
->hmDC
== hMDC
)
66 RemoveEntryList(&pMFME
->List
);
69 if (!hMFCount
) hMF_List
= NULL
;
72 pMFME
= (PMF_ENTRY
) pMFME
->List
.Flink
;
74 while ( pMFME
!= hMF_List
);
79 /* FUNCTIONS *****************************************************************/
122 Status
= HEAP_strdupA2W ( &lpszFileW
, lpszFile
);
123 if (!NT_SUCCESS (Status
))
124 SetLastError (RtlNtStatusToDosError(Status
));
127 rc
= CopyMetaFileW( hmfSrc
, lpszFileW
);
128 HEAP_free ( lpszFileW
);
146 PMETAFILEDC pmfDC
= LocalAlloc(LMEM_ZEROINIT
, sizeof(METAFILEDC
));
147 if (!pmfDC
) return NULL
;
149 pmfDC
->mh
.mtHeaderSize
= sizeof(METAHEADER
) / sizeof(WORD
);
150 pmfDC
->mh
.mtVersion
= 0x0300;
151 pmfDC
->mh
.mtSize
= pmfDC
->mh
.mtHeaderSize
;
153 pmfDC
->hPen
= GetStockObject(BLACK_PEN
);
154 pmfDC
->hBrush
= GetStockObject(WHITE_BRUSH
);
155 pmfDC
->hFont
= GetStockObject(DEVICE_DEFAULT_FONT
);
156 pmfDC
->hBitmap
= GetStockObject(DEFAULT_BITMAP
);
157 pmfDC
->hPalette
= GetStockObject(DEFAULT_PALETTE
);
159 if (lpszFile
) /* disk based metafile */
161 pmfDC
->mh
.mtType
= METAFILE_DISK
;
163 if(!GetFullPathName( lpszFile
,
165 (LPTSTR
) &pmfDC
->Filename
,
166 (LPTSTR
*) &lpszFile
))
172 if ((hFile
= CreateFileW(pmfDC
->Filename
, GENERIC_WRITE
, 0, NULL
,
173 CREATE_ALWAYS
, 0, 0)) == INVALID_HANDLE_VALUE
)
179 if (!WriteFile( hFile
, &pmfDC
->mh
, sizeof(pmfDC
->mh
), &pmfDC
->dwWritten
, NULL
))
184 pmfDC
->hFile
= hFile
;
186 else /* memory based metafile */
187 pmfDC
->mh
.mtType
= METAFILE_MEMORY
;
189 hmDC
= NtGdiCreateClientObj ( GDI_OBJECT_TYPE_METADC
);
191 MF_CreateMFDC ( hmDC
, pmfDC
);
210 Status
= HEAP_strdupA2W ( &lpszFileW
, lpszFile
);
211 if (!NT_SUCCESS (Status
))
212 SetLastError (RtlNtStatusToDosError(Status
));
215 rc
= CreateMetaFileW( lpszFileW
);
216 HEAP_free ( lpszFileW
);
258 LPWSTR lpszMetaFileW
;
261 Status
= HEAP_strdupA2W ( &lpszMetaFileW
, lpszMetaFile
);
262 if (!NT_SUCCESS (Status
))
263 SetLastError (RtlNtStatusToDosError(Status
));
266 rc
= GetMetaFileW( lpszMetaFileW
);
267 HEAP_free ( lpszMetaFileW
);