/* TYPES *********************************************************************/
// Based on wmfapi.h and Wine.
-typedef struct tagMETAFILEDC {
- PVOID pvMetaBuffer;
- HANDLE hFile;
- DWORD Size;
- METAHEADER mh;
- UINT handles_size, cur_handles;
- HGDIOBJ *handles;
-
- // more DC object stuff.
- HGDIOBJ Pen;
- HGDIOBJ Brush;
- HGDIOBJ Palette;
- HGDIOBJ Font;
-
- WCHAR Filename[MAX_PATH+2];
- // Add more later.
+typedef struct tagMETAFILEDC
+{
+ PVOID pvMetaBuffer;
+ HANDLE hFile;
+ DWORD Size;
+ DWORD dwWritten;
+ METAHEADER mh;
+ WORD reserved;
+ HLOCAL MFObjList;
+ HPEN hPen;
+ HBRUSH hBrush;
+ HDC hDc;
+ HGDIOBJ hMetaDc;
+ HPALETTE hPalette;
+ HFONT hFont;
+ HBITMAP hBitmap;
+ HRGN hRegion;
+ HGDIOBJ hMetafile;
+ HGDIOBJ hMemDc;
+ HPEN hExtPen;
+ HGDIOBJ hEnhMetaDc;
+ HGDIOBJ hEnhMetaFile;
+ HCOLORSPACE hColorSpace;
+ WCHAR Filename[MAX_PATH+2];
} METAFILEDC,*PMETAFILEDC;
// Metafile Entry handle
-typedef struct tagMF_ENTRY {
+typedef struct tagMF_ENTRY
+{
LIST_ENTRY List;
HGDIOBJ hmDC; // Handle return from NtGdiCreateClientObj.
PMETAFILEDC pmfDC;
} MF_ENTRY, *PMF_ENTRY;
-typedef struct tagENHMETAFILE {
+typedef struct tagENHMETAFILE
+{
PVOID pvMetaBuffer;
HANDLE hFile; /* Handle for disk based MetaFile */
DWORD Size;
{
HANDLE hFile;
HDC hmDC;
- DWORD dwWritten;
PMETAFILEDC pmfDC = LocalAlloc(LMEM_ZEROINIT, sizeof(METAFILEDC));
if (!pmfDC) return NULL;
pmfDC->mh.mtVersion = 0x0300;
pmfDC->mh.mtSize = pmfDC->mh.mtHeaderSize;
+ pmfDC->hPen = GetStockObject(BLACK_PEN);
+ pmfDC->hBrush = GetStockObject(WHITE_BRUSH);
+ pmfDC->hFont = GetStockObject(DEVICE_DEFAULT_FONT);
+ pmfDC->hBitmap = GetStockObject(DEFAULT_BITMAP);
+ pmfDC->hPalette = GetStockObject(DEFAULT_PALETTE);
+
if (lpszFile) /* disk based metafile */
{
pmfDC->mh.mtType = METAFILE_DISK;
(LPTSTR) &pmfDC->Filename,
(LPTSTR*) &lpszFile))
{
-// MFDRV_DeleteDC( dc->physDev );
LocalFree(pmfDC);
return NULL;
}
if ((hFile = CreateFileW(pmfDC->Filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, 0, 0)) == INVALID_HANDLE_VALUE)
{
-// MFDRV_DeleteDC( dc->physDev );
LocalFree(pmfDC);
return NULL;
}
- if (!WriteFile( hFile, &pmfDC->mh, sizeof(pmfDC->mh), &dwWritten, NULL ))
+ if (!WriteFile( hFile, &pmfDC->mh, sizeof(pmfDC->mh), &pmfDC->dwWritten, NULL ))
{
-// MFDRV_DeleteDC( dc->physDev );
LocalFree(pmfDC);
return NULL;
}