www.pudn.com > XmudOSr.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 CListskilllist; 
extern CListequiplist; 
extern CListequiprentlist; 
extern CStringList g_equiprentlist; 
extern CListplayerlist; 
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;im_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;im_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;im_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;im_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;im_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;im_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;ilpBackBuffer->GetDC(&hDC); 
	SelectObject(hDC, g_MessagehFont1); 
	SetBkMode( hDC, TRANSPARENT ); 
 
	int i,j; 
	j = g_strlistMesssage.GetCount(); 
	for(i=0;ilpBackBuffer->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; 
}