|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: emf.h
//
// Contents: Declaration of CEMfObject
//
// Classes: CEMfObject
//
// History: dd-mmm-yy Author Comment
// 01-Feb-95 t-ScottH add Dump method to CEMfObject
// 12-May-94 DavePl created
//
//--------------------------------------------------------------------------
#include "olepres.h"
#include "olecache.h"
#include "cachenod.h"
// The following number adjusts the count of records processed by
// our EMF enumeration function before the user's callback function
// is run.
#define EMF_RECORD_COUNT 20
// Enumeration to indicate which format a hEMF is to be serialized as.
// Values are not indicative of anything, just non-zero and non-one to
// make it easier to catch bogus values while debugging
typedef enum tagEMFWRITETYPE { WRITE_AS_WMF = 13, WRITE_AS_EMF = 17 } EMFWRITETYPE;
//+-------------------------------------------------------------------------
//
// Class: CEMfObject
//
// Purpose: Enhanced 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
// 12-May-94 DavePl Created
//
//--------------------------------------------------------------------------
class FAR CEMfObject : public IOlePresObj, public CPrivAlloc { public: CEMfObject(LPCACHENODE pCacheNode, DWORD dwAspect); ~CEMfObject();
STDMETHOD (QueryInterface) (THIS_ REFIID riid, void ** 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 * pvAspect, HDC hicTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, int (CALLBACK * pfnContinue)(ULONG_PTR), ULONG_PTR dwContinue); STDMETHOD (Load) (THIS_ LPSTREAM pstm, BOOL fReadHeaderOnly);
STDMETHOD (Save) (THIS_ LPSTREAM pstm);
STDMETHOD (GetExtent) (THIS_ DWORD dwAspect, LPSIZEL lpsizel); STDMETHOD (GetColorSet) (void * pvAspect, HDC hicTargetDev, LPLOGPALETTE * ppColorSet);
STDMETHOD_(BOOL, IsBlank) (void);
STDMETHOD_(void, DiscardHPRES) (void);
int CALLBACK CallbackFuncForDraw (HDC hdc, HANDLETABLE * lpHTable, const ENHMETARECORD * lpEMFR, int nObj, LPARAM lpobj); #ifdef _DEBUG
STDMETHOD(Dump) (THIS_ char **ppszDump, ULONG ulFlag, int nIndentLevel); #endif // _DEBUG
private:
INTERNAL ChangeData (HENHMETAFILE hEMfp, BOOL fDelete); INTERNAL_(HENHMETAFILE) LoadHPRES (void); INTERNAL_(HENHMETAFILE) GetCopyOfHPRES (void); inline HENHMETAFILE M_HPRES(void); ULONG m_ulRefs; HENHMETAFILE m_hPres;
BOOL m_fMetaDC; int m_nRecord; HRESULT m_error; LPLOGPALETTE m_pColorSet;
int (CALLBACK * m_pfnContinue)(ULONG_PTR); ULONG_PTR m_dwContinue; DWORD m_dwAspect; DWORD m_dwSize; LONG m_lWidth; LONG m_lHeight; LPCACHENODE m_pCacheNode; }; // This is the prototype for the callback function which
// will enumerate over the enhanced metafile records.
int CALLBACK EMfCallbackFuncForDraw (HDC hdc, HANDLETABLE * pHTable, const ENHMETARECORD * pMFR, int nObj, LPARAM lpobj);
// Utility function to de-serialize an enhanced metafile from
// a stream, and create a usable handle to it
FARINTERNAL UtGetHEMFFromEMFStm(LPSTREAM lpstream, DWORD * dwSize, HENHMETAFILE * lphPres);
// Utility function which takes a handle to an enhanced metafile
// and serializes the associated metafile to a stream
FARINTERNAL UtHEMFToEMFStm(HENHMETAFILE hEMF, DWORD dwSize, LPSTREAM lpstream, EMFWRITETYPE type);
// A utility function to check whether or not a DC in question
// is a standard DC or a metafile DC.
STDAPI_(BOOL) OleIsDcMeta (HDC hdc);
|