📄 mainbardialog.cpp
字号:
// MainBarDialog.cpp: implementation of the CMainBarDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MainBarDialog.h"
#include "GameIn.h"
#include "../GlobalEventFunc.h"
#include "./BarIcon.h"
#include "WindowIdEnum.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "./Interface/cResourceManager.h"
#include "ObjectManager.h"
#include "StreetStallManager.h"
#include "ExchangeManager.h"
#include "VimuManager.h"
#include "./Interface/cAnimationManager.h"
#include "FriendManager.h"
#include "MacroDialog.h"
#include "./Input/Mouse.h"
#include "MapChange.h"
#include "QuestDialog.h"
#include "CharacterDialog.h"
#include "PartyManager.h"
#include "Interface/cFont.h"
#include "AbilityManager.h"
#include "ChatManager.h"
#include "./Interface/cStatic.h"
#include "PKManager.h"
#include "ExitManager.h"
#include "GameEventManager.h"
#include "HelpDialog.h"
#include "EventMapInfo.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMainBarDialog::CMainBarDialog()
{
m_IconBarWidth = 42; // 15
m_IconBarHeight = 42; // 15
m_IconBarSpace = 0;
m_IconIndexCreator.Init( 100, IG_MAINBARICON_START );
m_OldDragFlag = FALSE;
m_crossStep = -1;
m_crossBarHalfX = -6;
m_crossBarHalfY = -1;
m_bFold = FALSE;
m_nSlidingDir = 0;
// m_pStcTail = NULL;
m_pBtnSize = NULL;
}
CMainBarDialog::~CMainBarDialog()
{
ReleaseBar();
}
void CMainBarDialog::InitBar()
{
/*
ASSERT(!m_pBasicImage);
char buff[128];
wsprintf( buff, "image/GameIn/15/150111.tif" );
m_pBasicImage = WINDOWMGR->GetImageOfFile( buff, 40 );
wsprintf( buff, "image/GameIn/15/CROSS_BAR.TIF" );
m_pMoveCrossImage = WINDOWMGR->GetImageOfFile(buff, 40);
wsprintf( buff, "image/GameIn/spot.tif" );
m_pIconToolTipImg = WINDOWMGR->GetImageOfFile(buff, 40);
*/
//m_pStcTail = (cStatic*)GetWindowForID( MI_STC_TAIL );
m_pBtnSize = (cButton*)GetWindowForID( MI_BTN_SIZE );
m_lOriX = (LONG)GetAbsX();
m_lOriY = (LONG)GetAbsY();
m_lSlidingX = 0;
m_lOffSetX = GetCaptionRect()->right; //刚历 技泼(酒贰 酒捞能 殿废傈俊)
SCRIPTMGR->GetImage( 48, &m_MoveCrossImage );
LoadInfo();
}
void CMainBarDialog::ReleaseBar()
{
SaveInfo();
int n = 0;
CBarIcon * pIcon = NULL;
while( pIcon = (CBarIcon *)m_MainList.RemoveTail() )
{
m_IconIndexCreator.ReleaseIndex( pIcon->GetID() );
delete pIcon;
}
}
void CMainBarDialog::LoadInfo()
{
CMHFile file;
#ifdef _FILE_BIN_
if( !file.Init("./ini/barInfo.bin", "rb") )
return;
#else
if( !file.Init("./ini/barInfo.txt", "r") )
return;
#endif
m_nIconNum = file.GetInt();
for( int i = 0 ; i < m_nIconNum ; ++i )
{
BARICON_INFO info;
info.type = file.GetByte();
info.kind = file.GetWord();
info.barPos = file.GetWord();
info.nToolTipMsg = file.GetWord();
CBarIcon * pIcon = GetIcon(info.kind);
pIcon->InitInfo(&info);
AddIcon(info.barPos, pIcon);
}
file.Release();
}
void CMainBarDialog::Refresh()
{
////窜绵虐 技泼侩
int s_nMacro[] = {
ME_TOGGLE_HELP,
ME_TOGGLE_CHARACTERDLG,
ME_TOGGLE_INVENTORYDLG,
ME_TOGGLE_MUGONGDLG,
ME_TOGGLE_QUESTDLG,
ME_TOGGLE_MINIMAP,
ME_TOGGLE_MUNPADLG,
ME_TOGGLE_FRIENDLIST,
ME_SEND_MEMO,
ME_TOGGLE_OPTIONDLG,
ME_TOGGLE_EXITDLG,
ME_COUNT, //虐绝促.
};
///
cImage ToolTipImg;
SCRIPTMGR->GetImage( 63, &ToolTipImg, PFT_HARDPATH );
char imagePath[128];
char strMacro[32];
PTRLISTPOS pos = m_MainList.GetHeadPosition();
while(pos)
{
CBarIcon * pIcon = (CBarIcon * )m_MainList.GetNext(pos);
BARICON_INFO* pInfo = pIcon->GetInfo();
strcpy( imagePath, RESRCMGR->GetMsg(pInfo->nToolTipMsg) );
sMACRO* pMacro = MACROMGR->GetCurMacroKey( s_nMacro[pInfo->kind] );
if( pMacro )
{
GAMEIN->GetMacroDialog()->ConvertMacroToText( strMacro, pMacro );
wsprintf( imagePath, "%s(%s)", imagePath, strMacro );
}
pIcon->SetToolTip( imagePath, RGB_HALF( 255, 255, 255 ), &ToolTipImg );
}
}
void CMainBarDialog::SaveInfo()
{
// CMHFile file;
// if( !file.Init("./ini/barInfo.txt", "w+") )
// return;
}
int ImgIdxForIdx [][3]=
{
{98,98,98},
{0,1,2},
{3,4,5},
{6,7,8},
{9,10,11},
{12,13,14},
{15,16,17},
{18,19,20},
{21,22,23},
{24,25,26},
{27,28,29},
{77,78,79},
// {80,81,82},
// {83,84,85},
};
CBarIcon * CMainBarDialog::GetIcon(WORD idx)
{
// ------------- 牢磐其捞胶 捞固瘤 窍靛 内爹肺爹 规过 ------------------------------
// taiyo
cImage ImageBasic;
cImage ImageOver;
cImage ImagePress;
SCRIPTMGR->GetImage( ImgIdxForIdx[idx][0], &ImageOver );
SCRIPTMGR->GetImage( ImgIdxForIdx[idx][1], &ImagePress );
SCRIPTMGR->GetImage( ImgIdxForIdx[idx][2], &ImageBasic );
// ------------- 窍靛 内爹肺爹 规过 ------------------------------------------------
// cImage ImageAlram;
// SCRIPTMGR->GetImage( 92, &ImageAlram );
CBarIcon * pIcon = new CBarIcon;
pIcon->Init( 0, 0, m_IconBarWidth, m_IconBarHeight, &ImageBasic, &ImageOver, &ImagePress, NULL, m_IconIndexCreator.GenerateIndex() );
pIcon->SetMovable( TRUE );
// pIcon->SetAlramImage( &ImageAlram );
//WINDOWMGR->AddWindow(pIcon);
return pIcon;
}
DWORD CMainBarDialog::ActionEvent(CMouse * mouseInfo)
{
DWORD we = WE_NULL;
if( !m_bActive ) return we;
if( m_bFold == FALSE )
{
if( m_nSlidingDir == eSLIDING_NONE ) //Sliding吝 俊绰 救窃
{
PTRLISTPOS pos = m_MainList.GetHeadPosition();
while(pos)
{
CBarIcon * pIcon = (CBarIcon * )m_MainList.GetNext(pos);
pIcon->ActionEvent(mouseInfo);
}
/*
if(m_OldDragFlag)
{
m_crossStep = (int)(((mouseInfo->GetMouseX() - m_absPos.x + m_IconBarWidth / 2 )/(m_IconBarWidth + m_IconBarSpace)));
if(mouseInfo->LButtonUp())
{
if(0 <= m_crossStep && m_crossStep <= m_MainList.GetCount())
if(m_pDragIcon->GetData() != m_crossStep)
MoveIcon(m_pDragIcon->GetData(), m_crossStep);
m_OldDragFlag = FALSE;
m_pDragIcon->SetAlpha(255);
}
if(0 > m_crossStep || m_crossStep > m_MainList.GetCount())
m_crossStep = -1;
if(m_pDragIcon->PtInWindow(mouseInfo->GetMouseX(), mouseInfo->GetMouseY()))
m_crossStep = -1;
}
*/
}
else if( m_nSlidingDir == eSLIDING_RIGHT )
{
m_lSlidingX += gTickTime;
if( m_lSlidingX >= m_IconBarWidth*m_nIconNum - 1 ) //-1 : buffer
{
m_lSlidingX = m_IconBarWidth*m_nIconNum;
m_pBtnSize->SetRelXY( m_lOffSetX, 0 );
SetAbsXY( m_lOriX + m_lSlidingX, m_lOriY );
SetWH( m_lOffSetX + m_pBtnSize->GetWidth(), GetHeight() );
m_nSlidingDir = eSLIDING_NONE;
m_lOriX = (LONG)GetAbsX() - m_lSlidingX;
m_lOriY = (LONG)GetAbsY();
m_bFold = TRUE;
}
else
{
m_pBtnSize->SetRelXY( m_lOffSetX + m_IconBarWidth*m_nIconNum - m_lSlidingX, 0 );
SetAbsXY( m_lOriX + m_lSlidingX, m_lOriY );
SetWH( m_lOffSetX + m_pBtnSize->GetWidth() + m_IconBarWidth*m_nIconNum - m_lSlidingX, GetHeight() );
}
}
else
{
m_lSlidingX -= gTickTime;
if( m_lSlidingX <= 1 ) //1 : buffer
{
m_lSlidingX = 0;
m_pBtnSize->SetRelXY( m_lOffSetX + m_IconBarWidth*m_nIconNum, 0 );
SetAbsXY( m_lOriX, m_lOriY );
SetWH( m_lOffSetX + m_pBtnSize->GetWidth() + m_IconBarWidth*m_nIconNum, GetHeight() );
m_nSlidingDir = eSLIDING_NONE;
m_lOriX = (LONG)GetAbsX() - m_lSlidingX;
m_lOriY = (LONG)GetAbsY();
}
else
{
m_pBtnSize->SetRelXY( m_lOffSetX + m_IconBarWidth*m_nIconNum - m_lSlidingX, 0 );
SetAbsXY( m_lOriX + m_lSlidingX, m_lOriY );
SetWH( m_lOffSetX + m_pBtnSize->GetWidth() + m_IconBarWidth*m_nIconNum - m_lSlidingX, GetHeight() );
}
}
}
// we |= cDialog::ActionEvent(mouseInfo);
we |= cWindow::ActionEvent(mouseInfo);
if( !m_bDisable && m_nSlidingDir == eSLIDING_NONE ) //浇扼捞爹吝浚 靛贰弊 救登档废..
we |= ActionEventWindow(mouseInfo);
we |= ActionEventComponent(mouseInfo);
return we;
}
void CMainBarDialog::SetAbsXY(LONG x, LONG y)
{
PTRLISTPOS pos = m_MainList.GetHeadPosition();
CBarIcon * pIcon;
while( pIcon = (CBarIcon * )m_MainList.GetNext(pos) )
{
pIcon->SetAbsXY( x + m_lOffSetX + pIcon->GetData()*m_IconBarWidth, y );
}
cDialog::SetAbsXY(x,y);
}
void CMainBarDialog::OnActionEvent(LONG lId, void * p, DWORD we)
{
if( we & WE_BTNCLICK )
{
if( lId == MI_BTN_SIZE )
{
if( m_nSlidingDir == eSLIDING_NONE )
{
if( !m_bFold )
{
if( m_nSlidingDir == eSLIDING_NONE )
{
m_lOriX = (LONG)GetAbsX();
m_lOriY = (LONG)GetAbsY();
m_lSlidingX = 0; //贸澜困摹
}
m_nSlidingDir = eSLIDING_RIGHT;
}
else
{
if( m_nSlidingDir == eSLIDING_NONE )
{
m_lOriX = (LONG)GetAbsX() - m_IconBarWidth*m_nIconNum;
m_lOriY = (LONG)GetAbsY();
m_lSlidingX = m_IconBarWidth*m_nIconNum; //场困摹
}
m_nSlidingDir = eSLIDING_LEFT;
m_bFold = FALSE;
}
}
else if( m_nSlidingDir == eSLIDING_LEFT )
{
if( m_nSlidingDir == eSLIDING_NONE )
{
m_lOriX = (LONG)GetAbsX();
m_lOriY = (LONG)GetAbsY();
m_lSlidingX = 0; //贸澜困摹
}
m_nSlidingDir = eSLIDING_RIGHT;
}
else
{
if( m_nSlidingDir == eSLIDING_NONE )
{
m_lOriX = (LONG)GetAbsX() - m_IconBarWidth*m_nIconNum;
m_lOriY = (LONG)GetAbsY();
m_lSlidingX = m_IconBarWidth*m_nIconNum; //场困摹
}
m_nSlidingDir = eSLIDING_LEFT;
}
}
}
}
void CMainBarDialog::RepositionIconAbs(POSTYPE AtPos, CBarIcon * pIcon)
{
pIcon->SetData(AtPos);
WORD real_x = (WORD)(GetAbsX() + m_lOffSetX + (m_IconBarWidth*AtPos)+(m_IconBarSpace*(AtPos+1)));
// WORD real_y = GetAbsY() + m_IconBarSpace;
WORD real_y = (WORD)GetAbsY();
pIcon->SetAbsXY(real_x, real_y);
}
void CMainBarDialog::RepositionIcon(int offset, CBarIcon * pIcon)
{
POSTYPE AtPos = pIcon->GetData()+offset;
// ASSERT(AtPos > 0);
RepositionIconAbs(AtPos, pIcon);
}
BOOL CMainBarDialog::AddIcon(POSTYPE AtPos, CBarIcon * pIcon)
{
RepositionIconAbs(AtPos, pIcon);
m_MainList.AddTail(pIcon);
// 唱赣瘤啊 乐促搁 第肺 拱府扁
PTRLISTPOS pos = m_MainList.GetHeadPosition();
while(pos)
{
CBarIcon * pIcon = (CBarIcon * )m_MainList.GetAt(pos);
if(pIcon->GetData() == AtPos)
{
// ASSERT(0);
}
else if(pIcon->GetData() > AtPos)
{
RepositionIcon(1, pIcon);
}
m_MainList.GetNext(pos);
}
return TRUE;
}
BOOL CMainBarDialog::RemoveIcon(POSTYPE AtPos, CBarIcon ** ppIcon)
{
PTRLISTPOS pos = m_MainList.GetHeadPosition();
while(pos)
{
CBarIcon * pIcon = (CBarIcon * )m_MainList.GetAt(pos);
if(pIcon->GetData() == AtPos)
{
m_MainList.RemoveAt(pos);
*ppIcon = pIcon;
}
else if(pIcon->GetData() > AtPos)
{
RepositionIcon(-1, pIcon);
}
m_MainList.GetNext(pos);
}
return TRUE;
}
BOOL CMainBarDialog::MoveIcon(POSTYPE FromPos, POSTYPE ToPos)
{
if( FromPos == ToPos)
{
ASSERT(0);
return TRUE;
}
int offset = -1;
POSTYPE lowPos = FromPos;
POSTYPE HighPos = ToPos;
if(FromPos > ToPos)
{
lowPos = ToPos;
HighPos = FromPos;
offset = 1;
}
PTRLISTPOS pos = m_MainList.GetHeadPosition();
while(pos)
{
CBarIcon * pIcon = (CBarIcon * )m_MainList.GetAt(pos);
if( pIcon->GetData() == FromPos )
{
//m_MainList.RemoveAt(pos);
if(FromPos < ToPos)
RepositionIconAbs(ToPos-1, pIcon);
else
RepositionIconAbs(ToPos, pIcon);
}
else
{
if(FromPos < ToPos)
{
if( lowPos < pIcon->GetData() && pIcon->GetData() < HighPos )
{
RepositionIcon(offset, pIcon);
}
}
else
{
if( lowPos <= pIcon->GetData() && pIcon->GetData() < HighPos )
{
RepositionIcon(offset, pIcon);
}
}
}
m_MainList.GetNext(pos);
}
return TRUE;
}
void CMainBarDialog::Render()
{
if(!m_bActive) return;
// 酒捞能 , 备盒磊
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -