📄 myshelldlg.cpp
字号:
#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
{
CMyShellDlg::StartGame () ;
m_bWait = true ;
g_dwLastTime = TimeGet() ;
}
}
if ( m_bWait )
{
GameScreenMsg(g_objGameDataSet.GetStr ( 10055 ) ) ;
}
}
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;
}
}
}
if (pTarget && (pTarget->GetRoleType() == _ROLE_CALL_PET || pTarget->GetRoleType() == _ROLE_MONSTER || pTarget->GetRoleType() == _ROLE_PLAYER || pTarget->GetRoleType() == _ROLE_HERO)) // interact command
{
int nHeroX, nHeroY;
g_objHero.GetPos(nHeroX, nHeroY);
int nTargetX, nTargetY;
pTarget->GetPos(nTargetX, nTargetY);
switch(m_uCmd)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -