📄 clientview.cpp
字号:
#include "StdAfx.h"
#include "ClientView.h"
#include "ClientGameDlg.h"
//宏定义
#define BT_WIDTH 32 //按钮宽度
#define BT_HEIGHT 32 //按钮高度
//CBitmap CClientPlayView::m_Back_Center;
CBitmap CClientPlayView::m_Bitmap_Num;
//BITMAP CClientPlayView::m_Back_Center_Info;
BEGIN_MESSAGE_MAP(CClientPlayView, CUsingSkinClass)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_BEGIN,OnHitBegin)
ON_BN_CLICKED(IDC_GIVE_BACK,OnHitBackCard)
ON_BN_CLICKED(IDC_OUT_CARD,OnHitOutCard)
ON_BN_CLICKED(IDC_CONTINUE, OnHitContinue)
ON_BN_CLICKED(IDC_LAST_CARD, OnHitLastTurn)
ON_BN_CLICKED(IDC_BACK_CARD, OnHitLookBack)
ON_BN_CLICKED(IDC_HAVE_THING, OnHitThing)
ON_BN_CLICKED(IDC_STOP, OnHitStop)
ON_BN_CLICKED(IDC_PASS,OnHitPass)
END_MESSAGE_MAP()
/*******************************************************************************************************/
//构造函数
CClientPlayView::CClientPlayView(void) :m_GameSet(this),m_GameInfo(this)//,m_GameEndView(this)
{
AfxSetResourceHandle(GetModuleHandle(CLIENT_DLL_NAME));
// if(g_ShowPicture)
m_PicGameView.SetLoadInfo("tml\\bg3.jpg",CGameImageLink::m_bAutoLock);
m_PicGameViewLogo.SetLoadInfo("tml\\bgBQ.jpg",CGameImageLink::m_bAutoLock);
//m_PicTopBar.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_TOP_BAR,CGameImageLink::m_bAutoLock);
m_PicTopBar.SetLoadInfo("tml\\GmTop2.jpg",CGameImageLink::m_bAutoLock); //顶端贴图
m_PicTopBarLeft.SetLoadInfo("tml\\GmTopBQ.jpg",CGameImageLink::m_bAutoLock); //顶端贴图
//m_PicTopBarRight.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_TOP_BAR_RIGHT,CGameImageLink::m_bAutoLock);
m_PicTopBarRight.SetLoadInfo("tml\\GmTop3.jpg",CGameImageLink::m_bAutoLock); //顶端贴图
// m_PicBottomBar.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR,CGameImageLink::m_bAutoLock);
// m_PicBottomBarLeft.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR_LEFT,CGameImageLink::m_bAutoLock);
// m_PicBottomBarRight.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BOTTOM_BAR_RIGHT,CGameImageLink::m_bAutoLock);
// else
// m_PicGameView.SetLoadInfo(GetModuleHandle(CLIENT_DLL_NAME),IDB_BACK,CGameImageLink::m_bAutoLock);
m_iGamePoint=0;
m_bMeSide=-1;
m_iHuaKind=0;
m_iShowStation=-1;
m_iNtStation=-1;
m_NT.LoadBitmap(IDB_NT);
m_NTLogo.LoadBitmap(IDB_NTLOGO);
// m_Back_Center.LoadBitmap(IDB_BACK_CENTER);
// m_Back_Center.GetBitmap(&m_Back_Center_Info);
m_Bitmap_Num.LoadBitmap(IDB_BITMAP_NUM);
AfxSetResourceHandle(GetModuleHandle(NULL));
return;
}
//析构函数
CClientPlayView::~CClientPlayView(void)
{
}
//更新用户资料
void CClientPlayView::UpdateUserInfo(BYTE bViewStation)
{
UpdateViewFace(NULL);
return;
}
//绘画界面函数
void CClientPlayView::DrawViewFace(CDC * pDC, int iWidth, int iHeight)
{
//绘画界面
pDC->FillSolidRect(0,0,BT_WIDTH,BT_HEIGHT,RGB(0,0,0));
// if(g_ShowPicture)
// DrawBackPic(pDC,DrawMode::DM_CENTENT,iWidth,iHeight);
// else
// {
DrawBackPic(pDC,DrawMode::DM_SPREAD,iWidth,iHeight);
CGameImageHelper LogoHandle(&m_PicGameViewLogo);
LogoHandle.BitBlt(pDC->GetSafeHdc(),(iWidth-LogoHandle.GetWidth())/2,(iHeight-LogoHandle.GetHeight())/2);
// if (GetSystemMetrics(SM_CXSCREEN)>=1024)
// {
// CDC Back_CenterDC;
// Back_CenterDC.CreateCompatibleDC(pDC);
// Back_CenterDC.SelectObject(&m_Back_Center);
// // pDC->BitBlt((iWidth-m_Back_Center_Info.bmWidth)/2,(iHeight-m_Back_Center_Info.bmHeight)/3,
// // m_Back_Center_Info.bmWidth,m_Back_Center_Info.bmHeight,&Back_CenterDC,0,0,SRCCOPY);
// TransparentBlt2(pDC->GetSafeHdc(),(iWidth-m_Back_Center_Info.bmWidth)/2,(iHeight-m_Back_Center_Info.bmHeight)/3,
// m_Back_Center_Info.bmWidth,m_Back_Center_Info.bmHeight,Back_CenterDC.GetSafeHdc(),
// 0,0,m_Back_Center_Info.bmWidth,m_Back_Center_Info.bmHeight,RGB(255,0,255));
// }
// }
CDC NumDC;
NumDC.CreateCompatibleDC(pDC);
NumDC.SelectObject(&m_Bitmap_Num);
//绘画用户
pDC->SetTextColor(RGB(0,0,0));
for (int i=0;i<4;i++)
{
if (m_pUserItem[i]!=NULL)
{
UserInfoStruct * pUserInfo=&m_pUserItem[i]->GameUserInfo;
if (i==1) pDC->SetTextAlign(TA_RIGHT|TA_TOP);
else pDC->SetTextAlign(TA_LEFT|TA_TOP);
pDC->TextOut(m_PtName[i].x,m_PtName[i].y,pUserInfo->szName);
DrawLogo(pDC,m_pUserItem[i]->GameUserInfo.bLogoID,m_PtLogo[i].x,m_PtLogo[i].y,pUserInfo->bUserState==USER_CUT_GAME);
if (m_uTime[i]!=0) DrawTimer(pDC,m_PtTime[i].x,m_PtTime[i].y,m_uTime[i]);
if (pUserInfo->bUserState==USER_ARGEE) DrawArgeeFlag(pDC,m_PtAgree[i].x,m_PtAgree[i].y);
//画打到几了
if (m_iNtStation!=-1)
{
//if(i%2==0)
///pDC->BitBlt(m_PtNtLogo[i].x+27,m_PtNtLogo[i].y-3,25,23,&NumDC,25*abs((m_StationView.m_iMeStation-2)),0,SRCCOPY);
//else
//pDC->BitBlt(m_PtNt[i].x+27,m_PtNt[i].y,25,23,&NumDC,25*abs((m_StationView.m_iOtherStation-2)),0,SRCCOPY);
}
}
}
//绘画分数
if (m_bMeSide!=-1)
{
TCHAR szBuffer[20];
sprintf(szBuffer,TEXT("%s得分:%d"),m_bMeSide?TEXT("本方"):TEXT("敌家"),m_iGamePoint);
pDC->SetTextAlign(TA_LEFT|TA_TOP);
pDC->TextOut(iWidth-170-VIEW_FRAME_RIGHT,iHeight-110-20,szBuffer,lstrlen(szBuffer));
}
//绘画庄家位置
if (m_iNtStation!=-1)
{
DrawNt(pDC,m_PtNt[m_iNtStation].x,m_PtNt[m_iNtStation].y);
}
//绘画报主位置
if (m_iShowStation!=-1)
{
///DrawNtLogo(pDC,m_PtNtLogo[m_iShowStation].x,m_PtNtLogo[m_iShowStation].y,m_iHuaKind);
}
DrawInfo(pDC);
//画框
CGameImageHelper TopBarHandle(&m_PicTopBar);
for(int i = 0; i < iWidth; i+=TopBarHandle.GetWidth())
{
TopBarHandle.BitBlt(pDC->GetSafeHdc(),i,0);
}
CGameImageHelper TopBarLeftHandle(&m_PicTopBarLeft);
TopBarLeftHandle.BitBlt(pDC->GetSafeHdc(),0,0);
CGameImageHelper TopBarRightHandle(&m_PicTopBarRight);
TopBarRightHandle.BitBlt(pDC->GetSafeHdc(),iWidth - TopBarRightHandle.GetWidth(),0);
/* CGameImageHelper BottomBarHandle(&m_PicBottomBar);
for(int i = 0; i < iWidth; i+=BottomBarHandle.GetWidth())
{
BottomBarHandle.BitBlt(pDC->GetSafeHdc(),i,iHeight - BottomBarHandle.GetHeight());
}
CGameImageHelper BottomBarLeftHandle(&m_PicBottomBarLeft);
BottomBarLeftHandle.BitBlt(pDC->GetSafeHdc(),0,iHeight - BottomBarHandle.GetHeight());
CGameImageHelper BottomBarRightHandle(&m_PicBottomBarRight);
BottomBarRightHandle.BitBlt(pDC->GetSafeHdc(),iWidth - BottomBarRightHandle.GetWidth(),iHeight - BottomBarHandle.GetHeight());
*/
return;
}
void CClientPlayView::TransparentBlt2( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
)
{
HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
// 将源DC中的位图拷贝到临时DC中
// if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
// else
// StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
// hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
// 设置透明色
SetBkColor(hImageDC, crTransparent);
// 生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
// 生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// 透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// "或"运算,生成最终效果
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
// 清理、恢复
SelectObject(hImageDC, hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC, hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}
//建立消息
int CClientPlayView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CUsingSkinClass::OnCreate(lpCreateStruct) == -1) return -1;
//建立控件
AfxSetResourceHandle(GetModuleHandle(CLIENT_DLL_NAME));
m_StationView.Create(this,100);
m_NtList.Create(IDD_NT_LIST,this);
m_btOutCard.Create(TEXT("出牌"),WS_CHILD|WS_CLIPSIBLINGS,CRect(0,0,80,25),this,IDC_OUT_CARD);
m_btGiveBack.Create(TEXT("留底牌"),WS_CHILD|WS_CLIPSIBLINGS,CRect(0,0,80,25),this,IDC_GIVE_BACK);
m_btContinue.Create(TEXT("继续"),WS_CHILD|WS_CLIPSIBLINGS,CRect(0,0,80,25),this,IDC_CONTINUE);
m_btPass.Create(TEXT("不出"),WS_CHILD|WS_CLIPSIBLINGS,CRect(0,0,80,25),this,IDC_PASS);
// m_btLastTurn.Create(TEXT("上一轮"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,75,25),this,IDC_LAST_CARD);
m_btLastTurn.Create(TEXT("上一轮"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,75,25),this,IDC_LAST_CARD);
// m_btBackCard.Create(TEXT("底牌"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,50,25),this,IDC_BACK_CARD);
m_btBackCard.Create(TEXT("排序"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,50,25),this,IDC_BACK_CARD);
m_btThing.Create(TEXT("有事要走"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,25,25),this,IDC_HAVE_THING);
m_btStop.Create(TEXT("提前结束"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,CRect(0,0,25,25),this,IDC_STOP);
m_GameNoteView.Create(NULL,NULL,WS_CHILD|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,50,NULL);
m_GameNoteView.AutoSize();
///m_btBackCard.LoadButtonBitmap(GetModuleHandle(CLIENT_DLL_NAME),IDB_BUTTON_BACKCARD,false);
//m_btLastTurn.LoadButtonBitmap(GetModuleHandle(CLIENT_DLL_NAME),IDB_BUTTON_LASTTURN,false);
// m_btStop.EnableWindow(true);
//移动位置
m_btLastTurn.SetFont(&CGameImageLink::m_HFont);
m_btBackCard.SetFont(&CGameImageLink::m_HFont);
m_btThing.SetFont(&CGameImageLink::m_HFont);
//建立客户扑克
int iCreateIndex[4]={2,1,3,0};
for (int i=0;i<4;i++)
{
m_UserCard[iCreateIndex[i]].Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,20+i,NULL);
m_UserCard[iCreateIndex[i]].SetLookMode(false);
m_UserCard[iCreateIndex[i]].SetShowCard(true);
}
///for (int i = 0;i < 3;i++)
{
///m_UserBackCard[i].Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,30+i,NULL);
///m_UserBackCard[i].SetShowCard(true);
}
m_MeCard.Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,25,NULL);
m_MeCard.InitGameCard(GetParent());
m_MeBackCard.Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,26,NULL);
m_MeBackCard.InitGameCard(GetParent());
m_MeBackCard.SetShowCard(false);
m_MeBackCard.SetUseMouse(false);
m_MeBackCard.ShowWindow(SW_HIDE);
///add扣牌
m_MeKouCard.Create(NULL,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,CRect(0,0,0,0),this,27,NULL);
m_MeKouCard.InitGameCard(GetParent());
m_MeKouCard.SetShowCard(true);
m_MeKouCard.SetUseMouse(false);
/////
//载入资源
m_btOutCard.SetFont(&CGameImageLink::m_HFont);
m_btGiveBack.SetFont(&CGameImageLink::m_HFont);
m_btContinue.SetFont(&CGameImageLink::m_HFont);
m_btPass.SetFont(&CGameImageLink::m_HFont);
AfxSetResourceHandle(GetModuleHandle(NULL));
//BYTE b[5]={2,7,9,10,11};
//m_UserCard[0].SetCard(b,NULL,5);
//m_UserCard[1].SetCard(b,NULL,5);
//m_UserCard[2].SetCard(b,NULL,5);
//m_UserCard[3].SetCard(b,NULL,5);
//m_MeCard.SetCard(b,NULL,5);
return 0;
}
void CClientPlayView::FixControlSize(int cx,int cy)
{
if ((cx==0)||(cy==0)) return;
CRect m_ClientRect;
GetClientRect(&m_ClientRect);
//修正位置
cy-=90;
m_ClientRect.bottom-=90;
//扑克索引
POINT ptCardPoint[4];
//移动坐标
int iMidLine=cy/2;
int iBaseLine=(cy-362)/2;
ptCardPoint[0].x=m_ClientRect.Width()/2;///cx/2;
ptCardPoint[0].y=35+VIEW_FRAME_TOP+40;
// iListState[0]=SW_MODE_CENTER;
m_PtNt[0].x=cx/2-115;
m_PtNt[0].y=15+VIEW_FRAME_TOP;
m_PtNtLogo[0].x=m_ClientRect.Width()/2;
m_PtNtLogo[0].y=32+VIEW_FRAME_TOP;
m_PtLogo[0].x=m_ClientRect.Width()/2-50;
m_PtLogo[0].y=15+VIEW_FRAME_TOP;
m_PtName[0].x=m_ClientRect.Width()/2-10;
m_PtName[0].y=15+VIEW_FRAME_TOP;
m_PtTime[0].x=m_ClientRect.Width()/2-85;
m_PtTime[0].y=15+VIEW_FRAME_TOP;
m_PtAgree[0].x=m_ClientRect.Width()/2+25;
m_PtAgree[0].y=30+VIEW_FRAME_TOP;
// iListState[1]=SW_MODE_RIGHT;
if (GetSystemMetrics(SM_CXSCREEN)>=1024)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -