📄 mygrid.cpp
字号:
// MyGrid.cpp : implementation file
//
#include "stdafx.h"
#include "MyShell.h"
#include "MyGrid.h"
#include "Hero.h"
#include "Shop.h"
#include "3DGameMap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyGrid
const int CHAR_WIDTH = 6 ;
CMyGrid::CMyGrid()
{
m_GriPar.m_bMouseMove = false ;
m_GriPar.m_bScale = true;
m_GriPar.m_nGridAbleNum = 0 ;
for ( int i = 0; i < 256; i++ )
m_GriPar.m_bGridAble[i] = false ;
m_GriPar.m_bEnable = true ;
m_GriPar.m_bPickEnable = true ;
m_GriPar.m_ClientRect = CRect ( 0, 0, 0, 0 ) ;
}
CMyGrid::~CMyGrid()
{
}
BEGIN_MESSAGE_MAP(CMyGrid, CButton)
//{{AFX_MSG_MAP(CMyGrid)
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyGrid message handlers
void CMyGrid::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
}
BOOL CMyGrid::Init(int xPos, int yPos, BYTE btLine, BYTE btRow, BYTE btOwnerID)
{
memset(&m_GriPar, 0L, sizeof(m_GriPar));
CRect rect ;
CMyGrid::GetWindowRect ( rect ) ;
m_GriPar.m_IntPoint.x = rect.left - xPos ;
m_GriPar.m_IntPoint.y = rect.top - yPos ;
m_GriPar.m_ClientRect.right = ( rect.right - rect.left ) ;
m_GriPar.m_ClientRect.bottom = ( rect.bottom - rect.top ) ;
m_GriPar.m_iGridSpacex = 1;
m_GriPar.m_iGridSpacey = 1;
m_GriPar.m_btGridLine = btLine ;
m_GriPar.m_btGridRow = btRow ;
m_GriPar.m_btOwnerID = btOwnerID ;
m_GriPar.m_btGridWidth = ( rect.Width () - (btRow - 1) *m_GriPar.m_iGridSpacex) / btRow ;
m_GriPar.m_btGridHeight = ( rect.Height () - (btLine - 1)*m_GriPar.m_iGridSpacey ) / btLine ;
for ( int i = 0; i < 256; i++ )
{
m_GriPar.m_bGridAble[i] = false ;
m_GriPar.m_IconIndex[i] = 0;
m_GriPar.m_IconTypeID[i]= 0;
m_GriPar.m_IconRealID[i] = 0;
}
m_GriPar.m_bEnable = true;
m_GriPar.m_bPickEnable = true;
m_GriPar.m_bScale = true;
return true ;
}
void CMyGrid::Show(int x, int y)
{
m_GriPar.m_Point = CPoint ( m_GriPar.m_IntPoint.x + x, m_GriPar.m_IntPoint.y + y ) ;
int index ;
int nRowLeft ;
int nLineLeft ;
for ( int i = 1; i <= m_GriPar.m_btGridLine; i++ )
for ( int j = 1; j <= m_GriPar.m_btGridRow; j++ )
{
index = ( i - 1 ) * m_GriPar.m_btGridRow + j ;
nRowLeft = ( j - 1 ) * ( m_GriPar.m_btGridWidth + m_GriPar.m_iGridSpacex ) ;
nLineLeft = ( i - 1 ) * ( m_GriPar.m_btGridHeight + m_GriPar.m_iGridSpacey ) ;
// Shwo the focus
if ( m_GriPar.m_bMouseMove && m_GriPar.m_MouseMoveIconLandR.x == j && m_GriPar.m_MouseMoveIconLandR.y == i )
{
CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * )g_strControlAni, "Image2", EXIGENCE_IMMEDIATE ) ;
if ( ShowAni != NULL )
{
RECT rect = { 0, 0, 32, 32 } ;
ShowAni->ShowEx( 0,
m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft,
&rect,
m_GriPar.m_btGridWidth,
m_GriPar.m_btGridHeight ) ;
}
if (!GetGridAble(CPoint(j,i)))
{
char strInfo[32]="";
int nPosX = 0;
int nPosY = 0;
switch(m_GriPar.m_btOwnerID)
{
case DLG_MPCGOODS:
// sprintf(strInfo,"物品装备");
break;
case DLG_MONSTEREGG:
sprintf(strInfo,g_objGameDataSet.GetStr(10311)); //"幻兽蛋"
nPosY = -12;
break;
case DLG_MONSTERSKILL:
sprintf(strInfo,g_objGameDataSet.GetStr(10312)); // "幻兽技能"
nPosX = m_GriPar.m_btGridWidth;
break;
case DLG_STONEGOODS0:
// sprintf(strInfo,"魔魂宝石");
break;
default:
break;
}
CMySize FontSize;
CMyBitmap::GetFontSize(FontSize);
if (strlen(strInfo) > 0)
{
g_objGameDataSet.ShowInfoBack( m_GriPar.m_Point.x + nRowLeft + m_GriPar.m_btGridWidth - strlen(strInfo)*CHAR_WIDTH - 5,
m_GriPar.m_Point.y + nLineLeft + nPosY -1 - 15,
strlen(strInfo)*CHAR_WIDTH + 10,
FontSize.iHeight + 1 + 10) ;
CMyBitmap::ShowString(m_GriPar.m_Point.x + m_GriPar.m_btGridWidth - strlen(strInfo)*CHAR_WIDTH + nRowLeft,
m_GriPar.m_Point.y + nLineLeft + nPosY - 10,
0xffffff,strInfo);
}
}
}
if ( GetGridAble ( CPoint ( j, i ) ) )
{
// show effect
{
ItemEffectInfo* pInfo = g_objGameDataSet.GetItemEffectInfo(m_GriPar.m_IconTypeID[index - 1]);
if(pInfo && _stricmp(pInfo->strItemBgEffect.c_str(), "NULL") != 0)
{
if(!m_GriPar.m_objEffect[index - 1].TestEffect((char*)pInfo->strItemBgEffect.c_str()))
{
m_GriPar.m_objEffect[index - 1].Clear();
if(::RandGet(30) == 1)
{
m_GriPar.m_objEffect[index - 1].Add((char*)pInfo->strItemBgEffect.c_str());
m_GriPar.m_objEffect[index - 1].EverPlay();
}
}
CMyPos pPosWorld,pPosBg;
g_objGameMap.Screen2World(m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft, pPosWorld.x, pPosWorld.y);
g_objGameMap.World2Bg(pPosWorld.x, pPosWorld.y, pPosBg.x, pPosBg.y );
m_GriPar.m_objEffect[index - 1].Process();
m_GriPar.m_objEffect[index - 1].Show(pPosBg);
}
}
switch ( m_GriPar.m_btIconType[index - 1] )
{
case ICON_TYPE_TASKITEM:
if(m_GriPar.m_IconTypeID[index-1])
{
ShowTypeItem(m_GriPar.m_IconTypeID[index-1],
m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft );
}
break;
case ICON_TYPE_ITEM:
{
// Show the item owner
CItem* pItem = g_objHero.GetItem ( m_GriPar.m_IconRealID[index - 1] ) ;
if ( pItem != NULL )
{
pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft ,m_GriPar.m_bScale) ;
if (( pItem->GetTypeID() == _ARROW || pItem->GetTypeID() == _DART || pItem->GetSort() == ITEMSORT_EXPEND)
&& pItem->GetPackageType() != PACKAGE_EGG
&& pItem->GetAmount() > 1 && pItem->GetAmountLimit() > 1 )
{
char strNum[32] ;
itoa( pItem->GetAmount(), strNum, 10 ) ;
CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft + m_GriPar.m_btGridWidth - CHAR_WIDTH * strlen( strNum ),
m_GriPar.m_Point.y + nLineLeft + m_GriPar.m_btGridHeight - CHAR_WIDTH - 5,
0xffffffff,
strNum ) ;
}
}
}
break ;
case ICON_TYPE_QUSE:
{
// Show the item owner
BOOL bLoad = false;
int nAmount = g_objHero.GetItemAmount();
for(int k = 0; k < nAmount; k ++)
{
CItem* pMyItem = g_objHero.GetItemByIndex(k);
if(pMyItem && pMyItem->GetTypeID() == m_GriPar.m_IconTypeID[index - 1])
{
pMyItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft );
char strNum[8] ;
itoa( m_GriPar.m_IconNum[index - 1], strNum, 10 ) ;
CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft,
0xffffffff,
strNum ) ;
bLoad = true;
break;
}
}
if (!bLoad)
{
nAmount = g_objHero.GetItemAmount(PACKAGE_SOUL);
for(int k = 0; k < nAmount; k ++)
{
CItem* pMyItem = g_objHero.GetItemByIndex(k,PACKAGE_SOUL);
if(pMyItem && pMyItem->GetTypeID() == m_GriPar.m_IconTypeID[index - 1])
{
pMyItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft );
char strNum[8] ;
itoa( m_GriPar.m_IconNum[index - 1], strNum, 10 ) ;
CMyBitmap::ShowString( m_GriPar.m_Point.x + nRowLeft,
m_GriPar.m_Point.y + nLineLeft,
0xffffffff,
strNum ) ;
break;
}
}
}
}
break;
case ICON_TYPE_SKILL:
{
char strName[32] ;
sprintf( strName, "MagicSkillType%d", m_GriPar.m_IconTypeID[index - 1] ) ;
CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * )g_strMagicAni,
strName,
EXIGENCE_IMMEDIATE ) ;
RECT rect = { 0, 0, GRID_ICONMOVE_WIDTH, GRID_ICONMOVE_HEIGHT } ;
if ( ShowAni != NULL )
{
ShowAni->ShowEx( 0,
m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft ,
&rect,
GRID_ICONQUICK_WIDTH,
GRID_ICONQUICK_HEIGHT ) ;
}
}
break ;
case ICON_TYPE_SHOP:
{
// Show the item owner
CItem *pItem = g_objShop.GetItem( m_GriPar.m_IconIndex[index - 1] ) ;
if ( pItem != NULL )
{
pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft ,m_GriPar.m_bScale ) ;
}
}
break ;
case ICON_TYPE_DEPOT:
{
// Show the item owner
CItem *pItem = g_objHero.GetPackageItemByIndex( m_GriPar.m_IconIndex[index - 1] ) ;
if ( pItem != NULL )
{
pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft,m_GriPar.m_bScale ) ;
}
else
{
pItem = g_objHero.GetItem(m_GriPar.m_IconRealID[index - 1]);
if (pItem != NULL)
{
pItem->ShowMiniItem( m_GriPar.m_Point.x + nRowLeft ,
m_GriPar.m_Point.y + nLineLeft,m_GriPar.m_bScale ) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -