示例#1
0
//绘画界面
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;
}
示例#2
0
//绘画界面
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;
}