#include "StdAfx.h" #include "GameLogic.h" #include "ControlWnd.h" #include "CardControl.h" ////////////////////////////////////////////////////////////////////////// //按钮标识 #define IDC_CHIHU 100 //吃胡按钮 #define IDC_LISTEN 101 //听牌按钮 #define IDC_GIVEUP 102 //放弃按钮 //位置标识 #define ITEM_WIDTH 90 //子项宽度 #define ITEM_HEIGHT 55 //子项高度 #define CONTROL_WIDTH 173 //控制宽度 #define CONTROL_HEIGHT 41 //控制高度 ////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CControlWnd, CWnd) ON_WM_PAINT() ON_WM_CREATE() ON_WM_SETCURSOR() ON_WM_LBUTTONDOWN() ON_BN_CLICKED(IDC_CHIHU, OnChiHu) ON_BN_CLICKED(IDC_LISTEN, OnListen) ON_BN_CLICKED(IDC_GIVEUP, OnGiveUp) END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////// //构造函数 CControlWnd::CControlWnd() { //配置变量 m_cbActionMask=0; m_cbCenterCard=0; m_PointBenchmark.SetPoint(0,0); ZeroMemory(m_cbGangCard,sizeof(m_cbGangCard)); //状态变量 m_cbItemCount=0; m_cbCurrentItem=0xFF; //加载资源 HINSTANCE hInstance=AfxGetInstanceHandle(); m_ImageControlTop.LoadFromResource(hInstance, IDB_CONTROL_TOP); m_ImageControlMid.LoadFromResource(hInstance, IDB_CONTROL_MID); m_ImageControlButtom.LoadFromResource(hInstance, IDB_CONTROL_BOTTOM); m_ImageActionExplain.LoadFromResource(hInstance, IDB_ACTION_EXPLAIN); return; } //析构函数 CControlWnd::~CControlWnd() { } //基准位置 void CControlWnd::SetBenchmarkPos(int nXPos, int nYPos) { //位置变量 m_PointBenchmark.SetPoint(nXPos,nYPos); //调整控件 RectifyControl(); return; } //设置扑克 void CControlWnd::SetControlInfo(BYTE cbCenterCard, BYTE cbActionMask, tagGangCardResult & GangCardResult) { //设置变量 m_cbItemCount=0; m_cbCurrentItem=0xFF; m_cbActionMask=cbActionMask; m_cbCenterCard=cbCenterCard; //杠牌信息 ZeroMemory(m_cbGangCard,sizeof(m_cbGangCard)); for (BYTE i=0;i0) rcRect.top-=5; //移动窗口 MoveWindow(&rcRect); //调整按钮 CRect rcButton; m_btChiHu.GetWindowRect(&rcButton); int nYPos=rcRect.Height()-rcButton.Height()-9; m_btChiHu.SetWindowPos(NULL,rcRect.Width()-rcButton.Width()*3-14,nYPos,0,0,SWP_NOZORDER|SWP_NOSIZE); m_btListen.SetWindowPos(NULL,rcRect.Width()-rcButton.Width()*2-11,nYPos,0,0,SWP_NOZORDER|SWP_NOSIZE); m_btGiveUp.SetWindowPos(NULL,rcRect.Width()-rcButton.Width()-8,nYPos,0,0,SWP_NOZORDER|SWP_NOSIZE); return; } //吃胡按钮 void CControlWnd::OnChiHu() { CGameFrameView::GetInstance()->SendEngineMessage(IDM_CARD_OPERATE,WIK_CHI_HU,0); return; } //听牌按钮 void CControlWnd::OnListen() { CGameFrameView::GetInstance()->SendEngineMessage(IDM_LISTEN_CARD,0,0); return; } //放弃按钮 void CControlWnd::OnGiveUp() { CGameFrameView::GetInstance()->SendEngineMessage(IDM_CARD_OPERATE,WIK_NULL,0); return; } //重画函数 void CControlWnd::OnPaint() { CPaintDC dc(this); //获取位置 CRect rcClient; GetClientRect(&rcClient); //创建缓冲 CDC BufferDC; CBitmap BufferImage; BufferDC.CreateCompatibleDC(&dc); BufferImage.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height()); BufferDC.SelectObject(&BufferImage); //绘画背景 m_ImageControlTop.BitBlt(BufferDC,0,0); for (int nImageYPos=m_ImageControlTop.GetHeight();nImageYPosSendEngineMessage(IDM_CARD_OPERATE,cbItemKind[i],m_cbCenterCard); return; } } //杠牌子项 for (BYTE i=0;iSendEngineMessage(IDM_CARD_OPERATE,WIK_GANG,m_cbGangCard[i]); return; } } //错误断言 ASSERT(FALSE); } return; } //光标消息 BOOL CControlWnd::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage) { //位置测试 if (m_cbItemCount!=0) { //获取位置 CRect rcClient; CPoint MousePoint; GetClientRect(&rcClient); GetCursorPos(&MousePoint); ScreenToClient(&MousePoint); //计算索引 BYTE bCurrentItem=0xFF; CRect rcItem(5,5,rcClient.Width()-5,ITEM_HEIGHT*m_cbItemCount+5); if (rcItem.PtInRect(MousePoint)) bCurrentItem=(BYTE)((MousePoint.y-7)/ITEM_HEIGHT); //设置索引 if (m_cbCurrentItem!=bCurrentItem) { Invalidate(FALSE); m_cbCurrentItem=bCurrentItem; } //设置光标 if (m_cbCurrentItem!=0xFF) { SetCursor(LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CARD_CUR))); return TRUE; } } return __super::OnSetCursor(pWnd,nHitTest,uMessage); } //////////////////////////////////////////////////////////////////////////