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

📄 controlwnd.cpp

📁 网狐2008最新版本梭哈游戏代码!很难得到的
💻 CPP
字号:
#include "Stdafx.h"
#include "GameClient.h"
#include "ControlWnd.h"
#include "GameClientView.h"

//////////////////////////////////////////////////////////////////////////

//属性定义
#define INVALID_ITEM					0xFFFF							//无效索引

//按钮标识
#define IDC_MAX_SCORE					100								//最大按钮
#define IDC_LESS_SCORE					101								//最小按钮
#define IDC_SEND_SCORE					102								//放出按钮

//////////////////////////////////////////////////////////////////////////

BEGIN_MESSAGE_MAP(CControlWnd, CWnd)
	ON_WM_SIZE()
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_LBUTTONUP()
	ON_WM_RBUTTONUP()
	ON_WM_SETCURSOR()
	ON_BN_CLICKED(IDC_MAX_SCORE, OnBnClickedScoreMax)
	ON_BN_CLICKED(IDC_LESS_SCORE, OnBnClickedScoreLess)
END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////////////

//构造函数
CControlWnd::CControlWnd()
{
	//设置变量
	m_lScoreMax=0L;
	m_lScoreLess=0L;

	//状态变量
	m_wItemCount=0;
	m_lScoreCurrent=0L;
	m_wCurrentItem = INVALID_ITEM;

	//位置变量
	m_BenchmarkPos.SetPoint(0,0);

	//加载资源
	HINSTANCE hResInstance=AfxGetInstanceHandle();
	m_ImageControlL.SetLoadInfo(IDB_CONTROL_L,hResInstance);
	m_ImageControlM.SetLoadInfo(IDB_CONTROL_M,hResInstance);
	m_ImageControlR.SetLoadInfo(IDB_CONTROL_R,hResInstance);
	m_ImageArrow.SetLoadInfo(IDB_CONTROL_ARROW,hResInstance);
	m_ImageNumber.SetLoadInfo(IDB_CONTROL_NUMBER,hResInstance);
	m_ImageNumberDot.SetLoadInfo( IDB_CONTROL_NUMBER_DOT,hResInstance );

	//获取大小
	CImageHandle HandleControlL(&m_ImageControlL);
	CImageHandle HandleControlM(&m_ImageControlM);
	CImageHandle HandleControlR(&m_ImageControlR);
	m_SizeItem.SetSize(m_ImageControlM.GetWidth(),m_ImageControlM.GetHeight());
	m_SizeControl.SetSize(m_ImageControlL.GetWidth()+m_ImageControlR.GetWidth(),m_SizeItem.cy);

	//辅助尺寸
	m_ControlHead=m_ImageControlL.GetWidth();
	m_ControlTail=m_ImageControlR.GetWidth();

	return;
}

//析构函数
CControlWnd::~CControlWnd()
{
}

//设置位置
VOID CControlWnd::SetBenchmarkPos(INT nXPos, INT nYPos)
{
	//设置变量
	m_BenchmarkPos.SetPoint(nXPos,nYPos);

	//调整控件
	if (m_hWnd!=NULL)
	{
		//获取位置
		CRect rcClient;
		GetClientRect(&rcClient);

		//移动窗口
		SetWindowPos(NULL,nXPos-rcClient.Width(),nYPos-rcClient.Height(),0,0,SWP_NOSIZE|SWP_NOZORDER);
	}

	return;
}

//设置信息
VOID CControlWnd::SetScoreControl(LONG lScoreMax, LONG lScoreLess, LONG lScoreCurrent)
{
	//设置变量
	m_lScoreMax=lScoreMax;
	m_lScoreLess=lScoreLess;
	m_lScoreCurrent=lScoreCurrent;

	//状态变量
	m_wItemCount=0;
	m_lScoreCurrent=__min(m_lScoreMax,__max(m_lScoreCurrent,m_lScoreLess));
	m_wCurrentItem = INVALID_ITEM;

	//计算数目
	do
	{
		lScoreMax/=10L;
		m_wItemCount++;
	} while (lScoreMax>0L);

	//移动窗口
	INT nControlWidth=m_wItemCount*m_SizeItem.cx+m_SizeControl.cx;
	SetWindowPos(NULL,m_BenchmarkPos.x-nControlWidth,m_BenchmarkPos.y-m_SizeControl.cy,nControlWidth,m_SizeControl.cy,SWP_NOZORDER|SWP_SHOWWINDOW);

	//刷新界面
	Invalidate(FALSE);

	return;
}

