//绘画界面 void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight) { //绘画背景 DrawViewImage(pDC,m_ImageBack,enMode_Spread); DrawViewImage(pDC,m_ImageCenter,enMode_Centent); //绘画用户 TCHAR szBuffer[32]; for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 WORD wUserTimer=GetUserTimer(i); const tagUserData * pUserData=GetUserInfo(i); ///////////////////////////////////////////////////// //tagUserData *pUserData = new tagUserData; //strcpy( (char*)pUserData->szName, "dkjfdkfjdkfj" ); //pUserData->cbUserStatus = US_READY; //wUserTimer = 10; //m_ImageLand.DrawImage(pDC,m_ptLand[i].x,m_ptLand[i].y); //m_wBombTime = 2; /////////////////////////////////////////////////////// //绘画用户 if (pUserData!=NULL) { //用户名字 pDC->SetTextAlign( ( ( i == 2 && ! m_bDeasilOrder ) || ( i == 0 && m_bDeasilOrder ) ) ? TA_RIGHT : TA_LEFT ); pDC->SetTextColor((wUserTimer>0)?RGB(250,250,250):RGB(220,220,220)); DrawTextString( pDC, pUserData->szName, RGB( 255, 255, 255 ), RGB( 0, 0, 0 ), m_ptName[i].x,m_ptName[i].y ); //剩余扑克 // if (i!=1) { _snprintf(szBuffer,sizeof(szBuffer),TEXT("剩余:%d 张"),m_bCardCount[i]); DrawTextString( pDC, szBuffer, RGB( 255, 255, 255 ), RGB( 0, 0, 0 ), m_ptName[i].x,m_ptName[i].y+18 ); } //其他信息 if (wUserTimer!=0) DrawUserTimer(pDC,m_ptTimer[i].x,m_ptTimer[i].y,wUserTimer); if (pUserData->cbUserStatus==US_READY) DrawUserReady(pDC,m_ptReady[i].x,m_ptReady[i].y); DrawUserFace(pDC,pUserData,m_ptFace[i].x,m_ptFace[i].y,pUserData->cbUserStatus==US_OFFLINE); } } //叫分标志 int nXImagePos,nImageWidth=m_ImageScore.GetWidth(),nImageHeight=m_ImageScore.GetHeight(); for (WORD i=0;i<3;i++) { if ((m_bScore[i]!=0)||(m_bPass[i]==true)) { if ( m_bPass[i]==true ) nXImagePos=m_ImageScore.GetWidth()*4/5; else if ( m_bScore[i]==255 ) nXImagePos=m_ImageScore.GetWidth()*3/5; else nXImagePos=(m_bScore[i]-1)*m_ImageScore.GetWidth()/5; m_ImageScore.DrawImage(pDC,m_ptScore[i].x,m_ptScore[i].y,nImageWidth/5,nImageHeight,nXImagePos,0); } } //庄家位置 if (m_wLandUser!=INVALID_CHAIR) { //获取用户 const tagUserData * pUserData=GetUserInfo(m_wLandUser); if (pUserData!=NULL) { //变量定义 TCHAR szBuffer[64]; //设置 DC pDC->SetTextAlign(TA_LEFT|TA_TOP); pDC->SetTextColor(RGB(250,250,250)); //绘画信息 m_ImageLand.DrawImage(pDC,m_ptLand[m_wLandUser].x,m_ptLand[m_wLandUser].y); _snprintf(szBuffer,sizeof(szBuffer),TEXT("地主:%s"),pUserData->szName); pDC->TextOut(m_nXBorder+m_nXFace+10,m_nYBorder+8,szBuffer,lstrlen(szBuffer)); //绘画头像 DrawUserFace(pDC,pUserData,m_nXBorder+5,m_nYBorder+5,false); //叫牌分数 LONG lScore=m_cbLandScore*m_lBaseScore; _snprintf(szBuffer,sizeof(szBuffer),TEXT("分数:%ld 分"),lScore); DrawTextString( pDC, szBuffer, RGB( 255, 255, 255 ), RGB( 0, 0, 0 ), m_nXBorder+m_nXFace+10,m_nYBorder+25 ); } } //绘画爆炸 if (m_bBombEffect==true) { //加载资源 CImageHandle HandleBombEffect(&m_ImageBombEffect); //绘画效果 INT nImageHeight=m_ImageBombEffect.GetHeight(); INT nImageWidth=m_ImageBombEffect.GetWidth()/BOMB_EFFECT_COUNT; m_ImageBombEffect.AlphaDrawImage(pDC,(nWidth-nImageWidth)/2,0,nImageWidth,nImageHeight, nImageWidth*(m_cbBombFrameIndex%BOMB_EFFECT_COUNT),0,RGB(255,0,255)); } //炸弹倍数 if (m_wBombTime>1) { //炸弹标志 CImageHandle ImageHandle(&m_ImageBomb); m_ImageBomb.AlphaDrawImage(pDC,m_nXBorder+5,nHeight-m_nYBorder-m_ImageBomb.GetHeight()-5,RGB(255,0,255)); //设置 DC pDC->SetTextColor(RGB(250,250,250)); pDC->SetTextAlign(TA_LEFT|TA_TOP); //炸弹倍数 TCHAR szBuffer[64]; _snprintf(szBuffer,sizeof(szBuffer),TEXT("炸弹翻倍:%d"),m_wBombTime); DrawTextString( pDC, szBuffer, RGB( 255, 255, 255 ), RGB( 0, 0, 0 ), m_nXBorder+m_ImageBomb.GetWidth()+10,nHeight-m_nYBorder-20 ); // pDC->TextOut(m_nXBorder+m_ImageBomb.GetWidth()+10,nHeight-m_nYBorder-20,szBuffer,lstrlen(szBuffer)); } //描述信息 if (m_bLandTitle==true) { //创建资源 CFont InfoFont; InfoFont.CreateFont(-36,0,0,0,400,0,0,0,134,3,2,1,2,TEXT("黑体")); //设置 DC pDC->SetTextColor(RGB(201,229,133)); pDC->SetTextAlign(TA_CENTER|TA_TOP); CFont * pOldFont=pDC->SelectObject(&InfoFont); //绘画信息 pDC->TextOut(nWidth/2,200,"正等待用户叫分"); //清理资源 pDC->SelectObject(pOldFont); InfoFont.DeleteObject(); } //托管标识 for ( WORD wChairID = 0; wChairID < GAME_PLAYER; ++wChairID ) { const tagUserData * pUserData=GetUserInfo( wChairID ); if ( pUserData == NULL ) m_bUserTrustee[ wChairID ] = false; if ( m_bUserTrustee[ wChairID ] ) { if ( wChairID == 1 ) m_ImageUserTrustee.DrawImage( pDC, m_ptLand[ wChairID ].x + 40, m_ptLand[ wChairID ].y - 1 ); else if ( wChairID == 0 && !m_bDeasilOrder || wChairID == 2 && m_bDeasilOrder ) m_ImageUserTrustee.DrawImage( pDC, m_ptFace[ wChairID ].x + m_nXFace + 8, m_ptFace[ wChairID ].y + m_nYFace - m_ImageUserTrustee.GetHeight() + 3 ); else m_ImageUserTrustee.DrawImage( pDC, m_ptFace[ wChairID ].x - m_nXFace - 8, m_ptFace[ wChairID ].y + m_nYFace - m_ImageUserTrustee.GetHeight() + 3 ); } } //历史积分 if (m_bShowScore==true) { //积分背景 CImageHandle HandleHistoryScore(&m_ImageHistoryScore); m_ImageHistoryScore.BitBlt(pDC->m_hDC,nWidth-m_ImageHistoryScore.GetWidth()-40,27); //计算位置 INT nYBenchmark=27; INT nXBenchmark=nWidth-m_ImageHistoryScore.GetWidth()-40; UINT nFormat=DT_SINGLELINE|DT_END_ELLIPSIS|DT_VCENTER|DT_CENTER; //绘画属性 pDC->SetTextAlign(TA_LEFT|TA_TOP); pDC->SetTextColor(RGB(254,247,137)); //绘画信息 for (WORD i=0;i<GAME_PLAYER;i++) { //获取用户 const tagUserData * pUserData=GetUserInfo(i); if ((pUserData==NULL)||(m_pHistoryScore[i]==NULL)) continue; //位置计算 CRect rcAccounts(nXBenchmark+2,nYBenchmark+24+i*19,nXBenchmark+73,nYBenchmark+42+i*19); CRect rcTurnScore(nXBenchmark+74,nYBenchmark+24+i*19,nXBenchmark+127,nYBenchmark+42+i*19); CRect rcCollectScore(nXBenchmark+128,nYBenchmark+24+i*19,nXBenchmark+197,nYBenchmark+42+i*19); //构造信息 TCHAR szTurnScore[16]=TEXT(""),szCollectScore[16]=TEXT(""); _sntprintf(szTurnScore,CountArray(szTurnScore),TEXT("%I64d"),m_pHistoryScore[i]->lTurnScore); _sntprintf(szCollectScore,CountArray(szCollectScore),TEXT("%I64d"),m_pHistoryScore[i]->lCollectScore); //绘画信息 TCHAR strAccounts[64]; _sntprintf(strAccounts,CountArray(strAccounts),TEXT("%s"),pUserData->szName); pDC->DrawText(strAccounts,lstrlen(strAccounts),&rcAccounts,nFormat); pDC->DrawText(szTurnScore,lstrlen(szTurnScore),&rcTurnScore,nFormat); pDC->DrawText(szCollectScore,lstrlen(szCollectScore),&rcCollectScore,nFormat); } } return; }
//绘画背景 BOOL CServerItmOpaint::OnEraseBkgnd(CDC * pDC) { //获取位置 CRect rcClient; GetClientRect(&rcClient); //建立缓冲 CImage ImageBuffer; ImageBuffer.Create(rcClient.Width(),rcClient.Height(),24); //创建 DC CDC BufferDC; BufferDC.CreateCompatibleDC(pDC); BufferDC.SelectObject(ImageBuffer); //加载资源 CImageHandle HandleTitleL(&m_ImageTitleL); CImageHandle HandleTitleM(&m_ImageTitleM); CImageHandle HandleTitleR(&m_ImageTitleR); //绘画背景 //m_ImageTitleL.BitBlt(BufferDC,0,0); //填充中间 for (INT nXPos=0;nXPos<rcClient.Height()-m_ImageTitleR.GetHeight();nXPos+=m_ImageTitleM.GetHeight()) { m_ImageTitleM.BitBlt(BufferDC,0,nXPos); } //绘画背景 m_ImageTitleR.BitBlt(BufferDC,0,rcClient.Height()-m_ImageTitleR.GetHeight()); //设置 DC BufferDC.SetTextColor(CR_TEXT); BufferDC.SetBkMode(TRANSPARENT); BufferDC.SelectObject(CSkinResourceManager::GetDefaultFont()); //用户信息 if (m_bShowInfo==true) { //变量定义 tagGlobalUserData & GlobalUserInfo=g_GlobalUnits.GetGolbalUserData(); //用户头像 g_GlobalUnits.m_UserFaceRes->DrawNormalFace(&BufferDC,10,12,GlobalUserInfo.cbGender,GlobalUserInfo.dwUserID,GlobalUserInfo.dwCustomFaceVer,32,32); //构造位置 TCHAR szBuffer[255]=TEXT(""); CRect rcAccounts(50,15,rcClient.Width()-20,27); CRect rcUnderWrite(50,32,rcClient.Width()-20,44); //用户帐号 _sntprintf(szBuffer,CountArray(szBuffer),TEXT("用户帐号:%s [ %ld ]"),GlobalUserInfo.szAccounts,GlobalUserInfo.dwGameID); BufferDC.DrawText(szBuffer,lstrlen(szBuffer),&rcAccounts,DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); //会员信息 LPCTSTR pszMemberOrder[]={TEXT("非会员"),TEXT("红钻会员"),TEXT("蓝钻会员"),TEXT("黄钻会员"),TEXT("紫钻会员")}; if (GlobalUserInfo.cbMember<CountArray(pszMemberOrder)) { _sntprintf(szBuffer,CountArray(szBuffer),TEXT("会员等级:%s"),pszMemberOrder[GlobalUserInfo.cbMember]); BufferDC.DrawText(szBuffer,lstrlen(szBuffer),&rcUnderWrite,DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); } } //绘画界面 pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&BufferDC,0,0,SRCCOPY); //清理资源 BufferDC.DeleteDC(); ImageBuffer.Destroy(); return TRUE; }
//绘画界面 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; }
//绘画背景 BOOL CUserInfoView::OnEraseBkgnd(CDC * pDC) { //获取位置 CRect rcClient; GetClientRect(&rcClient); //建立缓冲 CImage ImageBuffer; ImageBuffer.Create(rcClient.Width(),rcClient.Height(),24); //创建 DC CDC BufferDC; BufferDC.CreateCompatibleDC(pDC); BufferDC.SelectObject(ImageBuffer); //加载资源 CImageHandle HandleTitleL(&m_ImageTitleL); CImageHandle HandleTitleM(&m_ImageTitleM); CImageHandle HandleTitleR(&m_ImageTitleR); //绘画背景 m_ImageTitleL.BitBlt(BufferDC,0,0); //填充中间 for (INT nXPos=m_ImageTitleL.GetWidth();nXPos<rcClient.Width();nXPos+=m_ImageTitleM.GetWidth()) { m_ImageTitleM.BitBlt(BufferDC,nXPos,0); } //绘画背景 m_ImageTitleR.BitBlt(BufferDC,rcClient.Width()-m_ImageTitleR.GetWidth(),0); //设置 DC BufferDC.SetTextColor(CR_TEXT); BufferDC.SetBkMode(TRANSPARENT); BufferDC.SelectObject(&CSkinAttribute::m_DefaultFont); //用户信息 if (m_bShowInfo==true) { //变量定义 tagGlobalUserData & GlobalUserInfo=g_GlobalUnits.GetGolbalUserData(); //用户头像 g_GlobalUnits.m_UserFaceRes->DrawNormalFace(&BufferDC,9,8,GlobalUserInfo.wFaceID); //构造位置 TCHAR szBuffer[128]=TEXT(""); CRect rcAccounts(50,11,rcClient.Width()-20,23); CRect rcUnderWrite(50,28,rcClient.Width()-20,40); //用户帐号 _sntprintf(szBuffer,CountArray(szBuffer),TEXT("用户帐号:%s [ %ld ]"),GlobalUserInfo.szAccounts,GlobalUserInfo.dwGameID); BufferDC.DrawText(szBuffer,lstrlen(szBuffer),&rcAccounts,DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); //个性签名 _sntprintf(szBuffer,CountArray(szBuffer),TEXT("个性签名:%s"),GlobalUserInfo.szUnderWrite); BufferDC.DrawText(szBuffer,lstrlen(szBuffer),&rcUnderWrite,DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); } //绘画界面 pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&BufferDC,0,0,SRCCOPY); //清理资源 BufferDC.DeleteDC(); ImageBuffer.Destroy(); return TRUE; }