4 /* DEFINES *******************************************************************/
7 /* PRIVATE DATA **************************************************************/
9 PMF_ENTRY hMF_List
= NULL
;
12 /* INTERNAL FUNCTIONS ********************************************************/
15 MF_CreateMFDC ( HGDIOBJ hMDC
,
20 pMFME
= LocalAlloc(LMEM_ZEROINIT
, sizeof(MF_ENTRY
));
29 InitializeListHead(&hMF_List
->List
);
32 InsertTailList(&hMF_List
->List
, &pMFME
->List
);
43 MF_GetMFDC ( HGDIOBJ hMDC
)
45 PMF_ENTRY pMFME
= hMF_List
;
49 if ( pMFME
->hmDC
== hMDC
) return pMFME
->pmfDC
;
50 pMFME
= (PMF_ENTRY
) pMFME
->List
.Flink
;
52 while ( pMFME
!= hMF_List
);
59 MF_DeleteMFDC ( HGDIOBJ hMDC
)
61 PMF_ENTRY pMFME
= hMF_List
;
65 if ( pMFME
->hmDC
== hMDC
)
67 RemoveEntryList(&pMFME
->List
);
70 if (!hMFCount
) hMF_List
= NULL
;
73 pMFME
= (PMF_ENTRY
) pMFME
->List
.Flink
;
75 while ( pMFME
!= hMF_List
);
80 /* FUNCTIONS *****************************************************************/
123 Status
= HEAP_strdupA2W ( &lpszFileW
, lpszFile
);
124 if (!NT_SUCCESS (Status
))
125 SetLastError (RtlNtStatusToDosError(Status
));
128 rc
= CopyMetaFileW( hmfSrc
, lpszFileW
);
129 HEAP_free ( lpszFileW
);
147 PMETAFILEDC pmfDC
= LocalAlloc(LMEM_ZEROINIT
, sizeof(METAFILEDC
));
148 if (!pmfDC
) return NULL
;
150 pmfDC
->mh
.mtHeaderSize
= sizeof(METAHEADER
) / sizeof(WORD
);
151 pmfDC
->mh
.mtVersion
= 0x0300;
152 pmfDC
->mh
.mtSize
= pmfDC
->mh
.mtHeaderSize
;
154 pmfDC
->hPen
= GetStockObject(BLACK_PEN
);
155 pmfDC
->hBrush
= GetStockObject(WHITE_BRUSH
);
156 pmfDC
->hFont
= GetStockObject(DEVICE_DEFAULT_FONT
);
157 pmfDC
->hBitmap
= GetStockObject(DEFAULT_BITMAP
);
158 pmfDC
->hPalette
= GetStockObject(DEFAULT_PALETTE
);
160 if (lpszFile
) /* disk based metafile */
162 pmfDC
->mh
.mtType
= METAFILE_DISK
;
164 if(!GetFullPathName( lpszFile
,
166 (LPTSTR
) &pmfDC
->Filename
,
167 (LPTSTR
*) &lpszFile
))
173 if ((hFile
= CreateFileW(pmfDC
->Filename
, GENERIC_WRITE
, 0, NULL
,
174 CREATE_ALWAYS
, 0, 0)) == INVALID_HANDLE_VALUE
)
180 if (!WriteFile( hFile
, &pmfDC
->mh
, sizeof(pmfDC
->mh
), &pmfDC
->dwWritten
, NULL
))
185 pmfDC
->hFile
= hFile
;
187 else /* memory based metafile */
188 pmfDC
->mh
.mtType
= METAFILE_MEMORY
;
190 hmDC
= NtGdiCreateClientObj ( GDI_OBJECT_TYPE_METADC
);
192 MF_CreateMFDC ( hmDC
, pmfDC
);
211 Status
= HEAP_strdupA2W ( &lpszFileW
, lpszFile
);
212 if (!NT_SUCCESS (Status
))
213 SetLastError (RtlNtStatusToDosError(Status
));
216 rc
= CreateMetaFileW( lpszFileW
);
217 HEAP_free ( lpszFileW
);
259 LPWSTR lpszMetaFileW
;
262 Status
= HEAP_strdupA2W ( &lpszMetaFileW
, lpszMetaFile
);
263 if (!NT_SUCCESS (Status
))
264 SetLastError (RtlNtStatusToDosError(Status
));
267 rc
= GetMetaFileW( lpszMetaFileW
);
268 HEAP_free ( lpszMetaFileW
);
287 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
301 const METAHEADER
*mh_in
= (const METAHEADER
*)lpData
;
303 if (size
& 1) return 0;
305 if (!size
|| mh_in
->mtType
!= METAFILE_MEMORY
|| mh_in
->mtVersion
!= 0x300 ||
306 mh_in
->mtHeaderSize
!= sizeof(METAHEADER
) / 2)
308 DPRINT1("SetMetaFileBitsEx failed: %lu,%lu,0x&lx,%lu\n",
309 size
, mh_in
->mtType
, mh_in
->mtVersion
, mh_in
->mtHeaderSize
);
310 SetLastError(ERROR_INVALID_DATA
);
315 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
324 GdiIsPlayMetafileDC(HDC hDC
)
326 PLDC pLDC
= GdiGetLDC(hDC
);
329 if ( pLDC
->Flags
& LDC_PLAY_MFDC
) return TRUE
;
345 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
362 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
379 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
397 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
410 CONST METAFILEPICT
*a3
)
413 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
422 GdiIsMetaFileDC(HDC hDC
)
424 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
426 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
430 PLDC pLDC
= GdiGetLDC(hDC
);
433 SetLastError(ERROR_INVALID_HANDLE
);
436 if ( pLDC
->iType
== LDC_EMFLDC
) return TRUE
;
447 GdiIsMetaPrintDC(HDC hDC
)
450 if (GDI_HANDLE_GET_TYPE(hDC
) != GDI_OBJECT_TYPE_DC
)
452 if (GDI_HANDLE_GET_TYPE(hDC
) == GDI_OBJECT_TYPE_METADC
)
456 PLDC pLDC
= GdiGetLDC(hDC
);
459 SetLastError(ERROR_INVALID_HANDLE
);
462 if ( pLDC
->Flags
& LDC_META_PRINT
) return TRUE
;
473 GdiCreateLocalMetaFilePict(HENHMETAFILE hmo
)
476 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
485 GdiConvertMetaFilePict(HGLOBAL hMem
)
488 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);