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

📄 mainbardialog.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -