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

📄 myprogress.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
// MyProgress.cpp : implementation file
//

#include "stdafx.h"
#include "MyShell.h"
#include "MyProgress.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyProgress

CMyProgress::CMyProgress()
{
	m_PrgPar.m_bBorder = false ;
	m_PrgPar.m_btShowMode = 0 ;
}

CMyProgress::~CMyProgress()
{
}


BEGIN_MESSAGE_MAP(CMyProgress, CProgressCtrl)
	//{{AFX_MSG_MAP(CMyProgress)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyProgress message handlers
void CMyProgress::ShowMaxPercent(int x, int y, int nMax, int nPercent, int nWidth)
{
	if (m_PrgPar.m_btType != MY_PROGRESS_V
		||  nPercent <=0 || nPercent >= 1000)
		return;
	int upLeft =  m_PrgPar.m_nHeight - ( nMax * m_PrgPar.m_nStep );
	
	int nPosX = 0;
	int nLength = nWidth;
	int nPosY = abs(nWidth - upLeft);
	nLength = __min(nWidth, sqrt(nWidth*nWidth - nPosY*nPosY));
	nPosX = nWidth - nLength;
	RECT rect = { 0,
		0, 
		nLength, 
		4 } ;
	
	CAni*	ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
		"StatusLine", 
		EXIGENCE_IMMEDIATE ) ;
	if ( ShowAni != NULL )
	{
		ShowAni->ShowEx ( 0,
			m_PrgPar.m_IntPoint.x + x + nPosX,
			m_PrgPar.m_IntPoint.y + y + upLeft,
			&rect,nLength,4);
	}
}


void CMyProgress::Show(int x, int y, int nPos, int nCurpos, UCHAR ucAlpha)
{ 
	if ( nCurpos > m_PrgPar.m_nLower )
		nCurpos = m_PrgPar.m_nLower ;

	if ( nPos > m_PrgPar.m_nLower )
		nPos = m_PrgPar.m_nLower ;
	CAni *ShowAni ;
	switch  ( m_PrgPar.m_btType )
	{
	case MY_PROGRESS_V:
		{
			switch ( m_PrgPar.m_btShowMode )
			{
			case 0:
				{
					if ( nPos <= nCurpos )
					{
						nCurpos = nPos ;
						if ( nCurpos == 0 )
							break ;

						int upleft = m_PrgPar.m_nHeight - ( nPos * m_PrgPar.m_nStep );
						RECT rect = { 0,
									  upleft , 
									  m_PrgPar.m_nWidth, 
									  m_PrgPar.m_nHeight } ;

						ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
																m_PrgPar.m_strProgressID, 
																EXIGENCE_IMMEDIATE ) ;
						if ( ShowAni != NULL )
							ShowAni->ShowEx ( 0,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nWidth,
											  m_PrgPar.m_nHeight - upleft,
											  ucAlpha) ;
					}
					else 
					{
						int upleft = m_PrgPar.m_nHeight - ( nPos * m_PrgPar.m_nStep ); 
						RECT rect = { 0,
									  upleft , 
									  m_PrgPar.m_nWidth, 
									  m_PrgPar.m_nHeight } ;

						ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
																m_PrgPar.m_strProgressID, 
																EXIGENCE_IMMEDIATE ) ;
						if ( ShowAni != NULL )
						{
							ShowAni->ShowEx ( 0,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nWidth,
											  nPos * m_PrgPar.m_nStep ,
											  99);
							nCurpos += m_PrgPar.m_fAddStep / m_PrgPar.m_nStep + 0.5f;
							upleft = m_PrgPar.m_nHeight - ( nCurpos * m_PrgPar.m_nStep );
							rect.top = upleft ;
							ShowAni->ShowEx ( 0,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nWidth,
											  ( int ) ( nCurpos * m_PrgPar.m_nStep + 0.5f ) ,
											  ucAlpha);
						}
					}
				}
				break ;
			case 1:
				{
					if ( nPos <= nCurpos )
					{
						if ( nPos == 0 )
							break ;

						int upleft = m_PrgPar.m_nHeight - ( nPos * m_PrgPar.m_nStep ); 
						RECT rect = { 0,
									  upleft , 
									  m_PrgPar.m_nHWidth, 
									  m_PrgPar.m_nHeight } ;

						ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
																m_PrgPar.m_strProgressID, 
																EXIGENCE_IMMEDIATE ) ;
						if ( ShowAni != NULL )
							ShowAni->ShowEx ( 2,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nHWidth,
											  m_PrgPar.m_nHeight - upleft ,
											  ucAlpha);
					}
					else
					{
						int upleft = m_PrgPar.m_nHeight - ( nPos * m_PrgPar.m_nStep ); 
						RECT rect = { 0,
									  upleft , 
									  m_PrgPar.m_nHWidth, 
									  m_PrgPar.m_nHeight } ;

						ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
																m_PrgPar.m_strProgressID, 
																EXIGENCE_IMMEDIATE ) ;
						if ( ShowAni != NULL )
						{
/*							ShowAni->ShowEx ( 3,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nHWidth,
											  nPos * m_PrgPar.m_nStep );*/
							upleft = m_PrgPar.m_nHeight - ( nCurpos * m_PrgPar.m_nStep );
							rect.top = upleft ;
							ShowAni->ShowEx ( 2,
											  m_PrgPar.m_IntPoint.x + x,
											  m_PrgPar.m_IntPoint.y + y + upleft,
											  &rect,
											  m_PrgPar.m_nHWidth,
											  ( int ) ( nCurpos * m_PrgPar.m_nStep + 0.5f ) ,
											  ucAlpha);
						}
					}
				}
				break ;
			case 2:
				{
					ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
															m_PrgPar.m_strProgressID, 
															EXIGENCE_IMMEDIATE ) ;

					if ( ShowAni != NULL )
						ShowAni->Show ( 2,
										m_PrgPar.m_IntPoint.x + x,
										m_PrgPar.m_IntPoint.y + y ,
										ucAlpha) ;
				}
			}
		}
		break ;
	case MY_PROGRESS_HLEFT:
		{
			if ( nPos > 0 )
			{
				CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
															  m_PrgPar.m_strProgressID, 
															  EXIGENCE_IMMEDIATE ) ;
				if ( ShowAni )
				{
					int left = ( float )nPos * m_PrgPar.m_nStep ; 
					left = ( left == 0 ) ? 1 : left ;
					RECT rect = { 0,
								  0,
								  left,
								  m_PrgPar.m_nHeight } ;
					ShowAni->ShowEx ( 0,
					                  m_PrgPar.m_IntPoint.x + x,
									  m_PrgPar.m_IntPoint.y + y,
									  &rect,
									  left,
									  m_PrgPar.m_nHeight ) ;
				}
			}
			else if ( nPos < 0 )
			{
				int left = - ( float )nPos * m_PrgPar.m_nStep ; 
				CMyBitmap::ShowBlock ( m_PrgPar.m_IntPoint.x + x,
									   m_PrgPar.m_IntPoint.y + y,
									   m_PrgPar.m_IntPoint.x + x + left,
									   m_PrgPar.m_IntPoint.y + y + m_PrgPar.m_nHeight,
									   0xffff0000) ;
			}
			
		}
		break ;
	case MY_PROGRESS_HRIGHT:
		{
			if ( nPos > 0 )
			{
				CAni* ShowAni = g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
															  m_PrgPar.m_strProgressID, 
															  EXIGENCE_IMMEDIATE ) ;
				if ( ShowAni )
				{
					int left = ( float )nPos * m_PrgPar.m_nStep ;
					int nNum = left / MY_PROGRESS_BLOCK ;
					int nLeft = left % MY_PROGRESS_BLOCK ; 
					RECT rect = { 0,
								  0,
								  nLeft,
								  m_PrgPar.m_nHeight } ;
					if ( nLeft != 0 )
					{
						ShowAni->ShowEx( 0,
										 m_PrgPar.m_IntPoint.x + x + nNum * MY_PROGRESS_BLOCK,
										 m_PrgPar.m_IntPoint.y + y,
										 &rect,
										 nLeft,
										 m_PrgPar.m_nHeight ) ;
					}
					for ( int i = 0; i < nNum; i++ )
					{
						ShowAni->Show( 0,
									   m_PrgPar.m_IntPoint.x + x + i * MY_PROGRESS_BLOCK,
									   m_PrgPar.m_IntPoint.y + y ) ;
					}
				}
			}
		}
		break ;
	}
	if ( m_PrgPar.m_bBorder )
		g_objGameDataSet.GetDataAni ( ( char * ) g_strControlAni,
									  m_PrgPar.m_strProgressID, 
									  EXIGENCE_NORMAL )->Show ( 1,
																m_PrgPar.m_IntPoint.x + x - m_PrgPar.m_BorderOffset.x,
																m_PrgPar.m_IntPoint.y + y - m_PrgPar.m_BorderOffset.y,
																ucAlpha) ;
}

