You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.7 KiB
C++
93 lines
2.7 KiB
C++
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//文件 MetaFile.h
|
|
//主要功能:
|
|
//
|
|
//程序编写: 2005-12-07
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __CMETAFILE_H__
|
|
#define __CMETAFILE_H__
|
|
|
|
#include ".\pointnamerect.h"
|
|
#include "..\DrawImage\ImageBase.h"
|
|
#include "imageinsert.h"
|
|
|
|
#define METAFILE_VERSION 1
|
|
|
|
class AFX_EXT_CLASS CMetaFile : public CPointNameRect
|
|
{
|
|
public:
|
|
CMetaFile(void);
|
|
~CMetaFile(void);
|
|
|
|
void Serialize(CArchive& ar, const short &ver) override;
|
|
virtual int Read (CFile &fr, const short& ver);
|
|
int ReadWmf(CFile &fr, const short& ver);
|
|
virtual void Write(CFile &fw, const short& ver);
|
|
virtual void Clear(void);
|
|
|
|
virtual void WriteDML(CFile &fw, const short& ver, int nBaseTabNum);
|
|
virtual int ReadDML(CFile &fr, const short &ver);
|
|
|
|
virtual void WritePCG(CFile &fw, const short& ver, int nBaseTabNum);
|
|
virtual int ReadPCG(CFile &fr, const short &ver);
|
|
virtual int ReadPCG2(CFile &fr, const short &ver);
|
|
|
|
void operator=(CMetaFile& mf);
|
|
BOOL SaveMetaFile(LPCTSTR lpstrFileName);
|
|
int ReadMetaFile(LPCTSTR lpstrFileName);
|
|
|
|
CSize GetWmfSize(void); //获得WMF或EMF的原始尺寸
|
|
void Draw(CDC* pDC, CRect rc);
|
|
bool Decode(CFile * hFile, long nForceWidth=0, long nForceHeight=0);
|
|
BOOL IsEmptyWMF();
|
|
|
|
BOOL PastFromClipboard(void);
|
|
BOOL CopyToClipboard(HWND hWnd=NULL);
|
|
BOOL CopyHandle(HENHMETAFILE hMeta);
|
|
BOOL CreateImage(CImageBase& image, CSize* pCustomImageSize=NULL);
|
|
BOOL ToImage(CImageInsert& image);
|
|
|
|
protected:
|
|
void ShrinkMetafile(CSize &size);//为了防止生成的图像尺寸太大
|
|
BOOL BeforeWrite();
|
|
|
|
private:
|
|
#pragma pack(1)
|
|
typedef struct tagRECT16
|
|
{
|
|
short int left;
|
|
short int top;
|
|
short int right;
|
|
short int bottom;
|
|
} RECT16;
|
|
|
|
// taken from Windos 3.11 SDK Documentation (Programmer's Reference Volume 4: Resources)
|
|
typedef struct tagMETAFILEHEADER
|
|
{
|
|
DWORD key; // always 0x9ac6cdd7
|
|
WORD reserved1; // reserved = 0
|
|
RECT16 bbox; // bounding rectangle in metafile units as defined in "inch"
|
|
WORD inch; // number of metafile units per inch (should be < 1440)
|
|
DWORD reserved2; // reserved = 0
|
|
WORD checksum; // sum of the first 10 WORDS (using XOR operator)
|
|
} METAFILEHEADER;
|
|
#pragma pack()
|
|
|
|
CSize wmfSize;
|
|
HENHMETAFILE m_hMeta;
|
|
BOOL CheckMetafileHeader(METAFILEHEADER *pmetafileheader);
|
|
HENHMETAFILE ConvertWmfFiletoEmf(CFile *pFile, METAFILEHEADER *pmetafileheader);
|
|
HENHMETAFILE ConvertEmfFiletoEmf(CFile *pFile, ENHMETAHEADER *pemfh);
|
|
public:
|
|
int GetFileBuffer(BYTE** ppBuffer, DWORD& nBufSize);
|
|
int SetFileBuffer(BYTE* pBuffer, DWORD nBufSize);
|
|
|
|
public:
|
|
virtual int ReadPCG(void *pxp, const short &ver);
|
|
virtual int ReadPCG2(void *pxp, const short &ver);
|
|
};
|
|
|
|
#endif // __CMETAFILE_H__
|