//绘画界面 void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight) { //绘画背景 DrawViewImage(pDC,m_ImageBack,enMode_ElongGate); //装饰位图 CImageHandle DecorateHandle(&m_ImageDecorate); m_ImageDecorate.BitBlt(pDC->m_hDC,m_nXBorder+2,m_nYBorder+9); //用户区域 CImageHandle UserInfoHandle(&m_ImageUserInfo); int nXPos=m_nXBorder+20; int nYPos=(nHeight-m_UserInfoSize.cy)/2-30; m_ImageUserInfo.AlphaDrawImage(pDC,nXPos,nYPos,RGB(255,0,255)); //棋子标志 if (m_wBlackUser!=INVALID_CHAIR) { CImageHandle FlagHandle(&m_ImageFlag); m_ImageFlag.BitBlt(pDC->m_hDC,m_ChessFlagPoint[0].x+15,m_ChessFlagPoint[0].y,m_ImageFlag.GetWidth()/2,m_ImageFlag.GetHeight(), (m_wBlackUser==0)?0:m_ImageFlag.GetWidth()/2,0); m_ImageFlag.BitBlt(pDC->m_hDC,m_ChessFlagPoint[1].x+15,m_ChessFlagPoint[1].y,m_ImageFlag.GetWidth()/2,m_ImageFlag.GetHeight(), (m_wBlackUser==1)?0:m_ImageFlag.GetWidth()/2,0); } //绘画用户 WORD wUserTimer=0; pDC->SetTextColor(RGB(255,255,255)); for (WORD i=0; i<GAME_PLAYER; i++) { //变量定义 CRect rcName; const tagUserData * pUserData=GetUserInfo(i); if (pUserData!=NULL) { //用户区域 rcName.top=m_ptName[i].y; rcName.left=m_ptName[i].x+15; rcName.right=m_ptName[i].x+120; rcName.bottom=m_ptName[i].y+12; pDC->DrawText(pUserData->szName,lstrlen(pUserData->szName),&rcName,DT_SINGLELINE|DT_END_ELLIPSIS); //用户时间 DrawUserClock(pDC,m_ptTimer[i].x+15,m_ptTimer[i].y,m_wGameClock); DrawUserClock(pDC,m_ptTimer[i].x+15,m_ptTimer[i].y+27,m_wLeftClock[i]); //其他信息 if (pUserData->cbUserStatus==US_READY) DrawUserReady(pDC,m_ptReady[i].x+15,m_ptReady[i].y); DrawUserFace(pDC,pUserData->wFaceID,m_ptFace[i].x+15,m_ptFace[i].y,pUserData->cbUserStatus==US_OFFLINE); } } //按钮底图 CImageHandle ButtonBackHandle(&m_ImageButtonBack); nYPos=nHeight-m_nYBorder-m_ButtonBackSize.cy-30; nXPos=m_UserInfoSize.cx+(nWidth-m_UserInfoSize.cx-m_ButtonBackSize.cx)/2; m_ImageButtonBack.BitBlt(pDC->m_hDC,nXPos,nYPos); return; }
//绘画界面 VOID CGameClientView::DrawGameView(CDC * pDC, INT nWidth, INT nHeight) { //绘画背景 CRect rcViewBack(0, 0, nWidth, nHeight); DrawViewImage(pDC, m_ImageViewFill, enMode_Spread); //CSkinAide::DrawEncircleFrame(pDC,rcViewBack,m_EncircleImageViewBack); //用户信息 CImageHandle HandleUserViewInfo(&m_ImageUserInfoView); CImageHandle HandleUserViewFlag(&m_ImageUserInfoFlag); m_ImageUserInfoView.BitBlt(pDC->m_hDC, m_ptUserInfoView.x, m_ptUserInfoView.y); //绘画用户 for (WORD i = 0; i < GAME_PLAYER; i++) { //获取用户 const tagUserData * pUserData = GetUserInfo(i); //测试代码 //tagUserData Obj; //Obj.wFaceID = 5; //_sntprintf( Obj.szName,sizeof(Obj.szName),TEXT("用户的名字")); //Obj.cbUserStatus = US_SIT; //Obj.lScore = 5693; //pUserData = &Obj; if (pUserData == NULL) continue; //用户时间 WORD wTimes = GetUserTimer(i); //输出位置 CRect rcAccounts(m_ptName[i].x, m_ptName[i].y, m_ptName[i].x + 100, m_ptName[i].y + 13); CRect rcLevelDescribe(m_ptName[i].x, m_ptName[i].y + 20, m_ptName[i].x + 100, m_ptName[i].y + 13 + 20); //用户等级 TCHAR pszLevelDescribe[LEN_ACCOUNTS] = TEXT(""); GetLevelDescribe(pUserData->lScore, pszLevelDescribe); //绘画用户 pDC->SetTextColor(RGB(20, 20, 20)); DrawUserFace(pDC, pUserData, m_ptFace[i].x + 7, m_ptFace[i].y + 7, pUserData->cbUserStatus == US_OFFLINE); if (wTimes > 0)DrawUserTimer(pDC, m_ptFace[i].x + 85, m_ptFace[i].y + 28, wTimes, 99L); pDC->DrawText(pUserData->szName, lstrlen(pUserData->szName), rcAccounts, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER); pDC->DrawText(pszLevelDescribe, lstrlen(pszLevelDescribe), rcLevelDescribe, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER); //绘画标志 if ((m_wBankerUser != INVALID_CHAIR) && (pUserData->cbUserStatus != US_SIT)) { //获取大小 INT nImageWidht = m_ImageUserInfoFlag.GetWidth() / 4; INT nImageHeight = m_ImageUserInfoFlag.GetHeight(); //用户标志 INT nXImagePos = (m_wBankerUser == i) ? 0 : nImageWidht; if (m_wCurrentUser == i) nXImagePos += 2 * nImageWidht; m_ImageUserInfoFlag.BitBlt(pDC->m_hDC, m_ptUserInfoView.x + 77, m_ptUserInfoView.y + 8 + i*291, nImageWidht, nImageHeight, nXImagePos, 0); } //游戏时间 DrawUserClock(pDC, m_ptName[i].x, m_ptName[i].y + 42, m_UserStatusInfo[i].wDrawTimeCount); DrawUserClock(pDC, m_ptName[i].x, m_ptName[i].y + 62, m_UserStatusInfo[i].wStepTimeCount); DrawUserClock(pDC, m_ptName[i].x, m_ptName[i].y + 82, m_UserStatusInfo[i].wSecondTimeCount); } //规则信息 INT nXPos = m_ptUserInfoView.x + 70; INT nYPos = m_ptUserInfoView.y + 218; DrawUserClock(pDC, nXPos, nYPos, m_RuleStatusInfo.wDrawTimeCount); DrawUserClock(pDC, nXPos, nYPos + 20, m_RuleStatusInfo.wStepTimeCount); DrawUserClock(pDC, nXPos, nYPos + 40, m_RuleStatusInfo.wSecondTimeCount); //绘画棋盘 m_ChessBorad.DrawChessBorad(pDC); //控制底图 CImageHandle HandleControlBack(&m_ImageControlBack); m_ImageControlBack.BitBlt(pDC->m_hDC, m_ptControlView.x, m_ptControlView.y); //绘画棋谱 if (m_rcChessManual.Width() > 0) { //加载资源 CImageHandle HandleChessManualT(&m_ImageChessManualT); CImageHandle HandleChessManualM(&m_ImageChessManualM); CImageHandle HandleChessManualB(&m_ImageChessManualB); //棋谱头尾 m_ImageChessManualT.BitBlt(pDC->m_hDC, m_rcChessManual.left, m_rcChessManual.top); m_ImageChessManualB.BitBlt(pDC->m_hDC, m_rcChessManual.left, m_rcChessManual.bottom - m_ImageChessManualB.GetHeight()); //棋谱底部 INT nYStartPos = m_rcChessManual.top + m_ImageChessManualT.GetHeight(); INT nYConcludePos = m_rcChessManual.bottom - m_ImageChessManualB.GetHeight(); for (INT nYPos = nYStartPos; nYPos < nYConcludePos; nYPos += m_ImageChessManualM.GetHeight()) { INT nDrawHeight = __min(m_ImageChessManualM.GetHeight(), nYConcludePos - nYPos); m_ImageChessManualM.BitBlt(pDC->m_hDC, m_rcChessManual.left, nYPos, m_nManualWidth, nDrawHeight, 0, 0); } } return; }