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

📄 cbutton.cpp

📁 一个个人开发的rpg游戏<亚特兰蒂斯传奇>的源码
💻 CPP
字号:
//--------------------------------------------------------------------------------------------------------
//                        游戏按钮模块
//CButton.cpp
//界面的按钮功能
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//创建于:2003/7/7 by Kylinx
//--------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include"CButton.h"
#include"CFont.h"
#include"CGame.h"
#include"CMacro.h"
CRenderButton::CRenderButton():CRenderTask()
{
	m_pGame=NULL;
	this->m_aButtons=0;
	this->m_dwButtonCount=0;
	m_dwCurrentSelect=0;
}
CRenderButton::~CRenderButton()
{
	Release();
}

BOOL CRenderButton::LoadButtonSettingFromFile(CGame*pGame,const char*szSection,const char*szFile)
{
	LOA_ASSERT(pGame!=NULL);
	LOA_ASSERT(szSection!=NULL);
	LOA_ASSERT(szFile!=NULL);

	m_pGame=pGame;

	Release();
	this->m_dwButtonCount=::GetPrivateProfileInt(szSection,"ButtonCount",0,szFile);
	m_aButtons=new STButton[this->m_dwButtonCount]();
	if(!m_aButtons)
	{
		return false;
	}
	char szKey[128];
	char szValTemp[256];
	int iValTemp;
	CFont font;
	DDSURFACEDESC2  ddsd;
	if(!font.CreateFont())
	{
		Release();
		return false;
	}
	for(DWORD i=0;i<this->m_dwButtonCount;i++)
	{
		memset(szKey,0,128);
		wsprintf(szKey,"Button%d_Style",i+1);
		iValTemp=::GetPrivateProfileInt(szSection,szKey,0,szFile);
		memset(szKey,0,128);
		memset(szValTemp,0,256);
		wsprintf(szKey,"Button%d_Pos",i+1);
		::GetPrivateProfileString(szSection,szKey,"",szValTemp,256,szFile);
		sscanf(szValTemp,"%d,%d",&m_aButtons[i].m_rtArea.left,&m_aButtons[i].m_rtArea.top);//得到坐标

		memset(szKey,0,128);
		memset(szValTemp,0,256);
		wsprintf(szKey,"Button%d",i+1);
		::GetPrivateProfileString(szSection,szKey,"",szValTemp,256,szFile);
		if(strcmp(szValTemp,"")==0)
		{
			Release();
			return false;
		}
		if(iValTemp==0)
		{
			
			if(FAILED(m_pGame->GetDisplay()->CreateSurfaceFromText(&m_aButtons[i].m_pSurface,
				font.GetFont(),szValTemp,RGB(255,255,255),RGB(0,0,255))))
			{
				Release();
				return false;
			}
			if(FAILED(m_pGame->GetDisplay()->CreateSurfaceFromText(&m_aButtons[i].m_pSurfaceSelect,
				font.GetFont(),szValTemp,RGB(255,255,255),RGB(0,255,0))))
			{
				Release();
				return false;
			}
			m_aButtons[i].m_pSurfaceSelect->SetColorKey(RGB(255,255,255));
			m_aButtons[i].m_pSurface->SetColorKey(RGB(255,255,255));
		}
		else if(iValTemp==1)
		{
			if(FAILED(m_pGame->GetDisplay()->CreateSurfaceFromBitmap(&m_aButtons[i].m_pSurface,szValTemp,0,0)))
			{
				Release();
				return false;
			}
			memset(szKey,0,128);
			memset(szValTemp,0,256);
			wsprintf(szKey,"Button%d_2",i+1);
			::GetPrivateProfileString(szSection,szKey,"",szValTemp,256,szFile);
			if(FAILED(m_pGame->GetDisplay()->CreateSurfaceFromBitmap(&m_aButtons[i].m_pSurface,szValTemp,0,0)))
			{
				Release();
				return false;
			}
		}
		else
		{
			Release();
			return false;
		}

		ZeroMemory(&ddsd,sizeof(ddsd));
		ddsd.dwSize=sizeof(ddsd);
		m_aButtons[i].m_pSurface->GetDDrawSurface()->GetSurfaceDesc(&ddsd);

		m_aButtons[i].m_rtArea.right=m_aButtons[i].m_rtArea.left+ddsd.dwWidth;
		m_aButtons[i].m_rtArea.bottom=m_aButtons[i].m_rtArea.top+ddsd.dwHeight;

	}
	return true;
}

void CRenderButton::JudgeMouseSelect()
{
	/*
	POINT pt;
	::GetCursorPos(&pt);
	::ScreenToClient(m_pGame->GetHWnd(),&pt);
	for(DWORD i=0;i<this->m_dwButtonCount;i++)
	{
		if(::PtInRect(&m_aButtons[i].m_rtArea,pt))
		{
			m_dwCurrentSelect=i;
		}
		
	}
	*/
}
void LOA_RENDER_API CRenderButton::Render()
{
	for(DWORD i=0;i<this->m_dwButtonCount;i++)
	{
		m_pGame->GetDisplay()->Blt(m_aButtons[i].m_rtArea.left,
								   m_aButtons[i].m_rtArea.top,
								   m_aButtons[i].m_pSurface);
	}
	m_pGame->GetDisplay()->Blt(m_aButtons[m_dwCurrentSelect].m_rtArea.left,
					m_aButtons[m_dwCurrentSelect].m_rtArea.top,
					m_aButtons[m_dwCurrentSelect].m_pSurfaceSelect);
}
BOOL LOA_RENDER_API CRenderButton::IsRenderComplete()
{
	return false;
}
void LOA_RENDER_API CRenderButton::Release()
{
	if(m_aButtons)
	{
		delete [] m_aButtons;
		m_aButtons=NULL;
	}
	
	this->m_dwButtonCount=0;
}

⌨️ 快捷键说明

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