📄 statusicondlg.cpp
字号:
// StatusIconDlg.cpp: implementation of the CStatusIconDlg class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "StatusIconDlg.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "./Input/UserInput.h"
#include "./Interface/cFont.h"
#include "MHFile.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CStatusIconDlg)
CStatusIconDlg::CStatusIconDlg()
{
m_pDescriptionArray = NULL;
m_pObject = NULL;
memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);
m_CurIconNum = 0;
}
CStatusIconDlg::~CStatusIconDlg()
{
if(m_pDescriptionArray)
{
delete [] m_pDescriptionArray;
}
}
void CStatusIconDlg::AddIcon(CObject* pObject,WORD StatusIconNum)
{
if(pObject != m_pObject)
return;
if(StatusIconNum >= eStatusIcon_Max)
__asm int 3;
++m_IconCount[StatusIconNum];
if( m_IconCount[StatusIconNum] == 1 )
++m_CurIconNum;
}
void CStatusIconDlg::RemoveIcon(CObject* pObject,WORD StatusIconNum)
{
if(pObject != m_pObject)
return;
if(StatusIconNum >= eStatusIcon_Max)
__asm int 3;
if(m_IconCount[StatusIconNum] == 0)
return;
--m_IconCount[StatusIconNum];
if( m_IconCount[StatusIconNum] == 0 )
--m_CurIconNum;
}
void CStatusIconDlg::LoadDescription()
{
CMHFile file;
if(file.Init("image/buf_msg.bin","rb",MHFILE_FLAG_DONOTDISPLAY_NOTFOUNDERROR) == FALSE)
return;
char buf[256];
m_MaxDesc = file.GetInt();
file.GetLine(buf,256); // read enter
m_pDescriptionArray = new StaticString[m_MaxDesc+1];
for(int n=1;n<=m_MaxDesc;++n) // 酒捞能 锅龋啊 1何磐 矫累茄促.
{
file.GetLine(buf,256);
m_pDescriptionArray[n] = buf;
}
file.Release();
}
void CStatusIconDlg::Init(CObject* pObject,VECTOR2* pDrawPosition,int MaxIconPerLine)
{
memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);
m_pObject = pObject;
m_DrawPosition = *pDrawPosition;
m_MaxIconPerLine = MaxIconPerLine;
// image load
for(int n=1;n<eStatusIcon_Max;++n)
{
SCRIPTMGR->GetImage( n-1, &m_StatusIcon[n] , PFT_BUFFPATH );
}
//Description Load
if(m_pDescriptionArray == NULL)
{
LoadDescription();
}
cImage ToolTipImg;
SCRIPTMGR->GetImage( 63, &ToolTipImg, PFT_HARDPATH );
m_toolTip.Init( 0, TTTC_DEFAULT, &ToolTipImg, TTCLR_ITEM_CANEQUIP );
m_toolTip.SetImageAlpha( TOOLTIP_ALPHA );
m_CurIconNum = 0;
}
void CStatusIconDlg::Release()
{
m_pObject = NULL;
m_CurIconNum = 0;
memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);
}
void CStatusIconDlg::Render()
{
if(m_pObject == NULL)
return;
int mx = g_UserInput.GetMouse()->GetMouseX();
int my = g_UserInput.GetMouse()->GetMouseY();
int curx = 0;
int cury = 0;
VECTOR2 curpos;
int IconNum = 0;
for(int n=1;n<eStatusIcon_Max;++n)
{
if(m_IconCount[n] == 0)
continue;
if(m_StatusIcon[n].IsNull())
continue;
curpos.x = m_DrawPosition.x + curx*40;
curpos.y = m_DrawPosition.y + cury*40;
m_StatusIcon[n].RenderSprite(NULL,NULL,0,&curpos,0xffffffff);
if(++curx >= m_MaxIconPerLine)
{
curx = 0;
++cury;
}
/*
if( m_toolTip.IsValid() )
{
WINDOWMGR->SetToolTipWindow( &m_toolTip );
m_toolTip.SetXY(m_ttX+TOOLTIP_MOUSESIZE_X, m_ttX+TOOLTIP_MOUSESIZE_Y);
}
*/
if( !WINDOWMGR->IsMouseOverUsed() )
{
int dx = int(mx - curpos.x);
int dy = int(my - curpos.y);
if(0 < dx && dx < 40 && 0 < dy && dy < 40)
{
//RECT rect = { (long)curpos.x, (long)curpos.y, (long)curpos.x+100, (long)curpos.y+20 };
m_toolTip = m_pDescriptionArray[n];
m_toolTip.SetXY( mx+TOOLTIP_MOUSESIZE_X, my+TOOLTIP_MOUSESIZE_Y );
WINDOWMGR->SetToolTipWindow( &m_toolTip );
// m_toolTip.Render();
// CFONT_OBJ->RenderFont( 0, m_pDescriptionArray[n], strlen(m_pDescriptionArray[n]), &rect, 0xffffffff );
}
}
if( ++IconNum >= m_CurIconNum )
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -