http://www.xdp.it/download.htm
去这里下载OCX的包吧写好了的哦.
去这里下载OCX的包吧写好了的哦.
解决方案 »
- A类引用B类中控件,不能引用的问题。
- 单文档多视图 outlook 问题
- 为什么点击子对话框的右上角的叉叉关闭后,主窗口也关闭了呢?
- 求资料:MSMQ的简单实现用例。
- JoshuaLi来领分(关于CALLBACK问题)
- com中如何传递自定义类型的结构数组?
- 微软专家:如何使VC++ IDE的Output/Debug窗口不显示某些信息
- 现在的CSDN太花了,我都不知道看什么了.........
- 菜问:如何从一个句柄得到指向它的指针,又如何从一个指针,得到它指向的句柄呢?
- 探讨,鼠标双击应用程序主窗口标题栏,系统发送给应用程序主窗口的消息是什么?VC6里没有定义,VC6为什么不定义,我用debug跟踪原来是0XF122,在WinNt和Win2000里正确。
- 显示位图问题?要求:1秒钟30张位图,cpu利用率<50% 条件:位图大小800k,有三百张位图,如何才能达到啊?
- "ox0049e4a0"指令引用的“0x00000004”内存,该内存不能为witten.
class ObtGcomDocEmf : public CObject
{
// Operations
public:
ObtGcomDocEmf();
ObtGcomDocEmf(CString szPathName);
~ObtGcomDocEmf();
BOOL Load(const char *szFileName);
BOOL Draw(CDC* pDC, RECT* pRect);
LPENHMETAHEADER GetEMFHeader(){return ((m_pEMFHdr) ? m_pEMFHdr : NULL);};
LPTSTR GetEMFDescString(){return ((m_pDescStr) ? m_pDescStr : NULL);};
HENHMETAFILE GetEMFHandle(){return ((m_hemf) ? m_hemf : NULL);};
int GetWidth(){
return m_docWidth;
};
int GetHeight()
{
return m_docHeight;
};protected:
BOOL GetEMFCoolStuff();
BOOL LoadPalette();// Attributes
protected:
int m_docWidth;
int m_docHeight;
CString m_szPathName;
HENHMETAFILE m_hemf;
LPENHMETAHEADER m_pEMFHdr;
LPTSTR m_pDescStr;
LPPALETTEENTRY m_pPal;
UINT m_palNumEntries;
LPLOGPALETTE m_pLogPal;
LOGPALETTE m_LogPal;
HPALETTE m_hPal;
};
#include "ObtGcomDocEmf.h"//////////////////////////////////////////////////////////////////////////
//constructor
ObtGcomDocEmf::ObtGcomDocEmf()
{
m_pEMFHdr = NULL;
m_pDescStr = NULL;
m_pPal = NULL;
m_hemf = NULL;
m_pLogPal = NULL;
m_hPal = NULL;
m_docHeight=0;
m_docWidth=0;
}
ObtGcomDocEmf::ObtGcomDocEmf(CString szPathName)
{
m_pEMFHdr = NULL;
m_pDescStr = NULL;
m_pPal = NULL;
m_hemf = NULL;
m_pLogPal = NULL;
m_hPal = NULL;
m_docHeight=0;
m_docWidth=0;
Load(szPathName);
}
//////////////////////////////////////////////////////////////////////////
//destructor
ObtGcomDocEmf::~ObtGcomDocEmf()
{
if (m_pEMFHdr)
free(m_pEMFHdr);
if (m_pDescStr)
free(m_pDescStr);
if (m_pPal)
free(m_pPal);
if (m_pLogPal)
free (m_pLogPal);
if (m_hPal)
DeleteObject(m_hPal);
if (m_hemf)
DeleteEnhMetaFile(m_hemf);
}//////////////////////////////////////////////////////////////////////////
//Load()
BOOL ObtGcomDocEmf::Load(const char *szFileName)
{
UINT uiSig;
//save the filename
m_szPathName = szFileName; //check the file signature to see if this is an enhanced metafile
CFile cfEMF;
cfEMF.Open(m_szPathName, CFile::modeRead | CFile::shareDenyWrite);
cfEMF.Read(&uiSig, sizeof(UINT));
cfEMF.Close(); //if this is an EMF then obtain a handle to it
if (uiSig == EMR_HEADER)
{
m_hemf = GetEnhMetaFile(m_szPathName);
GetEMFCoolStuff(); m_docHeight=m_pEMFHdr->rclBounds.bottom;
m_docWidth=m_pEMFHdr->rclBounds.right; LoadPalette();
}
else
m_hemf = NULL; //return success
return ((m_hemf) ? TRUE : FALSE);
}//////////////////////////////////////////////////////////////////////////
//Draw()
BOOL ObtGcomDocEmf::Draw(CDC *pdc, RECT *pRect)
{
ASSERT(m_hemf); BOOL fRet = FALSE;
CRect crect;
CPalette *cpalOld = NULL; if (m_hemf)
{
if (m_hPal)
{
CPalette cpal;
if ((cpalOld = pdc->SelectPalette(cpal.FromHandle(m_hPal), FALSE)))
pdc->RealizePalette();
}
fRet = pdc->PlayMetaFile(m_hemf, pRect); if (cpalOld)
pdc->SelectPalette(cpalOld, FALSE);
}
return (fRet);
}//////////////////////////////////////////////////////////////////////////
//GetEMFCoolStuff()
BOOL ObtGcomDocEmf::GetEMFCoolStuff()
{
if (m_hemf)
{
//
//obtain the sizes of the emf header, description string and palette
//
UINT uiHdrSize = ::GetEnhMetaFileHeader(m_hemf, 0, NULL);
UINT uiDescStrSize = ::GetEnhMetaFileDescription(m_hemf, 0, NULL);
UINT uiPalEntries = ::GetEnhMetaFilePaletteEntries(m_hemf, 0, NULL);
//
//if these are lengths > 0 then allocate memory to store them
//
if (uiHdrSize)
m_pEMFHdr = (LPENHMETAHEADER)malloc(uiHdrSize);
if (uiDescStrSize)
m_pDescStr = (LPTSTR)malloc(uiDescStrSize);
if (uiPalEntries)
m_pPal = (LPPALETTEENTRY)malloc(uiPalEntries * sizeof(PALETTEENTRY));
//
//so far the emf seems to be valid so continue
//
if (uiHdrSize)
{
//
//get the actual emf header and description string
//
if (!::GetEnhMetaFileHeader(m_hemf, uiHdrSize, m_pEMFHdr))
return (FALSE);
else
{
//
//get the description string if it exists
//
if (uiDescStrSize)
::GetEnhMetaFileDescription(m_hemf, uiDescStrSize, m_pDescStr);
//
//get the palette if it exists
//
if (uiPalEntries)
{
::GetEnhMetaFilePaletteEntries(m_hemf, uiPalEntries, m_pPal);
m_palNumEntries = uiPalEntries;
}
}
}
}
return (TRUE);
}//////////////////////////////////////////////////////////////////////////
//LoadPalette()
BOOL ObtGcomDocEmf::LoadPalette()
{
if (m_pPal)
{
m_pLogPal = (LPLOGPALETTE) malloc(sizeof(LOGPALETTE) +(sizeof (PALETTEENTRY) * m_palNumEntries));
m_pLogPal->palVersion = 0x300;
m_pLogPal->palNumEntries = m_palNumEntries;
//copy palette entries into palentry array
for (int i = 0; i < m_pLogPal->palNumEntries; i++)
m_pLogPal->palPalEntry[i] = *m_pPal++; //position the ptr back to the beginning should we call this
//code again
m_pPal -= m_pLogPal->palNumEntries; //create the palette
if ((m_hPal = ::CreatePalette((LPLOGPALETTE)m_pLogPal)))
return TRUE;
}
return FALSE;
}