windows-nt/Source/XPSP1/NT/com/ole32/ole232/inc/emf.h

167 lines
4.5 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// 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);