⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myshelldlg8-4back.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	m_bInitSuc = true ;

#ifndef _SOUND_DISABLE
	if ( 0 != DXSoundinit ( this->GetSafeHwnd ( ) ) )
	{
		this->MessageBox ( g_objGameDataSet.GetStr ( 10048 ), "Error", MB_OK|MB_ICONERROR ) ;		
		//		this->MessageBox("初始化声效系统失败。请检查声卡驱动程序", "Error", MB_OK|MB_ICONERROR);
	}
#endif
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyShellDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyShellDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyShellDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyShellDlg::OnTimer(UINT nIDEvent) 
{
	static DWORD dwTicks = 0;
	dwTicks ++;

	if (IsIconic())
	{
		if (dwTicks%5 != 0)
			return;
	}
	else
	{
		if (this != CWnd::GetActiveWindow()
				&& dwTicks%5 != 0)
			return;
	}

	static volatile bool bInLoop = false;
	if (!bInLoop)
	{
		bInLoop = true;

		if (nIDEvent == 1)
		{
			if ( m_bDlgMove )
				CMyShellDlg::MoveDlg( ) ;

			switch ( g_uStatus )
			{
			case ( _STATUS_NONE ):
				{
					if (!BeginShow())
						break;

					if ( m_DlgLogin.m_bShow )
						m_DlgLogin.Show () ;

					if ( m_DlgRoleCreate.m_bShow )
						m_DlgRoleCreate.Show() ;

					if ( m_DlgConfirm.m_bShow )
						m_DlgConfirm.Show() ;

					::DXProcessSound(0, 0);
					
					EndShow ( ) ;
				}
				break ;

			case ( _STATUS_EXIT ):
				{
					m_DlgMain.WriteRecord();
					const char* pszMsg	=g_objEntrance.GetLastMsg();
					if (pszMsg)
					{
						::MessageBox(NULL, pszMsg, g_objGameDataSet.GetStr ( 10050 ), MB_OK|MB_ICONERROR);
						g_uStatus	=_STATUS_NONE;
						g_objGameMsg.ClearMsg() ;
						g_objGameMsg.DestroyLeaveWord() ;
						
						if (m_bLogin)
						{
							CMyShellDlg::CloseCurDlg();
							::DXCloseAllMedia();
							::DXCloseAllSound();
						}
						SetLoginEffectPos(m_bLogin);
						g_bPickUp = false;
						m_uCmd = CMD_NORMAL;
						m_DlgLogin.ShowWindow ( SW_SHOW ) ;
						m_DlgLogin.SetCurLoginMode(2);
						m_DlgLogin.SetFocus() ;	
						m_DlgLogin.m_LoginPasswordEdt.SetFocus();
						
					}
				}
				break ;
			case ( _STATUS_ACCOUNT ):
				{
					GameScreenMsg(g_objGameDataSet.GetStr ( 10051 ) ) ;//"连接账号服务器中。。。");//
					g_objNetwork.ProcessNetMsg();
				}
				break;
			case ( _STATUS_LOGIN ):
				{
					char szMsg[128];
					sprintf(szMsg, g_objGameDataSet.GetStr ( 10052 ), g_szServerName);
 					GameScreenMsg(szMsg); //"登录服务器中。。。");//
					
					g_objNetwork.ProcessNetMsg();
					if ( m_DlgConfirm.m_bShow )
					{
						BeginShow() ;
						m_DlgConfirm.Show() ;
						EndShow() ;
					}
	
					const char* pszMsg	=g_objEntrance.GetLastMsg();
					if (pszMsg)
					{
						if (0 == stricmp(REPLAY_OK_STR, pszMsg ) )
						{
							CMyShellDlg::StartGame () ;
						}
						else if (0 == stricmp(NEW_ROLE_STR, pszMsg ) )
						{
							g_uStatus = _STATUS_NONE ;

							WPARAM wParam = ON_LOGIN_NEW ;
							this->PostMessage ( WM_MY_MESSAGE, wParam ) ;
						}
						else
						{
							::MessageBox(NULL, pszMsg, "Error", MB_OK|MB_ICONERROR);

							g_uStatus = _STATUS_NONE ;
							
							SetLoginEffectPos(m_bLogin);
							m_DlgLogin.ShowWindow ( SW_SHOW ) ;
							m_DlgLogin.SetCurLoginMode(2);
							m_DlgLogin.SetFocus() ;		
							m_DlgLogin.m_LoginPasswordEdt.SetFocus();							
						}
					}
				}
				break ;

			case ( _STATUS_REGISTER ):
				{
					GameScreenMsg(g_objGameDataSet.GetStr ( 10054 ) ) ;//"注册服务器中。。。") ;//
					g_objNetwork.ProcessNetMsg () ;

					const char* pszMsg	=g_objRegister.GetLastMsg();
					if ( pszMsg )
					{
						if ( 0 != stricmp(REPLAY_OK_STR, pszMsg ) )
						{
							g_uStatus = _STATUS_NONE ;
							::MessageBox(NULL, pszMsg, "Error", MB_OK|MB_ICONERROR);
							CMyShellDlg::CreateRole( 0 ) ;
						}
						else
						{
							m_bWait = true ;
							g_dwLastTime = TimeGet() ;
						}
					}
					if ( m_bWait )
					{
						if ( ( TimeGet() - g_dwLastTime ) >= 10000 )
						{
							g_uStatus = _STATUS_NONE ;
							::MessageBox ( NULL, CMyShellApp::StringChange ( g_objGameDataSet.GetStr ( 10055 ) ), g_objGameDataSet.GetStr ( 10056 ), MB_OK ) ;
//							::MessageBox ( NULL, "人物注册成功\n请登陆游戏","成功", MB_OK ) ;
							SetLoginEffectPos(m_bLogin);
							m_DlgLogin.ShowWindow ( SW_SHOW ) ;
							DXSetSoundVolume(75);
							m_DlgLogin.SetCurLoginMode(2);
							m_DlgLogin.SetFocus() ;	
							m_DlgLogin.m_LoginPasswordEdt.SetFocus();							
							m_bWait = false ;
						}
					}
				}
				break ;
			case ( _STATUS_WAITING ):
				{
					GameScreenMsg(g_objGameDataSet.GetStr ( 10057 ) ) ;//"与服务器交互中,请稍候。。。");//
					g_objNetwork.ProcessNetMsg();
				}
				break;

			case ( _STATUS_NORMAL ):
				{
					if (!BeginShow())
						break;

					GameShow() ;

					g_objHero.ShowHelpTips(50,72,_SCR_WIDTH - 230,0xF7E38C,0x3e000080);
					
					g_objGameMsg.Show() ;	
					
					m_DlgMain.Show();

					
					
					if ( m_DlgTask.m_bShow )
						m_DlgTask.Show () ;
					
					if ( m_DlgConfirm.m_bShow )
						m_DlgConfirm.Show () ;
					
					ShowAniCursor(m_szCursorAni);
					
/*
					// 一直显示的提示文本
					CMySize FontSize;
					CMyBitmap::GetFontSize(FontSize);
					
					// 判断是否有一直显示的信息
					if (m_bProgressHold)
					{
						char strHoldMessage[256];
						
						switch ( m_dwProgressNumber )
						{
						case 0: //LIFE STATIC
							sprintf( strHoldMessage, "HP:%d/%d", g_objHero.GetData(CPlayer::_PLAYER_LIFE), g_objHero.GetMaxLife() );
							break ;
						case 1:  //MANA STATIC
							if (g_objHero.GetMaxMana()<=0)
								sprintf( strHoldMessage, "HP:%d/%d", g_objHero.GetData(CPlayer::_PLAYER_LIFE), g_objHero.GetMaxLife() );
							else
								sprintf( strHoldMessage, "MP:%d/%d", g_objHero.GetData(CPlayer::_PLAYER_MANA), g_objHero.GetMaxMana() );						
							break ;
						case 2: //FORCE STATIC
							sprintf( strHoldMessage, "SP:%d/%d", g_objHero.GetPhysicalForce(), g_objHero.GetMaxPhysicalForce() );						
							break ;					
						case 3: //xp
							sprintf(strHoldMessage,"XP:%d/%d",g_objHero.GetXP(),g_objHero.GetMaxXP());
							break;
						}
						
						
						if (0 != m_HoldX && 0 != m_HoldY)
						{
							if(m_dwProgressNumber == 0 
								|| (m_dwProgressNumber == 1&& g_objHero.GetMana() <= 0) )		//hp 特殊处理
							{
								char szCurHp[16] = "";
								char szMaxHp[16] = "";
								char szRealMaxHp[16] = "";
								sprintf( szCurHp, "HP:%d/", g_objHero.GetData(CPlayer::_PLAYER_LIFE));
								sprintf( szMaxHp, "%d", g_objHero.GetMaxLife());
								if (g_objHero.GetMaxLifePercent() > 0 && g_objHero.GetMaxLifePercent() < 1000) 
									sprintf( szRealMaxHp, "/%d",g_objHero.GetMaxLife()*1000/g_objHero.GetMaxLifePercent());
								int nMsgLength = strlen(szCurHp) + strlen(szMaxHp) + strlen(szRealMaxHp);
								
								int nOffset = nMsgLength * CHAR_WIDTH/2-10;
								if ((m_StaticPoint[m_dwProgressNumber].x - nOffset - 5) < 0) nOffset = m_StaticPoint[m_dwProgressNumber].x - 5;
								g_objGameDataSet.ShowInfoBack(m_StaticPoint[m_dwProgressNumber].x - nOffset - 5,
									m_StaticPoint[m_dwProgressNumber].y -1 - 7,	
									nMsgLength*CHAR_WIDTH + 10,
									FontSize.iHeight+1+ 10) ;
								
								CMyBitmap::ShowString ( m_StaticPoint[m_dwProgressNumber].x - nOffset,
									m_StaticPoint[m_dwProgressNumber].y - 2,
									0xffffff,
									szCurHp) ;
								
								if (g_objHero.GetMaxLifePercent() > 0 &&  g_objHero.GetMaxLifePercent() < 1000)  
									CMyBitmap::ShowString ( m_StaticPoint[m_dwProgressNumber].x - nOffset + strlen(szCurHp) * CHAR_WIDTH,
									m_StaticPoint[m_dwProgressNumber].y - 2,
									0xff0000,
									szMaxHp) ;
								else
									CMyBitmap::ShowString ( m_StaticPoint[m_dwProgressNumber].x - nOffset + strlen(szCurHp) * CHAR_WIDTH,
									m_StaticPoint[m_dwProgressNumber].y - 2,
									0xffffff,
									szMaxHp) ;
							}
							else
							{
								g_objGameDataSet.ShowInfoBack( m_HoldX - 5,
									m_HoldY - 5,	
									strlen(strHoldMessage)*CHAR_WIDTH + 10,
									FontSize.iHeight+1+ 10) ;
							
								CMyBitmap::ShowString ( m_HoldX,
									m_HoldY +1,
									0xffffff,
									strHoldMessage) ;
							}
						}
					}*/

					
					if ( g_bPickUp )
						CMyShellDlg::ShowPickUpIcon () ;
					else if ( !g_bPickUp && g_bMouseMoveIn )
						CMyShellDlg::ShowMsgDlg () ;
					
	

					if ( m_bLbuttonDown || m_bRbuttonDown)
					{
						CMyShellDlg::ProcessMouseHold() ;
					}
			/*			else
						{
							if ( m_bLbuttonHold || m_bRbuttonHold)
							{
								CMyShellDlg::ProcessMouseHold() ;
							}
						}

					if ( m_bAutoMagicAtk )
					{
						CPlayer* pPlayer = g_objPlayerSet.GetFocusPlayer() ;
						if ( pPlayer != NULL && m_AutoTargetID == pPlayer->GetID() )
						{
							if ( pPlayer->IsDead () )
							{
								m_bAutoMagicAtk = false ;
							}
							else if ( !g_objHero.IsMagicAttackBusy() )
							{
								g_objHero.MagicAttack( m_AutoMagicID, m_AutoTargetID ) ;
							}
						}
						else
						{
							m_bAutoMagicAtk = false ;
						}
					}*/

					CMyPos pPosWorld,pPosBg;
					g_objGameMap.Screen2World(m_EffectExItemPos.x,m_EffectExItemPos.y , pPosWorld.x, pPosWorld.y);
					g_objGameMap.World2Bg(pPosWorld.x, pPosWorld.y, pPosBg.x, pPosBg.y );	
					m_EffectExItem.Process();
					m_EffectExItem.Show(pPosBg);




					EndShow ( ) ;
				}
				break ;

			default:
				 nIDEvent = 1 ;
				 break ;
			}
		}

		bInLoop = false;
	}
	CDialog::OnTimer(nIDEvent);
}

void CMyShellDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
	m_bLbuttonDown = false ;
	m_bRbuttonDown = false ;
	
	m_dwLastBtnDTime = 0 ;

	CDialog::OnLButtonUp(nFlags, point);
}

void CMyShellDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	if ( m_bIconFix )
	{
		m_bIconFix = false ;
		return ;
	}

	CMyShellDlg::SetFocus();
	
	if (m_DlgMain.m_DlgEmotion.m_bShow) 
		m_DlgMain.m_DlgEmotion.EnableWindow (false);

	// capture the screen name
	if ( strlen( g_objGameMsg.GetCaptureName () ) > 0 )
	{
		m_DlgMain.m_DlgTalk.m_TalkNameEdt.SetWindowText ( g_objGameMsg.GetCaptureName () ) ;
		return ;
	}

	if (g_objHero.IsDead() && !g_objHero.TestStatus(USERSTATUS_GHOST))
		return;

	if (_STATUS_WAITING == g_uStatus)
		return;

	CMyShellDlg::SetFocus () ;
	extern void	MouseSet (int x, int y, int event);
	MouseSet(point.x, point.y, 1);

	int nAmount = g_objHero.GetTeamMemberAmount();
	if (nAmount>1)
	{
		for(int i=0;i<nAmount;i++)
		{
			if (m_DlgMain.m_DlgGroup.m_ImgRect[i].PtInRect(point))
				return;
		}
	}

	if(g_objHero.TestStatus(USERSTATUS_GHOST))
	{
		if (m_uCmd == CMD_TEMJOIN)
		{
			DWORD dwNFlag = PLAYER_NORMAL;
			dwNFlag |= PLAYER_INCLUDEDEAD;
			CPlayer* pMember = g_objPlayerSet.GetFocusPlayer(dwNFlag);
			if (pMember && pMember->GetRoleType() == _ROLE_PLAYER)
			{
				g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(10705));
				m_uCmd = CMD_NORMAL;
				if (m_DlgMain.m_DlgGroup.m_bShow)
					m_DlgMain.m_DlgGroup.EnableWindow(false);
				return;
			}
		}
		int nPosX, nPosY;
		g_objGameMap.Mouse2Cell(point.x, point.y, nPosX, nPosY);
		g_objHero.Walk(nPosX, nPosY);
		CMyShellDlg::SetMouseMove(nPosX,nPosY);
		m_bLbuttonDown = true ;
		return;
	}

	DWORD dwFlag = PLAYER_NORMAL;
	if (CMD_ATK == dwFlag || CMD_NORMAL == dwFlag)
		dwFlag |= PLAYER_MONSTERPRI;
	else
		dwFlag |= PLAYER_PLAYERPRI;

	CPlayer* pTarget = g_objPlayerSet.GetFocusPlayer(dwFlag);
	if (pTarget == NULL && m_uCmd == CMD_USEITEMTO && m_DlgMain.m_DlgGroup.GetMouseInMember())
	{
		pTarget = g_objPlayerSet.GetPlayer(m_DlgMain.m_DlgGroup.GetMouseInMember());
		if (pTarget )
		{
			CItem* pItem = g_objHero.GetItem(m_IconRealID);
			if (pItem)
			{
				g_objHero.UseItem(pItem->GetID(),pTarget->GetID());
				return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -