📄 cbutton.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 + -