//播放声音
VOID CControlWnd::PlayGoldSound()
{
	//播放声音
	return;
}

//转换索引
WORD CControlWnd::SwitchToIndex(CPoint MousePoint)
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//位置判断
	if ((MousePoint.x>m_ControlHead)&&(MousePoint.x<(rcClient.Width()-m_ControlTail))&&
		MousePoint.y>5&&MousePoint.y<rcClient.Height()-5)
	{
		//变量定义
		INT nXPos=MousePoint.x-m_ControlHead;

		//寻找索引
		return m_wItemCount-WORD(nXPos/m_SizeItem.cx)-1;
	}

	return INVALID_ITEM;
}

//最大按钮
VOID CControlWnd::OnBnClickedScoreMax()
{
	//设置判断
	if (m_lScoreCurrent!=m_lScoreMax)
	{
		//设置变量
		m_lScoreCurrent=m_lScoreMax;

		//播放声音
		PlayGoldSound();

		//更新界面
		Invalidate(FALSE);

		//发送消息
		AfxGetMainWnd()->PostMessage( IDM_ADD_SCORE_CONTROL,m_lScoreCurrent );
	}

	return;
}

//最小按钮
VOID CControlWnd::OnBnClickedScoreLess()
{
	//设置判断
	if (m_lScoreCurrent!=m_lScoreLess)
	{
		//设置变量
		m_lScoreCurrent=m_lScoreLess;

		//播放声音
		PlayGoldSound();

		//更新界面
		Invalidate(FALSE);

		//发送消息
		AfxGetMainWnd()->PostMessage( IDM_ADD_SCORE_CONTROL,m_lScoreCurrent );
	}

	return;
}

//重画函数
VOID CControlWnd::OnPaint()
{
	CPaintDC dc(this);

	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//加载资源
	CImageHandle HandleControlL(&m_ImageControlL);
	CImageHandle HandleControlM(&m_ImageControlM);
	CImageHandle HandleControlR(&m_ImageControlR);
	CImageHandle HandleArrow(&m_ImageArrow);

	//创建缓冲
	CDC BufferDC;
	CBitmap BufferImage;
	BufferDC.CreateCompatibleDC(&dc);
	BufferImage.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());

	//设置背景
	BufferDC.SetBkMode(TRANSPARENT);
	BufferDC.SelectObject(&BufferImage);

	//绘画背景
	m_ImageControlL.BitBlt(BufferDC,0,0);
	m_ImageControlR.BitBlt(BufferDC,rcClient.Width()-m_ImageControlR.GetWidth(),0);

	//加载资源
	CImageHandle HandleNumber(&m_ImageNumber);
	CImageHandle HandleNumDot(&m_ImageNumberDot);

	//变量定义
	LONG lScoreCurrent=m_lScoreCurrent;
	INT nNumberHeight=m_ImageNumber.GetHeight();
	INT nNumberWidht=m_ImageNumber.GetWidth()/10;
	INT nXItemPos=rcClient.Width()-m_ImageControlR.GetWidth();

	//绘画子项
	for (WORD i=0;i<m_wItemCount;i++)
	{
		//绘画背景
		nXItemPos-=m_SizeItem.cx;
		m_ImageControlM.BitBlt(BufferDC,nXItemPos,0);

		//绘画号码
		LONG lNumber=(LONG)(lScoreCurrent%10L);
		m_ImageNumber.BitBlt(BufferDC.m_hDC,nXItemPos,12,nNumberWidht,nNumberHeight,lNumber*nNumberWidht,0);

		//绘画逗号
		if( i != 0 && i%3 == 0 )
			m_ImageNumberDot.AlphaDrawImage( &BufferDC,nXItemPos+m_SizeItem.cx-4,4,RGB(255,0,255) );

		//当前焦点
		if( m_wCurrentItem == i )
			m_ImageArrow.AlphaDrawImage(&BufferDC,nXItemPos+6,4,RGB(255,0,255));

		//设置变量
		lScoreCurrent/=10L;
	}

	//绘画界面
	dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&BufferDC,0,0,SRCCOPY);

	//清理资源
	BufferDC.DeleteDC();
	BufferImage.DeleteObject();

	return;
}

