📄 gamecard.cpp
字号:
#include "Stdafx.h"
#include "Resource.h"
#include "GameCard.h"
#include "ClientGameDlg.h"
BEGIN_MESSAGE_MAP(CUpGradeGameCard, CWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_SETCURSOR()
ON_WM_RBUTTONUP()
ON_WM_LBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
//构造函数]
CUpGradeGameCard::CUpGradeGameCard()
{
//AfxSetResourceHandle(GetModuleHandle(CLIENT_DLL_NAME));
m_bCardCount=0;
m_iCardUpSpace=19;
m_pHandleWnd=NULL;
m_bHorzLook=true;
m_bShowCard=false;
m_bUseMouse=false;
m_bHotHitCard=255;
m_PtBasePoint.SetPoint(0,0);
m_XShowMode=XShowMode::SWX_MODE_CENTER;
m_YShowMode=YShowMode::SWY_MODE_CENTER;
////AfxSetResourceHandle(GetModuleHandle(NULL));
m_MoveFlag = false;
m_BeginPoint.x = 0;
m_BeginPoint.y = 0;
m_EndPoint.x = 0;
m_EndPoint.y = 0;
m_lastPoint.x = 0;
m_lastPoint.y = 0;
}
//析构函数
CUpGradeGameCard::~CUpGradeGameCard()
{
}
//删除升起的扑克
void CUpGradeGameCard::RemoveCard(BYTE bCardList[], int count)
{
for (int ii=0;ii<count;ii++)
{
for (BYTE i=0;i<m_bCardCount;i++)
{
if (m_CardArray.GetAt(i)==bCardList[ii])
{
m_bCardCount--;
m_CardArray.RemoveAt(i);
//m_CardUpArray.RemoveAt(i);
//i--;
}
}
}
FixCardControl();
}
//图片加载将转移到此函数
bool CUpGradeGameCard::Create(LPCSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext,bool bBigImage)
{
if (GetSystemMetrics(SM_CXSCREEN)<800)bBigImage=false;
if(bBigImage==false)
{//小图
m_iCardHSpace=14;//11;//横扑克间隔
m_iCardVSpace=13;//竖扑克间隔
m_iCardHight=73;
m_iCardWidth=54;
m_CardPic[0].SetLoadInfo("pic\\card2.gif",CGameImageLink::m_bAutoLock);
m_CardPic[1].SetLoadInfo("pic\\card3.gif",CGameImageLink::m_bAutoLock);
}
else
{//0大图
m_iCardHSpace=15;//13;横扑克间隔
m_iCardVSpace=16;//竖扑克间隔
m_iCardHight=95;
m_iCardWidth=70;
//m_CardPic[0].SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),删除IDB_GAME_CARD,CGameImageLink::m_bAutoLock);
//m_CardPic[1].SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),删除IDB_CARD_BACK,CGameImageLink::m_bAutoLock);
m_CardPic[0].SetLoadInfo("pic\\card.gif" ,CGameImageLink::m_bAutoLock);
m_CardPic[1].SetLoadInfo("pic\\card1.gif",CGameImageLink::m_bAutoLock);
}
//TML_NUM.SetLoadInfo("pic\\num.gif",CGameImageLink::m_bAutoLock);
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext)==TRUE ;
}
//初始化函数
bool CUpGradeGameCard::InitGameCard(CWnd * pHandleWnd)
{
m_pHandleWnd=pHandleWnd;
return true;
}
//设置扑克参数
//void CUpGradeGameCard::SetCardParameter(int iHSpace, int iVSpace, int iUpSpace)
//{
// m_iCardHSpace=iHSpace;
// m_iCardVSpace=iVSpace;
// m_iCardUpSpace=iUpSpace;
// FixCardControl();
// return;
//}
//获取大小函数
bool CUpGradeGameCard::GetCardSize(CSize & Size)
{
if (m_bCardCount>0)
{
if (m_bHorzLook==true)
{
Size.cx=m_iCardWidth+(m_bCardCount-1)*m_iCardHSpace;
Size.cy=m_iCardHight+m_iCardUpSpace;
}
else
{
Size.cx=m_iCardWidth;
Size.cy=m_iCardHight+(m_bCardCount-1)*m_iCardVSpace;
}
}
else
{
Size.cx=0;
Size.cy=0;
}
return true;
}
//设置基准点函数
void CUpGradeGameCard::SetBasePoint(CPoint & BasePoint, XShowMode XShowMode, YShowMode YShowMode)
{
m_XShowMode=XShowMode;
m_YShowMode=YShowMode;
m_PtBasePoint=BasePoint;
FixCardControl();
return;
}
//设置显示扑克
void CUpGradeGameCard::SetShowCard(bool bShow)
{
m_bShowCard=bShow;
Invalidate(FALSE);
return;
}
//设置使用鼠标
void CUpGradeGameCard::SetUseMouse(bool bUserMouse)
{
m_bUseMouse=bUserMouse;
return;
}
//设置显示方式
void CUpGradeGameCard::SetLookMode(bool bHorzLook)
{
m_bHorzLook=bHorzLook;
return;
}
//设置扑克
bool CUpGradeGameCard::SetCard(BYTE bCardList[], BYTE bUpList[], BYTE bCardCount)
{
if (bCardCount>m_CardArray.GetSize()) m_CardArray.SetSize(bCardCount);
if (bCardCount>m_CardUpArray.GetSize()) m_CardUpArray.SetSize(bCardCount);
if (bCardList!=NULL) CopyMemory(m_CardArray.GetData(),bCardList,sizeof(BYTE)*bCardCount);
if (bUpList!=NULL) CopyMemory(m_CardUpArray.GetData(),bUpList,sizeof(BYTE)*bCardCount);
else memset(m_CardUpArray.GetData(),0,sizeof(BYTE)*bCardCount);
m_bCardCount=bCardCount;
FixCardControl();
return true;
}
//获取升起的扑克
BYTE CUpGradeGameCard::GetUpCard(BYTE bCardList[])
{
BYTE bUpCount=0;
for (BYTE i=0;i<m_bCardCount;i++)
{
if (m_CardUpArray.GetAt(i)==TRUE)
{
if (bCardList!=NULL) bCardList[bUpCount]=m_CardArray.GetAt(i);
bUpCount++;
}
}
return bUpCount;
}
//获取扑克信息
BYTE CUpGradeGameCard::GetCard(BYTE bCardList[], BYTE bUpList[])
{
if (bCardList!=NULL) CopyMemory(bCardList,m_CardArray.GetData(),m_bCardCount*sizeof(BYTE));
if (bUpList!=NULL) CopyMemory(bUpList,m_CardUpArray.GetData(),m_bCardCount*sizeof(BYTE));
return m_bCardCount;
}
//按键测试
BYTE CUpGradeGameCard::HitCardTest(CPoint & Point)
{
if (m_bHorzLook==true)
{
//寻找按键扑克
BYTE bCardIndex=(BYTE)(Point.x/m_iCardHSpace);
if (bCardIndex>=m_bCardCount) bCardIndex=m_bCardCount-1;
//判断按键位置
bool bHitThisCard=true;
BYTE bCardUp=m_CardUpArray.GetAt(bCardIndex);
if ((bCardUp==TRUE)&&(Point.y>m_iCardHight)) bHitThisCard=false;
if ((bCardUp==FALSE)&&(Point.y<m_iCardUpSpace)) bHitThisCard=false;
//寻找前面的张扑克
if (bHitThisCard==false)
{
BYTE bFindCount=m_iCardWidth/m_iCardHSpace+1;
for (BYTE i=1;i<bFindCount;i++)
{
if (bCardIndex==0) break;
bCardUp=m_CardUpArray.GetAt(bCardIndex-i);
if ((bCardUp==FALSE)&&(Point.y>m_iCardWidth)) return bCardIndex-i;
if ((bCardUp==TRUE)&&(Point.y<20)) return bCardIndex-i;
}
return 255;
}
return bCardIndex;
}
return 255;
}
//删除升起的扑克
BYTE CUpGradeGameCard::RemoveUpCard()
{
for (BYTE i=0;i<m_bCardCount;i++)
{
if (m_CardUpArray.GetAt(i)==TRUE)
{
m_bCardCount--;
m_CardArray.RemoveAt(i);
m_CardUpArray.RemoveAt(i);
i--;
}
}
FixCardControl();
return m_bCardCount;
}
//调整窗口位置
void CUpGradeGameCard::FixCardControl()
{
int PaintCount=m_bCardCount;
if (!m_bHorzLook&&!m_bShowCard)
if(m_bCardCount>4)m_bCardCount=4;
//获取位置
CSize Size;
GetCardSize(Size);
//调整位置
CRect CardRect;
switch (m_XShowMode)
{
case SWX_MODE_LEFT: { CardRect.left=m_PtBasePoint.x; break; }
case SWX_MODE_CENTER: { CardRect.left=m_PtBasePoint.x-Size.cx/2; break; }
case SWX_MODE_RIGHT: { CardRect.left=m_PtBasePoint.x-Size.cx; break; }
}
switch (m_YShowMode)
{
case SWY_MODE_TOP: { CardRect.top=m_PtBasePoint.y; break; }
case SWY_MODE_CENTER: { CardRect.top=m_PtBasePoint.y-Size.cy/2; break; }
case SWY_MODE_BOTTOM: { CardRect.top=m_PtBasePoint.y-Size.cy; break; }
}
//移动位置
CardRect.right=CardRect.left+Size.cx;
CardRect.bottom=CardRect.top+Size.cy;
MoveWindow(&CardRect);
Invalidate(FALSE);
//设置区域
CRgn AllRgn,SignedRgn;
AllRgn.CreateRectRgn(0,0,0,0);
for (BYTE i=0;i<m_bCardCount;i++)
{
if (m_bHorzLook==true)
{
BYTE bUpCard=m_CardUpArray.GetAt(i);
SignedRgn.CreateRoundRectRgn(i*m_iCardHSpace,(bUpCard==TRUE)?0:m_iCardUpSpace,
i*m_iCardHSpace+m_iCardWidth+1,(bUpCard==TRUE)?m_iCardHight+1:m_iCardUpSpace+m_iCardHight+1,2,2);
AllRgn.CombineRgn(&AllRgn,&SignedRgn,RGN_OR);
SignedRgn.DeleteObject();
}
else
{
SignedRgn.CreateRoundRectRgn(0,i*m_iCardVSpace,m_iCardWidth+1,i*m_iCardVSpace+m_iCardHight+1,2,2);
AllRgn.CombineRgn(&AllRgn,&SignedRgn,RGN_OR);
SignedRgn.DeleteObject();
}
}
//设置区域
SetWindowRgn(AllRgn,TRUE);
m_CardViewRgn.DeleteObject();
m_CardViewRgn.Attach(AllRgn.Detach());
m_bCardCount=PaintCount;
return;
}
//建立消息
int CUpGradeGameCard::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct)==-1) return -1;
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,NULL);
return 0;
}
//重画函数
void CUpGradeGameCard::OnPaint()
{
CPaintDC dc(this);
if (m_bCardCount==0) return;
int PaintCount=m_bCardCount;
if (!m_bHorzLook&&!m_bShowCard)
if(m_bCardCount>4)m_bCardCount=4;
//建立缓冲
CDC BufferDC;
CSize CardSize;
CBitmap BufferBmp;
GetCardSize(CardSize);
BufferDC.CreateCompatibleDC(&dc);
BufferBmp.CreateCompatibleBitmap(&dc,CardSize.cx,CardSize.cy);
CBitmap * pOldBmp=BufferDC.SelectObject(&BufferBmp);
//加载位图
// CAFCImageHandle CardHandle(&m_CardPic[0]);
CGameImageHelper CardHandle(&m_CardPic[0]);
CGameImageHelper BackHandle(&m_CardPic[1]);
//绘画扑克
int iXPos=0,iYPos=0;
CGameImageHelper * pActiveHandle=NULL;
//////////////////////////////////////////////////////////////////////////
for (BYTE i=0;i<m_bCardCount;i++)
{
BYTE bCard=m_CardArray.GetAt(i);
BYTE bUpCard=m_CardUpArray.GetAt(i);
if ((m_bShowCard==true)&&(m_CardArray.GetAt(i)!=0))
{
if ((bCard==0x4E)||(bCard==0x4F))
{
iYPos=0;
iXPos=(bCard-0x4D)*m_iCardWidth;
pActiveHandle=&BackHandle;
}
else
{
pActiveHandle=&CardHandle;
iXPos=GetCardXPos(bCard)*m_iCardWidth;
iYPos=GetCardYPos(bCard)*m_iCardHight;
}
}
else//反面
{
iYPos=0;
iXPos=0;
pActiveHandle=&BackHandle;
}
if (m_bHorzLook==true) pActiveHandle->BitBlt(BufferDC,i*m_iCardHSpace,bUpCard?0:m_iCardUpSpace,m_iCardWidth,m_iCardHight,iXPos,iYPos);//横牌
else {//竖牌
//if (m_bShowCard)//正面
// {
pActiveHandle->BitBlt(BufferDC,0,i*m_iCardVSpace,m_iCardWidth,m_iCardHight,iXPos,iYPos);
// }
// else{//反面
// pActiveHandle->BitBlt(BufferDC,0,i*5,m_iCardWidth,m_iCardHight,iXPos,iYPos);
// }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -