//+------------------------------------------------------------------------- // // 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