92babbf3494137b16be2db8083078eb88cef8d22
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 if (lpszFile
) /* disk based metafile */
155 pmfDC
->mh
.mtType
= METAFILE_DISK
;
157 if(!GetFullPathName( lpszFile
,
159 (LPTSTR
) &pmfDC
->Filename
,
160 (LPTSTR
*) &lpszFile
))
162 // MFDRV_DeleteDC( dc->physDev );
166 if ((hFile
= CreateFileW(pmfDC
->Filename
, GENERIC_WRITE
, 0, NULL
,
167 CREATE_ALWAYS
, 0, 0)) == INVALID_HANDLE_VALUE
)
169 // MFDRV_DeleteDC( dc->physDev );
173 if (!WriteFile( hFile
, &pmfDC
->mh
, sizeof(pmfDC
->mh
), NULL
, NULL
))
175 // MFDRV_DeleteDC( dc->physDev );
178 pmfDC
->hFile
= hFile
;
180 else /* memory based metafile */
181 pmfDC
->mh
.mtType
= METAFILE_MEMORY
;
183 hmDC
= NtGdiCreateClientObj ( GDI_OBJECT_TYPE_METADC
);
185 MF_CreateMFDC ( hmDC
, pmfDC
);
204 Status
= HEAP_strdupA2W ( &lpszFileW
, lpszFile
);
205 if (!NT_SUCCESS (Status
))
206 SetLastError (RtlNtStatusToDosError(Status
));
209 rc
= CreateMetaFileW( lpszFileW
);
210 HEAP_free ( lpszFileW
);
252 LPWSTR lpszMetaFileW
;
255 Status
= HEAP_strdupA2W ( &lpszMetaFileW
, lpszMetaFile
);
256 if (!NT_SUCCESS (Status
))
257 SetLastError (RtlNtStatusToDosError(Status
));
260 rc
= GetMetaFileW( lpszMetaFileW
);
261 HEAP_free ( lpszMetaFileW
);