www.pudn.com > 3D_OnlineGame_Humen.rar > MainScreenDraw.cpp
// MainScreenDraw.cpp // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "XMudClient.h" #include "MainScreen.h" #include "FacePlate.h" #include "D3DRMScreen.h" #include "MenuCreateNew.h" #include "NpcInfo.h" #include "CmdFunction.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif extern BOOL g_Redraw2dFace[2]; extern rmfullglobals myglobs; extern D3DAppInfo* d3dapp; extern CListnpcskilllist; extern CList skilllist; extern CList equiplist; extern CList equiprentlist; extern CStringList g_equiprentlist; extern CList playerlist; extern CList chatchannellist; // Nuke +1 extern CList npcAsklist; extern CPlayerInfo * lpPlayerInfo; extern CString g_szInputMsg; extern CStringList g_strlistChannel; extern CStringList g_strlistMesssage; extern CStringList g_strlistSelfMsg; extern CStringList g_strlistOnline; extern HFONT g_MessagehFont; extern HFONT g_MessagehFont1; ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// void CMainScreen::FIRSTFIELD::ResetCount() { switch(nShowState) { case SHOWEQUIP: mDragBar.ResetCount(equiplist.GetCount()); break; case SHOWRENTEQUIP: mDragBar.ResetCount(g_equiprentlist.GetCount()); break; case SHOWSKILL: mDragBar.ResetCount(skilllist.GetCount()); break; case SHOWCHANNEL: mDragBar.ResetCount(g_strlistChannel.GetCount()); break; case SHOWCHANNELUSER: mDragBar.ResetCount(chatchannellist.GetCount()); break; case SHOWNPCSKILL: mDragBar.ResetCount(npcskilllist.GetCount()); break; case SHOWALLONLINEUSERS: mDragBar.ResetCount(g_strlistOnline.GetCount()); break; case SHOWFRIEND: case SHOWNPCEQUIP: // Nuke +1 case SHOWNPCASK: mDragBar.ResetCount(npcAsklist.GetCount()); break; default: mDragBar.ResetCount(0); } } //顯示第一區的數據 void CMainScreen::DrawOneField() { CEquipInfo *lpEquipInfo; CSkillInfo *lpSkillInfo; CNpcSkillInfo *lpNpcSkillInfo; CChatChannel *lpChatChannel; // Nuke +1 CNpcAskInfo *lpNpcAskInfo; RECT rcTmp = rcFirstField; char tmpchar[5]; CString tmpMsg,tmpMsg2; int i,j,k=0; POSITION posTmp; static int nLastState = 0; if(mFirstFD.nShowState != nLastState) { nLastState = mFirstFD.nShowState; mFirstFD.ResetCount(); } mFirstFD.mDragBar.ReDraw(); rcTmp.right -= 17; bltObject(rcFirstField.left, rcFirstField.top, myglobs.g_lpDDSGameMenu, &rcTmp, DDBLTFAST_SRCCOLORKEY); j = mFirstFD.mDragBar.GetCount(); i = (mFirstFD.mDragBar.nFirstPos<0)?0:mFirstFD.mDragBar.nFirstPos; j = (j > (i+8))? i+8:j; j -= i; switch(mFirstFD.nShowState) { case SHOWEQUIP: { posTmp = equiplist.FindIndex(i); for(i=0;i m_sCNAME, lpEquipInfo->m_iCOUNT, lpEquipInfo->m_sUNIT, lpEquipInfo->m_sNOW); rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; // 畫裝備文字 DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; case SHOWRENTEQUIP: { posTmp = g_equiprentlist.FindIndex(i); for(i=0;i m_sCNAME); tmpMsg += "["; tmpMsg += itoa(lpSkillInfo->m_iSCORER,tmpchar,10); tmpMsg += "/"; tmpMsg += itoa(lpSkillInfo->m_iLEVEL,tmpchar,10); tmpMsg += "]"; if(!lpSkillInfo->m_sMAPPING.IsEmpty()) { tmpMsg2 = GetSkillPtr(lpSkillInfo->m_sMAPPING)->m_sCNAME; tmpMsg += CString(" (") + tmpMsg2 + ")"; } rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; // 畫技能文字 DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; case SHOWCHANNEL: { posTmp = g_strlistChannel.FindIndex(i); for(i=0;i m_sCNAME + CString("]"); tmpMsg += CString("(") + lpChatChannel->m_sENAME + CString(")"); tmpMsg += lpChatChannel->m_sSEX; if(!lpChatChannel->m_sFAMILY.IsEmpty()) tmpMsg += CString("[") + lpChatChannel->m_sFAMILY +CString("]"); rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; // 畫詳細頻道文字 DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; case SHOWNPCSKILL: { posTmp = npcskilllist.FindIndex(i); k = i; for(i=0;i m_sCNAME; if((k || i)&&(lpNpcSkillInfo->m_iLEVEL != 0 || lpNpcSkillInfo->m_iSCORER != 0)) { tmpMsg = lpNpcSkillInfo->m_sCNAME; tmpMsg += CString(" "); tmpMsg += itoa(lpNpcSkillInfo->m_iSCORER,tmpchar,10); tmpMsg += CString("/"); tmpMsg += itoa(lpNpcSkillInfo->m_iLEVEL,tmpchar,10); } rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; // 畫NPC技能文字 DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; case SHOWNPCEQUIP: break; case SHOWFRIEND: break; case SHOWALLONLINEUSERS: { posTmp = g_strlistOnline.FindIndex(i); for(i=0;i m_sCNAME + CString("]"); // tmpMsg += CString("(") + lpChatChannel->m_sENAME + CString(")"); // tmpMsg += lpChatChannel->m_sSEX; // if(!lpChatChannel->m_sFAMILY.IsEmpty()) // tmpMsg += CString("[") + lpChatChannel->m_sFAMILY +CString("}"); rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; // 畫詳細頻道文字 DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; // Nuke start case SHOWNPCASK: { posTmp = npcAsklist.FindIndex(i); for(i=0;i m_sCNAME); rcTmp = mFirstFD.rcBars[i]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &mFirstFD.rcRectBarSour, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 2; rcTmp.right -= 2; rcTmp.top += 2; rcTmp.bottom -=2; DrawGameString((char *)(LPCSTR)tmpMsg ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(125,125,125) ,RGB(0,0,0),TRUE); } } break; // Nuke end } } HRESULT CMainScreen::Clear3DMessage() { RECT rcTemp = rc3DField; bltObject(rcTemp.left, rcTemp.top, myglobs.g_lpDDSGameMenu, &rcTemp, DDBLTFAST_SRCCOLORKEY); return DD_OK; } char *GetMyParameter(CString MyString,long Index) { BOOL bStart; long i,p,t; static char szBuffer[512]; bStart=FALSE; szBuffer[0]=0; for(i=0,p=0,t=0;i lpBackBuffer->GetDC(&hDC); SelectObject(hDC, g_MessagehFont1); SetBkMode( hDC, TRANSPARENT ); int i,j; j = g_strlistMesssage.GetCount(); for(i=0;i lpBackBuffer->ReleaseDC(hDC); return ddrval; } HRESULT CMainScreen::DisplaySelfMessage(int Scroll) { HDC hDC; long R,G,B; HRESULT ddrval; CString string; RECT rcThis = rcTalkMessField; rcThis.right -= 17; bltObject(rcThis.left, rcThis.top, myglobs.g_lpDDSGameMenu, &rcThis, DDBLTFAST_SRCCOLORKEY); int j; if(Scroll) { int nTmp = mTalkFD.mDragBar.nFirstPos; int nCount = mTalkFD.mDragBar.GetCount(); j = g_strlistSelfMsg.GetCount(); if((nCount <= 9)|| nTmp == (nCount-9)) { mTalkFD.mDragBar.ResetCount(j); mTalkFD.mDragBar.nFirstPos = (j <= 9)? 0:j-9; } else { mTalkFD.mDragBar.ResetCount(j); if(j < 99) Scroll = 0; else if(nCount != 99 && j == 99) Scroll = j - nCount; nTmp -= Scroll; if(nTmp < 0) nTmp = 0; mTalkFD.mDragBar.nFirstPos = nTmp; } } mTalkFD.mDragBar.ReDraw(); POSITION pos = g_strlistSelfMsg.FindIndex(mTalkFD.mDragBar.nFirstPos); RECT rcTemp = {254,422,776,440}; ddrval =d3dapp->lpBackBuffer->GetDC(&hDC); SelectObject(hDC, g_MessagehFont1); SetBkMode( hDC, TRANSPARENT ); for(j=0; (j<9)&&(pos != NULL); j++) { string = g_strlistSelfMsg.GetNext(pos); if(!stricmp(string.Left(5),szNewColor)) { R=atoi(GetMyParameter(string,1)); G=atoi(GetMyParameter(string,2)); B=atoi(GetMyParameter(string,3)); SetTextColor(hDC,RGB(R,G,B)); string=RemoveParameter(string); } else if(!stricmp(string.Left(5),szRedLow)) SetTextColor(hDC,RGB(150,0,0)); else if(!stricmp(string.Left(5),szRedHigt)) SetTextColor(hDC,RGB(255,0,0)); else if(!stricmp(string.Left(5),szGreenLow)) SetTextColor(hDC,RGB(0,150,0)); else if(!stricmp(string.Left(5),szGreenHigt)) SetTextColor(hDC,RGB(0,255,0)); else if(!stricmp(string.Left(5),szYellowLow)) SetTextColor(hDC,RGB(150,150,0)); else if(!stricmp(string.Left(5),szYellowHigt)) SetTextColor(hDC,RGB(255,255,0)); else if(!stricmp(string.Left(5),szBlueLow)) SetTextColor(hDC,RGB(0,150,0)); else if(!stricmp(string.Left(5),szBlueHigt)) SetTextColor(hDC,RGB(0,255,0)); else if(!stricmp(string.Left(5),szCyanLow)) SetTextColor(hDC,RGB(0,150,150)); else if(!stricmp(string.Left(5),szCyanHigt)) SetTextColor(hDC,RGB(0,255,255)); string = string.Right(string.GetLength()-5); // 畫私人對話訊息 DrawText(hDC,string,-1,&rcTemp,DT_LEFT | DT_VCENTER); rcTemp.top += 15; rcTemp.bottom += 15; } d3dapp->lpBackBuffer->ReleaseDC(hDC); return ddrval; }