BOOL CMyProgress::Init(int xPos, int yPos, char *ProgressID, int nLower, int nUpper, BYTE btType, BOOL bBorder, CPoint BorderPnt )
{
	CRect rect ;	
	CMyProgress::GetWindowRect ( rect ) ;
	m_PrgPar.m_IntPoint.x = rect.left - xPos ;
	m_PrgPar.m_IntPoint.y = rect.top - yPos ;

	CMyProgress::SetRange ( nLower, nUpper ) ;

	if ( bBorder ) 
	{
		m_PrgPar.m_bBorder = true ;
		m_PrgPar.m_BorderOffset = BorderPnt ;
	}
	
	m_PrgPar.m_btType = btType ;
	switch ( btType )
	{
	case MY_PROGRESS_V:
		strcpy ( m_PrgPar.m_strProgressID, ProgressID ) ;
		break ;
	case MY_PROGRESS_HLEFT:
		strcpy ( m_PrgPar.m_strProgressID, ProgressID ) ;
		m_PrgPar.m_nWidth = rect.right - rect.left ;
		m_PrgPar.m_nHeight = rect.bottom - rect.top;
		m_PrgPar.m_nStep = ( float )m_PrgPar.m_nWidth / ( nUpper - nLower ) ;
		break ;
	case MY_PROGRESS_HRIGHT:
		strcpy ( m_PrgPar.m_strProgressID, ProgressID ) ;
		m_PrgPar.m_nWidth = rect.right - rect.left ;
		m_PrgPar.m_nHeight = rect.bottom - rect.top;
		m_PrgPar.m_nStep = ( float )m_PrgPar.m_nWidth / ( nUpper - nLower ) ;
		break ;
	}
	return true ;
}

void CMyProgress::ResetValue(  int nLower, int nUpper )
{
	CRect rect ;	
	CMyProgress::GetWindowRect ( rect ) ;
	CMyProgress::SetRange ( nLower, nUpper ) ;

	switch ( m_PrgPar.m_btType )
	{
	case MY_PROGRESS_V:
		m_PrgPar.m_nStep = 0 ;
		if ( ( nUpper - nLower ) != 0 )
		{
			if ( ( nUpper - nLower ) < 100 )
				m_PrgPar.m_fAddStep = ( float ) m_PrgPar.m_nHeight / ( nUpper - nLower ) ;
			else
				m_PrgPar.m_fAddStep = ( float ) m_PrgPar.m_nHeight / 100.0f ;
			m_PrgPar.m_nStep = ( float )m_PrgPar.m_nHeight / ( nUpper - nLower ) ;
		}
		break ;
	case MY_PROGRESS_HLEFT:
		m_PrgPar.m_nStep = 0 ;
		if ( nUpper - nLower != 0 )
			m_PrgPar.m_nStep = ( float )m_PrgPar.m_nWidth / ( nUpper - nLower ) ;
		break ;
	case MY_PROGRESS_HRIGHT:
		m_PrgPar.m_nStep = 0 ;
		if ( nUpper - nLower != 0 )
			m_PrgPar.m_nStep = ( float )m_PrgPar.m_nWidth / ( nUpper - nLower ) ;
		break ;
	}
}


void CMyProgress::SetRange(int nUpper, int nLower)
{
	m_PrgPar.m_nUpper = nUpper ;
	m_PrgPar.m_nLower = nLower ;
}

void CMyProgress::GetRange(int &nUpper, int &nLower)
{
	nUpper = m_PrgPar.m_nUpper ;
	nLower = m_PrgPar.m_nLower ;
}

void CMyProgress::SetShowMode(BYTE btShowMode)
{
	m_PrgPar.m_btShowMode = btShowMode ;
}

void CMyProgress::SetWidthAndHeight(int nWidth, int nHeight, int nHWidth)
{
	m_PrgPar.m_nWidth = nWidth ;
	m_PrgPar.m_nHeight = nHeight ;
	m_PrgPar.m_nHWidth = nHWidth ;
}

char* CMyProgress::GetProgressID()
{
	return m_PrgPar.m_strProgressID;
}

void CMyProgress::SetProgressID(char *ProgressID)
{
	if (ProgressID && strlen(ProgressID)>0)
	{
		strcpy(m_PrgPar.m_strProgressID,ProgressID);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -