Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
4.6 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: mf.h
//
// Contents: Declaration of CMfObject (metafile presentation object)
//
// Classes: CMfObject
//
// Functions:
//
// History: dd-mmm-yy Author Comment
// 01-Feb-95 t-ScottH add Dump method to CMfObject
// 24-Jan-94 alexgo first pass converting to Cairo style
// memory allocation
// 29-Nov-93 alexgo 32bit port
//
//--------------------------------------------------------------------------
#include "olepres.h"
#include "olecache.h"
#include "cachenod.h"
#define RECORD_COUNT 16
#ifndef _MAC
typedef struct _METADC
{
int xMwo;
int yMwo;
int xMwe;
int yMwe;
int xre;
int yre;
struct _METADC FAR* pNext;
} METADC, *PMETADC, FAR* LPMETADC;
typedef struct _METAINFO
{
METADC headDc;
int xwo;
int ywo;
int xwe;
int ywe;
int xro;
int yro;
} METAINFO, *PMETAINFO, FAR* LPMETAINFO;
#endif
//+-------------------------------------------------------------------------
//
// Class: CMfObject
//
// Purpose: Metafile presentation object
//
// Interface: IOlePresObj
//
// History: dd-mmm-yy Author Comment
// 01-Feb-95 t-ScottH add Dump method (_DEBUG only) (this method
// is also a method in IOlePresObj
// 29-Nov-93 alexgo 32bit port
//
// Notes:
//
//--------------------------------------------------------------------------
class FAR CMfObject : public IOlePresObj, public CPrivAlloc
{
public:
CMfObject(LPCACHENODE pCacheNode, DWORD dwAspect,
BOOL fConvert = FALSE);
~CMfObject(void);
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj);
STDMETHOD_(ULONG,AddRef) (THIS) ;
STDMETHOD_(ULONG,Release) (THIS);
STDMETHOD(GetData) (THIS_ LPFORMATETC pformatetcIn,
LPSTGMEDIUM pmedium );
STDMETHOD(GetDataHere) (THIS_ LPFORMATETC pformatetcIn,
LPSTGMEDIUM pmedium );
STDMETHOD(SetDataWDO) (THIS_ LPFORMATETC pformatetc,
STGMEDIUM FAR * pmedium,
BOOL fRelease, IDataObject * pdo);
STDMETHOD(Draw) (THIS_ void FAR* pvAspect, HDC hicTargetDev,
HDC hdcDraw,
LPCRECTL lprcBounds,
LPCRECTL lprcWBounds,
BOOL (CALLBACK * pfnContinue)(ULONG_PTR),
ULONG_PTR dwContinue);
STDMETHOD(GetExtent) (THIS_ DWORD dwAspect, LPSIZEL lpsizel);
STDMETHOD(Load) (THIS_ LPSTREAM pstm, BOOL fReadHeaderOnly = FALSE);
STDMETHOD(Save) (THIS_ LPSTREAM pstm);
STDMETHOD(GetColorSet) (void FAR* pvAspect, HDC hicTargetDev,
LPLOGPALETTE FAR* ppColorSet);
STDMETHOD_(BOOL, IsBlank) (THIS);
STDMETHOD_(void, DiscardHPRES)(THIS);
#ifndef _MAC
inline int CallbackFuncForDraw(HDC hdc, LPHANDLETABLE lpHTable,
LPMETARECORD lpMFR, int nObj);
inline int CallbackFuncForGetColorSet(HDC hdc, LPHANDLETABLE lpHTable,
LPMETARECORD lpMFR, int nObj);
#endif
#ifdef _DEBUG
STDMETHOD(Dump) (THIS_ char **ppszDump, ULONG ulFlag, int nIndentLevel);
#endif // _DEBUG
private:
#ifndef _MAC
INTERNAL_(HANDLE) GetHmfp (void);
INTERNAL_(BOOL) PopDc (void);
INTERNAL_(BOOL) PushDc (void);
INTERNAL_(void) CleanStack(void);
#endif
INTERNAL ChangeData (HANDLE hMfp, BOOL fDelete);
INTERNAL_(HANDLE) LoadHPRES(void);
INTERNAL_(HANDLE) GetCopyOfHPRES(void);
INTERNAL_(void) SetPictOrg (HDC, int, int, BOOL);
INTERNAL_(void) SetPictExt (HDC, int, int);
INTERNAL_(void) ScalePictExt (HDC, int, int, int, int);
INTERNAL_(void) ScaleRectExt (HDC, int, int, int, int);
shared_state:
ULONG m_ulRefs;
#ifdef _MAC
PicHandle m_hPres;
#else
HMETAFILE m_hPres;
// these are used only during draw
LPMETAINFO m_pMetaInfo;
LPMETADC m_pCurMdc;
BOOL m_fMetaDC;
int m_nRecord;
HRESULT m_error;
LPLOGPALETTE m_pColorSet;
BOOL m_fConvert;
#endif
BOOL (CALLBACK * m_pfnContinue)(ULONG_PTR);
ULONG_PTR m_dwContinue;
DWORD m_dwAspect;
DWORD m_dwSize;
LONG m_lWidth;
LONG m_lHeight;
LPCACHENODE m_pCacheNode;
HPALETTE m_hPalDCOriginal;
HPALETTE m_hPalLast;
};
INTERNAL_(DWORD) MfGetSize (LPHANDLE lphmf);
#ifndef _MAC
FARINTERNAL_(HMETAFILE) QD2GDI(HANDLE);
int CALLBACK __loadds MfCallbackFuncForDraw(HDC hdc, HANDLETABLE FAR* lpHTable,
METARECORD FAR* lpMFR, int nObj, LPARAM lpobj);
int CALLBACK __loadds MfCallbackFuncForGetColorSet(HDC hdc,
HANDLETABLE FAR* lpHTable,
METARECORD FAR* lpMFR, int nObj, LPARAM lpobj);
#endif