//位置消息
VOID CControlWnd::OnSize(UINT nType, INT cx, INT cy)
{
	__super::OnSize(nType, cx, cy);

	//移动控件
	HDWP hDwp=BeginDeferWindowPos(32);
	const UINT uFlags=SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS|SWP_NOSIZE;

	//调整控件
	DeferWindowPos(hDwp,m_btMaxScore,NULL,cx-28,4,0,0,uFlags);
	DeferWindowPos(hDwp,m_btLessScore,NULL,cx-28,26,0,0,uFlags);

	//结束移动
	EndDeferWindowPos(hDwp);

	return;
}

//建立消息
INT CControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (__super::OnCreate(lpCreateStruct)==-1) return -1;

	//创建按钮
	CRect rcCreate(0,0,0,0);
	m_btMaxScore.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_MAX_SCORE);
	m_btLessScore.Create(NULL,WS_CHILD|WS_VISIBLE,rcCreate,this,IDC_LESS_SCORE);

	//设置按钮
	HINSTANCE hResInstance=AfxGetInstanceHandle();
	m_btMaxScore.SetButtonImage(IDB_BT_CONTROL_MAX,hResInstance,false);
	m_btLessScore.SetButtonImage(IDB_BT_CONTROL_LESS,hResInstance,false);

	return 0;
}

//鼠标消息
VOID CControlWnd::OnLButtonUp(UINT nFlags, CPoint Point)
{
	__super::OnLButtonUp(nFlags, Point);

	//获取索引
	WORD wItemIndex=SwitchToIndex(Point);

	//设置变量
	if (wItemIndex!=INVALID_ITEM)
	{
		//计算增量
		LONG lIncrease=1L;
		for (WORD i=0;i<wItemIndex;i++) lIncrease*=10;

		//调整变量
		LONG lScoreCurrent=m_lScoreCurrent+lIncrease;
		lScoreCurrent=__min(m_lScoreMax,__max(lScoreCurrent,m_lScoreLess));

		//设置控件
		if (lScoreCurrent!=m_lScoreCurrent)
		{
			//设置变量
			m_lScoreCurrent=lScoreCurrent;

			//播放声音
			PlayGoldSound();

			//更新界面
			Invalidate(FALSE);

			//发送消息
			AfxGetMainWnd()->PostMessage( IDM_ADD_SCORE_CONTROL,m_lScoreCurrent );
		}

		return;
	}

	return;
}

//鼠标消息
VOID CControlWnd::OnRButtonUp(UINT nFlags, CPoint Point)
{
	__super::OnRButtonUp(nFlags, Point);

	//获取索引
	WORD wItemIndex=SwitchToIndex(Point);

	//设置变量
	if (wItemIndex!=INVALID_ITEM)
	{
		//计算增量
		LONG lDecrease=1L;
		for (WORD i=0;i<wItemIndex;i++) lDecrease*=10;

		//调整变量
		LONG lScoreCurrent=m_lScoreCurrent-lDecrease;
		lScoreCurrent=__min(m_lScoreMax,__max(lScoreCurrent,m_lScoreLess));

		//设置控件
		if (lScoreCurrent!=m_lScoreCurrent)
		{
			//设置变量
			m_lScoreCurrent=lScoreCurrent;

			//播放声音
			PlayGoldSound();

			//更新界面
			Invalidate(FALSE);

			//发送消息
			AfxGetMainWnd()->PostMessage( IDM_ADD_SCORE_CONTROL,m_lScoreCurrent );
		}

		return;
	}

	return;
}

//光标消息
BOOL CControlWnd::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage)
{
	//获取光标
	CPoint MousePoint;
	GetCursorPos(&MousePoint);
	ScreenToClient(&MousePoint);

	//转换索引
	WORD wPreItem = m_wCurrentItem;
	m_wCurrentItem=SwitchToIndex(MousePoint);

	if( wPreItem != m_wCurrentItem )
	{
		CRect rc;
		GetClientRect( &rc );
		rc.DeflateRect( m_ControlHead,0,m_ControlTail,0 );
		InvalidateRect( &rc,FALSE );
	}

	//设置光标
	if (m_wCurrentItem!=INVALID_ITEM)
	{
		SetCursor(LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CARD_CUR)));
		return TRUE;
	}

	return __super::OnSetCursor(pWnd, nHitTest, uMessage);
}

//////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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