⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picture.cpp

📁 三国志IX武将编辑器
💻 CPP
字号:
#include "stdafx.h"
#include "picture.h"

CPicture::CPicture()
{
	cb=0;
	m_Success=FALSE;
	::AfxOleInit();
    pStm=NULL;
	pPic=NULL;
}

CPicture::~CPicture()
{
	if(pPic!=NULL) pPic->Release();
	if(pStm!=NULL) pStm->Release();
}

BOOL CPicture::LoadPicture(char filename[255])
{
     CString name;
	 name.Format(filename);
	 return  LoadPicture(name);
}

BOOL CPicture::LoadPicture(CString filename)
{
	m_Success=FALSE;
    if(pStm!=NULL) 
	{
		pStm->Release();
		pStm=NULL;
	}
    CFile file;
	CFileStatus fstatus;

	if(CFile::GetStatus(filename,fstatus)==FALSE) return FALSE;

	if(fstatus.m_size<=0) return FALSE;
 
	if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone)==FALSE) return FALSE;
    cb=file.GetLength();
	HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
	LPVOID pvData=NULL;

	if(hGlobal!=NULL)
	{
		if((pvData=GlobalLock(hGlobal))!=NULL)
		{
			file.ReadHuge(pvData,cb);
			GlobalUnlock(hGlobal);
			if(CreateStreamOnHGlobal(hGlobal,TRUE,&pStm)!=S_OK)
			{
			file.Close();
			GlobalFree(hGlobal);
			return FALSE;
			}
		}
	}
	else
	{
		file.Close();
		GlobalFree(hGlobal);
		return FALSE;
	}
    file.Close();
   
    if(pPic!=NULL) 
	{
		pPic->Release();
        pPic=NULL;
	}

	if(OleLoadPicture(pStm,cb,TRUE,IID_IPicture,(LPVOID*)&pPic)==S_OK)
	{
	   pPic->get_Type(&m_type);
	   pPic->get_Width(&hmWidth);
	   pPic->get_Height(&hmHeight);
	   m_width=(int)(hmWidth/26.45);
	   m_height=(int)(hmHeight/26.45);
	}
	else return FALSE;

    
    m_Success=TRUE;
	return TRUE;
}

BOOL CPicture::LoadPicture(UINT nIDResource,LPCTSTR IDType)
{
	m_Success=FALSE;
    if(pStm!=NULL) 
	{
		pStm->Release();
		pStm=NULL;
	}

    HRSRC hrSrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nIDResource),IDType);
    HGLOBAL Global = LoadResource(AfxGetResourceHandle(), hrSrc);
    LPVOID lpExe = LockResource(Global);
    
    cb=(UINT)SizeofResource(AfxGetResourceHandle(),hrSrc);

   	HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
	LPVOID pvData=NULL;
	if(hGlobal!=NULL)
	{
		if((pvData=GlobalLock(hGlobal))!=NULL)
		{
			CopyMemory(pvData,lpExe,cb);
			GlobalUnlock(hGlobal);
			if(CreateStreamOnHGlobal(hGlobal,TRUE,&pStm)!=S_OK)
			{
			GlobalFree(hGlobal);
			return FALSE;
			}
		}
	}
    else
	{
		GlobalFree(hGlobal);
		return FALSE;
	}

    if(pPic!=NULL) 
	{
		pPic->Release();
        pPic=NULL;
	}

    if(OleLoadPicture(pStm,cb,TRUE,IID_IPicture,(LPVOID*)&pPic)==S_OK)
	{
       pPic->get_Type(&m_type);
	   pPic->get_Width(&hmWidth);
	   pPic->get_Height(&hmHeight);

       m_width=(int)(hmWidth/26.45);
	   m_height=(int)(hmHeight/26.45);
	}
	else return FALSE;
   
	m_Success=TRUE;
	return TRUE;
}

void CPicture::DrawPicture(HDC hdc,int x,int y,int cx,int cy)
{	
	 if(m_Success) pPic->Render(hdc,x,y,cx,cy,0,hmHeight,hmWidth,-hmHeight,NULL);
}

void CPicture::DrawRect(HDC hdc,CRect obj,CRect src)
{
     if(m_Success)
		 pPic->Render(hdc,obj.left,obj.top,obj.Width(),obj.Height(),
		 (long)(src.left*26.45),
		 (long)(hmHeight-src.top*26.45),
		 (long)(src.Width()*26.45),
		 (long)(-src.Height()*26.45),
		 NULL
		 );
}

BOOL CPicture::SavePicture(char objname[255])
{
	CString name;
	name.Format(objname);
	return SavePicture(name);
}

BOOL CPicture::SavePicture(CString objname)
{
	if(!m_Success) return FALSE;
	CFile file;
	if(file.Open(objname,CFile::modeWrite|CFile::modeCreate|CFile::shareDenyNone))
	{
	   char *pv=new char[cb+1];
	   ULONG pcb; 
       LARGE_INTEGER seek;
       seek.QuadPart=-cb;
	   pStm->Seek(seek,STREAM_SEEK_END,NULL);
       pStm->Read(pv,cb,&pcb);
	   file.Write(pv,pcb);
	   file.Close();
	}
	else return FALSE;

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -