www.pudn.com > XmudOSr.rar > MainFunction.cpp
#include "stdafx.h" #include "XMudClient.h" #include "MainWnd.h" #include "MainScreen.h" #include "3DFunction.h" #include "faceplate.h" #include "3DSound.h" #include "MenuCreateNew.h" #include "NpcInfo.h" extern CString g_szInputMsg; extern int g_nSelStart; extern int g_nSelEnd; extern int g_nInputMsgPos; extern D3DVECTOR g_lightgammer; extern LPDIRECT3DRMLIGHT g_parallel; extern rmfullglobals myglobs; extern RECT rc3DMainFace; extern CListquicktalklist; extern CStringList g_strlistMesssage; extern CStringList g_szInputMsgList; extern CStringList g_strlistOnline; extern CList npcskilllist; extern CList chatchannellist; extern CStringList g_strlistChannel; extern CList playerlist; extern CList equiplist; extern CList equiprentlist; //extern CStringList g_equiprentlist; extern TOldMsg m_OldMsg; extern CList skilllist; // 技能信息链表 // Nuke +1 extern CList npcAsklist; extern SOCKET hLCltForRSvrSock; extern void SaveConfigFile(void); //鼠标左键按下 void CMainScreen::GameMainOnLButtonDown(POINT Pos) { if( nMouseState == MouseNone ) { nMouseState = LButtonDown; if(PtInRect(&rc3DMainFace,Pos))//在3D视区内 { nMouseWorkField = _3DField; D3DOnLButtonDown(Pos); return; } else if(PtInRect(&rcSysUseField, Pos))//在系统功能区 { nMouseWorkField = SysUseField; SysUseLButtonDown(Pos); mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; return; } else if(PtInRect(&rcUserUseField, Pos))//在用户功能区 { nMouseWorkField = UserUseField; UserUseLButtonDown(Pos); return; } else if(PtInRect(&rcFirstField, Pos))//在第一滚动条区 { nMouseWorkField = FirstField; FirstFieldLButtonDown(Pos); return; } else if(PtInRect(&rcSecondField, Pos))//在第二滚动条区 { nMouseWorkField = SecondField; SecondFieldLButtonDown(Pos); return; } else if(PtInRect(&rcTalkMessField, Pos))//在对话信息区 { nMouseWorkField = TalkMessField; if(mTalkFD.mDragBar.LButtonDown(Pos)) { mTalkFD.bReDraw[0] = TRUE; mTalkFD.bReDraw[1] = TRUE; } return; } else if(PtInRect(&rcInputMsgField, Pos))//在命令输入框区 { nMouseWorkField = InputMsgField; InputMsgFieldLButtonDown(Pos); return; } else if(PtInRect(&rcClearScreen, Pos))//清屏按钮 { bClearScrRed = 1; nMouseWorkField = ClearScreenField; mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; } } } //系统功能区鼠标按下 void CMainScreen::SysUseLButtonDown(POINT Pos) { D3DVECTOR pSysSoundPos = D3DVECTOR(15,0,15); pSysSoundPos.x += (rand() % 2 == 0 ? (rand() % 250) : -(rand() % 250)); pSysSoundPos.z += (rand() % 2 == 0 ? (rand() % 250) : -(rand() % 250)); if(PtInRect(&mSysFD.rcCommunicate,Pos)) { mSysFD.whatBtnDown = BtnCommunicate; //频道按钮按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_communicate; Send(hLCltForRSvrSock,szGetChannel); mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcAdventure,Pos)) { mSysFD.whatBtnDown = BtnAdventure; //冒险按钮按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_adventure; mFirstFD.nShowState = SHOWSKILL; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcPractice,Pos)) { mSysFD.whatBtnDown = BtnPractice; //武术按钮按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_practice; mFirstFD.nShowState = SHOWSKILL; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcBasicSkill,Pos)) { mSysFD.whatBtnDown = BtnBasicSkill; //道具按钮是否按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_basicskill; mFirstFD.nShowState = SHOWEQUIP; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcOrganize,Pos)) { mSysFD.whatBtnDown = BtnOrganize; //组织按钮是否按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_organize; // mFirstFD.nShowState = SHOWEQUIP; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcFamily,Pos)) { mSysFD.whatBtnDown = BtnFamily; //门派按钮是否按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_family; // mFirstFD.nShowState = SHOWEQUIP; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcEmotion,Pos)) { mSysFD.whatBtnDown = BtnEmotion; //表情按钮按下 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_emotion; mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } /* else if(PtInRect(&mSysFD.rcHappyface,Pos)) { SetRect(&mSecondFD.rcGreenUp,299,601,356,621); //橘色按钮资源位置 SetRect(&mSecondFD.rcGreenDown, 0,627, 57,647); //橘色按钮按下 mSysFD.whatBtnDown = BtnHappyface;//高兴表情 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mSecondFD.nKindState = ETK_smile; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcAngryface,Pos)) { SetRect(&mSecondFD.rcGreenUp,356,601,413,621); //红色按钮资源位置 SetRect(&mSecondFD.rcGreenDown, 57,627,114,647); //红色按钮按下 mSysFD.whatBtnDown = BtnAngryface;//愤怒表情 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mSecondFD.nKindState = ETK_angry; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcBuleface,Pos)) { SetRect(&mSecondFD.rcGreenUp,413,601,470,621); //蓝色按钮资源位置 SetRect(&mSecondFD.rcGreenDown,114,627,171,647); //蓝色按钮按下 mSysFD.whatBtnDown = BtnBuleface;//忧伤表情 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mSecondFD.nKindState = ETK_cry; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } else if(PtInRect(&mSysFD.rcOthereface,Pos)) { SetRect(&mSecondFD.rcGreenUp,470,601,527,621); //绿色按钮资源位置 SetRect(&mSecondFD.rcGreenDown,171,627,228,647); //绿色按钮按下 mSysFD.whatBtnDown = BtnOtherface;//其他表情 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mSecondFD.nKindState = ETK_other; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } */ else if(PtInRect(&mSysFD.rcOption,Pos)) { mSysFD.whatBtnDown = BtnOption;//系统按钮 PlaySoundDS(PRESSBUTTON,pSysSoundPos,0); mUserFD.nSysStatus = UBS_system; // Spock +1 g_szInputMsg = "Save"; g_nSelStart = 0; g_nSelEnd = 0; g_nInputMsgPos = g_szInputMsg.GetLength(); bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } } static long LastBtnDown=-1; void CMainScreen::UserFDDraw() { RECT rcSour; int nTempStatus; { if(mUserFD.nSysStatus>=0){ bltObject(rcUserUseField.left, rcUserUseField.top, myglobs.g_lpDDSGameMenu, &rcUserUseField, DDBLTFAST_SRCCOLORKEY); nTempStatus = (mUserFD.nSysStatus >> 8) - 1; rcSour = mUserFD.rcOrgBtn[nTempStatus]; rcSour.left -= 2; rcSour.top -= 2; rcSour.right += (mUserFD.nCount[nTempStatus] - 1) * UB_XSPACE; bltObject(rcUserUseField.left, rcUserUseField.top, myglobs.g_lpDDSGameMenu, &rcSour, DDBLTFAST_SRCCOLORKEY); } switch(LastBtnDown){ case BtnCommunicate: bltObject(mSysFD.rcCommunicate.left, mSysFD.rcCommunicate.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcCommunicate, DDBLTFAST_SRCCOLORKEY); break; case BtnAdventure: bltObject(mSysFD.rcAdventure.left, mSysFD.rcAdventure.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcAdventure, DDBLTFAST_SRCCOLORKEY); break; case BtnPractice: bltObject(mSysFD.rcPractice.left, mSysFD.rcPractice.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcPractice, DDBLTFAST_SRCCOLORKEY); break; case BtnBasicSkill: bltObject(mSysFD.rcBasicSkill.left, mSysFD.rcBasicSkill.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcBasicSkill, DDBLTFAST_SRCCOLORKEY); break; case BtnOrganize: bltObject(mSysFD.rcOrganize.left, mSysFD.rcOrganize.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcOrganize, DDBLTFAST_SRCCOLORKEY); break; case BtnFamily: bltObject(mSysFD.rcFamily.left, mSysFD.rcFamily.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcFamily, DDBLTFAST_SRCCOLORKEY); break; case BtnEmotion: bltObject(mSysFD.rcEmotion.left, mSysFD.rcEmotion.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcEmotion, DDBLTFAST_SRCCOLORKEY); break; case BtnOption: bltObject(mSysFD.rcOption.left, mSysFD.rcOption.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcOption, DDBLTFAST_SRCCOLORKEY); break; default: break; } switch(mSysFD.whatBtnDown) { case BtnCommunicate: bltObject(mSysFD.rcCommunicate.left, mSysFD.rcCommunicate.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcCommunicateDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnAdventure: bltObject(mSysFD.rcAdventure.left, mSysFD.rcAdventure.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcAdventureDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnPractice: bltObject(mSysFD.rcPractice.left, mSysFD.rcPractice.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcPracticeDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnBasicSkill: bltObject(mSysFD.rcBasicSkill.left, mSysFD.rcBasicSkill.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcBasicSkillDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnOrganize: bltObject(mSysFD.rcOrganize.left, mSysFD.rcOrganize.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcOrganizeDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnFamily: bltObject(mSysFD.rcFamily.left, mSysFD.rcFamily.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcFamilyDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnEmotion: bltObject(mSysFD.rcEmotion.left, mSysFD.rcEmotion.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcEmotionDownSource, DDBLTFAST_SRCCOLORKEY); break; case BtnOption: bltObject(mSysFD.rcOption.left, mSysFD.rcOption.top, myglobs.g_lpDDSGameMenu, &mSysFD.rcOptionDownSource, DDBLTFAST_SRCCOLORKEY); break; default: break; } if(mUserFD.nWhatBtnDown>=0){ RECT rcTmp,rcTmpSour; nTempStatus = (mUserFD.nSysStatus >> 8) - 1; rcTmpSour = mUserFD.rcOrgBtn[nTempStatus]; rcTmpSour.left += (mUserFD.nWhatBtnDown * UB_XSPACE); rcTmpSour.right += (mUserFD.nWhatBtnDown * UB_XSPACE); switch(mUserFD.nStatus) { case UB_mousedown: rcTmpSour.top -= UB_HEIGHT + 6; rcTmpSour.bottom -= UB_HEIGHT + 6; case UB_mouseon: rcTmpSour.top -= UB_HEIGHT + 6; rcTmpSour.bottom -= UB_HEIGHT + 6; case UB_mousenone: break; default: mUserFD.nStatus = UB_mousenone; mUserFD.nWhatBtnDown = UB_none; return; } rcTmp = mUserFD.rcBtns[mUserFD.nWhatBtnDown]; bltObject(rcTmp.left, rcTmp.top, myglobs.g_lpDDSGameMenu, &rcTmpSour, DDBLTFAST_SRCCOLORKEY); } if(bClearScrRed==1){ bltObject(rcClearScreen.left, rcClearScreen.top, myglobs.g_lpDDSGameMenu, &rcClearScreenDownSource, DDBLTFAST_SRCCOLORKEY); }else if(bClearScrRed==2){ bltObject(rcClearScreen.left, rcClearScreen.top, myglobs.g_lpDDSGameMenu, &rcClearScreenOnSource, DDBLTFAST_SRCCOLORKEY); }else{ bltObject(rcClearScreen.left, rcClearScreen.top, myglobs.g_lpDDSGameMenu, &rcClearScreen, DDBLTFAST_SRCCOLORKEY); } } } void CMainScreen::UserUseLButtonDown(POINT Pos) { UserBtnMake(2); CPlayerInfo *lpPlayerInfo; lpPlayerInfo = playerlist.GetHead(); BOOL bCanReturn = FALSE; int nWhatBtn = mUserFD.nSysStatus|mUserFD.nWhatBtnDown; switch(nWhatBtn) { case UB_joinchannel: g_szInputMsg = "JoinChannel "; break; case UB_channel: g_szInputMsg = "Channel"; break; case UB_talk: g_szInputMsg = "Talk "; break; case UB_shout: g_szInputMsg = "Shout "; break; case UB_tell: g_szInputMsg = "Tell "; break; case UB_who_l: g_szInputMsg = "Who-l"; break; case UB_who: g_szInputMsg = "Who"; break; case UB_leavechannel: g_szInputMsg = "LeaveChannel"; break; case UB_ask: g_szInputMsg = "Ask "; g_szInputMsg += m_OldMsg.szAsk; break; case UB_look: g_szInputMsg = "Look "; break; case UB_apprentice: g_szInputMsg = "Apprentice"; break; case UB_skill: g_szInputMsg = "Skill"; break; case UB_drill: case UB_fight: g_szInputMsg = "Fight"; break; case UB_kill: g_szInputMsg = "Kill"; break; case UB_dazuo: g_szInputMsg = "DaZuo "; g_szInputMsg += m_OldMsg.szDaZuo; break; case UB_tuna: g_szInputMsg = "TuNa "; g_szInputMsg += m_OldMsg.szTuNa; break; case UB_yungong: g_szInputMsg = "YunGong "; g_szInputMsg += m_OldMsg.szYunGong; break; case UB_mapping: g_szInputMsg = "Mapping "; break; case UB_escape: g_szInputMsg = "Escape "; break; case UB_restart: g_szInputMsg = "Restart"; break; case UB_use: g_szInputMsg = "Use "; g_szInputMsg += m_OldMsg.szUse; break; case UB_watch: g_szInputMsg = "Look "; g_szInputMsg += m_OldMsg.szLook; break; case UB_give: g_szInputMsg = "Give "; g_szInputMsg += m_OldMsg.szGive; break; case UB_get: g_szInputMsg = "Get "; g_szInputMsg += m_OldMsg.szGet; break; case UB_drop: g_szInputMsg = "Drop "; g_szInputMsg += m_OldMsg.szDrop; break; case UB_arm: g_szInputMsg = "Arm "; g_szInputMsg += m_OldMsg.szArm; break; case UB_unarm: g_szInputMsg = "Unarm "; g_szInputMsg += m_OldMsg.szUnArm; break; case UB_practice: g_szInputMsg = "Practice "; g_szInputMsg += m_OldMsg.szPractice; break; case UB_jointeam: g_szInputMsg = "JoinTeam "; break; case UB_leaveteam: g_szInputMsg = "LeaveTeam"; break; case UB_who_t: g_szInputMsg = "Who-t"; break; case UB_format: g_szInputMsg = "Format "; g_szInputMsg += m_OldMsg.szFormat; break; case UB_unformat: g_szInputMsg = "Unformat"; break; case UB_assign: g_szInputMsg = "Assign "; g_szInputMsg += m_OldMsg.szAssign; break; case UB_cancel: g_szInputMsg = "Cancel "; g_szInputMsg += m_OldMsg.szCancel; break; case UB_newleader: g_szInputMsg = "NewLeader "; break; case UB_newfamily: g_szInputMsg = "NewFamily "; break; case UB_newnpc: g_szInputMsg = "NewNPC "; break; case UB_setskill: g_szInputMsg = "SetSkill "; break; case UB_cheer: SetRect(&mSecondFD.rcGreenUp,470,601,527,621); SetRect(&mSecondFD.rcGreenDown,171,627,228,647); mSecondFD.nKindState = ETK_smile; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; return; case UB_angry: SetRect(&mSecondFD.rcGreenUp,356,601,413,621); SetRect(&mSecondFD.rcGreenDown, 57,627,114,647); mSecondFD.nKindState = ETK_angry; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; return; case UB_sadness: SetRect(&mSecondFD.rcGreenUp,413,601,470,621); SetRect(&mSecondFD.rcGreenDown,114,627,171,647); mSecondFD.nKindState = ETK_cry; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; return; case UB_happy: SetRect(&mSecondFD.rcGreenUp,299,601,356,621); SetRect(&mSecondFD.rcGreenDown, 0,627, 57,647); mSecondFD.nKindState = ETK_other; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; return; case UB_stop: g_szInputMsg = "Exit"; break; case UB_music: g_szInputMsg = m_OldMsg.szMusic; break; case UB_addlight: g_lightgammer.x += 0.2f; g_lightgammer.y += 0.2f; g_lightgammer.z += 0.2f; g_parallel->SetColorRGB( g_lightgammer.x,g_lightgammer.y,g_lightgammer.z); SaveConfigFile(); return; case UB_sublight: g_lightgammer.x -= 0.2f; g_lightgammer.y -= 0.2f; g_lightgammer.z -= 0.2f; g_parallel->SetColorRGB( g_lightgammer.x,g_lightgammer.y,g_lightgammer.z); SaveConfigFile(); return; case UB_switchport: g_szInputMsg = "SwitchPort"; break; case UB_acceptfight: g_szInputMsg = "AcceptFight"; break; case UB_rejectfight: g_szInputMsg = "RejectFight"; break; default: return; } g_nSelStart = 0; g_nSelEnd = 0; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; if(g_szInputMsg[g_szInputMsg.GetLength()-1] != ' ') bCanReturn = TRUE; g_nSelStart = g_szInputMsg.Find(' ')+1; g_nSelEnd = g_szInputMsg.GetLength(); if((g_nSelStart == 0)||(g_nSelStart > g_nSelEnd)) g_nSelStart = g_nSelEnd; g_nInputMsgPos = g_szInputMsg.GetLength(); if(mUserFD.nWhatBtnDown == UB_yungong) { g_nInputMsgPos = 8; g_nSelStart = 8; g_nSelEnd = g_szInputMsg.Find(' ',8); } if((GetAsyncKeyState(VK_CONTROL)&0x8000)&&(bCanReturn)) { PostMessage(myglobs.hWndMain, WM_KEYDOWN, (WPARAM)VK_RETURN, 0); PostMessage(myglobs.hWndMain, WM_KEYUP, (WPARAM)VK_RETURN, 0); } } void CMainScreen::FirstFieldLButtonDown(POINT Pos) { if(!mFirstFD.mDragBar.LButtonDown(Pos)){ for(int i=0;i<8;i++) if(PtInRect(&mFirstFD.rcBars[i], Pos)) break; if(i == 8) return; i += mFirstFD.mDragBar.nFirstPos; if(i >= mFirstFD.mDragBar.GetCount()) return; DoClickOneFieldFunction(i); mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } else { mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } } void CMainScreen::SecondFieldLButtonDown(POINT Pos) { if(mSecondFD.mDragBar.LButtonDown(Pos)){ mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; }else { RECT rcTmp; for(int i=0;i<27;i++){ SetRect(&rcTmp,9,373,66,393); rcTmp.top += (i/3)*SNB_HEIGHT; rcTmp.bottom += (i/3)*SNB_HEIGHT; rcTmp.left += (i%3)*SNB_WIDTH; rcTmp.right += (i%3)*SNB_WIDTH; if(PtInRect(&rcTmp, Pos)) break; } if(i == 27) return; i += mSecondFD.mDragBar.nFirstPos * 3; if(i >= mSecondFD.nEmoteCount) return; bltObject(rcTmp.left,rcTmp.top, myglobs.g_lpDDSGameMenu, &mSecondFD.rcGreenDown, DDBLTFAST_SRCCOLORKEY); rcTmp.left += 5; rcTmp.right -= 5; rcTmp.top += 3+3; rcTmp.bottom -= 2; TEmote * lpEmote = listCurEmote.GetAt(listCurEmote.FindIndex(i)); CString szEmote = (mSecondFD.nShowState == EMT_SHOW_CHINESE)? lpEmote->szCEmote : lpEmote->szEmote; DrawGameString((char *)(LPCSTR)szEmote ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(0,0,0) ,RGB(0,0,0),TRUE); rcTmp.left --; rcTmp.right --; rcTmp.top --; rcTmp.bottom --; DrawGameString((char *)(LPCSTR)szEmote ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(255,248,122) ,RGB(0,0,0),TRUE); mSecondFD.nSelect = i - mSecondFD.mDragBar.nFirstPos * 3; BOOL bReturn = FALSE; g_szInputMsg = CString(":") + lpEmote->szEmote; g_szInputMsg += " "; mSecondFD.szEmote = g_szInputMsg; mSecondFD.nType = lpEmote->nType; if(mSecondFD.nType & EMT_HAVE_NONAME) bReturn = TRUE; if(GetAsyncKeyState(VK_SHIFT) & 0x8000)//if Shift Down { if( mSecondFD.nType & EMT_HAVE_SELF) { g_szInputMsg += "me"; bReturn = TRUE; } else bReturn = FALSE; } g_nSelStart = 0; g_nSelEnd = 0; g_nInputMsgPos = g_szInputMsg.GetLength(); bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; if((GetAsyncKeyState(VK_CONTROL) & 0x8000)&&(bReturn))//if Ctrl Down { PostMessage(myglobs.hWndMain, WM_KEYDOWN, (WPARAM)VK_RETURN, 0); PostMessage(myglobs.hWndMain, WM_KEYUP, (WPARAM)VK_RETURN, 0); } mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } return; } int GetCursorPos(int x) { int nCurLen, nStrLen; int nCurPos; CString strLeft; bool bChinaChar; nStrLen = g_szInputMsg.GetLength(); nCurLen = GetStrWidth(g_szInputMsg, TRUE); x -= 5; if( x >= nCurLen ) return nStrLen; else if(x <= 0) return 0; nCurPos = x * nStrLen / nCurLen; strLeft = g_szInputMsg.Left(nCurPos); nCurLen = GetStrWidth(strLeft, TRUE); if(nCurLen > x) { do { nCurPos --; strLeft = g_szInputMsg.Left(nCurPos); nCurLen = GetStrWidth(strLeft, TRUE); }while(nCurLen > x); } else { do { nCurPos ++; strLeft = g_szInputMsg.Left(nCurPos); nCurLen = GetStrWidth(strLeft, TRUE); }while(nCurLen < x); nCurPos--; } bChinaChar = false; for(x=0;x 0) pos--; ch = g_szInputMsg.GetAt(pos); if(IsChar(ch)) { do { ch = g_szInputMsg.GetAt(pos); if( ! IsChar(ch)) { pos++; break; } pos--; } while(pos >= 0); } else if(IsDBCSLeadByte(ch)) { do { ch = g_szInputMsg.GetAt(pos); if( ! IsDBCSLeadByte(ch)) { pos++; break; } pos--; } while(pos >= 0); } if(pos < 0) pos = 0; g_nSelStart = pos; ch = g_szInputMsg.GetAt(pos); pos++; if( pos >= g_szInputMsg.GetLength()) { }else if(IsChar(ch)){ do { ch = g_szInputMsg.GetAt(pos); pos++; if( ! IsChar(ch)){ pos--; break; } } while(pos < g_szInputMsg.GetLength()); }else if(IsDBCSLeadByte(ch)){ do { ch = g_szInputMsg.GetAt(pos); pos++; if( ! IsDBCSLeadByte(ch)) { pos--; break; } } while(pos < g_szInputMsg.GetLength()); } g_nSelEnd = pos; } void CMainScreen::InputMsgFieldLButtonDown(POINT Pos) { nMouseDownPos = g_nInputMsgPos = GetCursorPos(Pos.x); g_nSelStart = g_nSelEnd = 0; if(GetAsyncKeyState(VK_CONTROL)&0x8000)//if Ctrl down GetWord(g_nInputMsgPos); bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; return; } extern BOOL g_Clear3DMessage[2]; void CMainScreen::GameMainOnLButtonUp(POINT Pos) { if(( nMouseState == LButtonDown )||( nMouseState == LButtonDrag )) { nMouseState = MouseNone; switch(nMouseWorkField) { case FieldUnknown: break; case FirstField: if(mFirstFD.mDragBar.LButtonUp(Pos)){ mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } break; case SecondField: SecondFieldLButtonUp(Pos); break; case _3DField: D3DOnLButtonUp(Pos); break; case SysUseField: SysUseLButtonUp(Pos); mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; break; case UserUseField: UserBtnMake(1); break; case ClearScreenField: if(PtInRect(&rcClearScreen,Pos)) { bClearScrRed = 2; g_strlistMesssage.RemoveAll(); g_Clear3DMessage[0]=TRUE; g_Clear3DMessage[1]=TRUE; mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; } break; case InputMsgField: break; case TalkMessField: if(mTalkFD.mDragBar.LButtonUp(Pos)){ mTalkFD.bReDraw[0] = TRUE; mTalkFD.bReDraw[1] = TRUE; } break; default: break; } nMouseWorkField = FieldUnknown; } } void CMainScreen::SecondFieldLButtonUp(POINT Pos) { if(mSecondFD.mDragBar.LButtonUp(Pos)){ mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; }else if(mSecondFD.nSelect != -1){ RECT rcTmp; TEmote * lpEmote; SetRect(&rcTmp,9,373,66,393); int i = mSecondFD.nSelect; rcTmp.top += (i/3)*SNB_HEIGHT; rcTmp.bottom += (i/3)*SNB_HEIGHT; rcTmp.left += (i%3)*SNB_WIDTH; rcTmp.right += (i%3)*SNB_WIDTH; bltObject(rcTmp.left,rcTmp.top, myglobs.g_lpDDSGameMenu, &mSecondFD.rcGreenUp, DDBLTFAST_SRCCOLORKEY); lpEmote = listCurEmote.GetAt(listCurEmote.FindIndex(i+mSecondFD.mDragBar.nFirstPos * 3)); CString szEmote = (mSecondFD.nShowState == EMT_SHOW_CHINESE)? lpEmote->szCEmote : lpEmote->szEmote; rcTmp.left += 5; rcTmp.right -= 5; rcTmp.top += 2+3; rcTmp.bottom -= 3; DrawGameString((char *)(LPCSTR)szEmote ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(0,0,0) ,RGB(0,0,0),TRUE); rcTmp.left --; rcTmp.right --; rcTmp.top --; rcTmp.bottom --; DrawGameString((char *)(LPCSTR)szEmote ,&rcTmp ,DT_LEFT | DT_VCENTER ,RGB(255,248,122) ,RGB(0,0,0),TRUE); mSecondFD.nSelect = -1; mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } } void CMainScreen::SysUseLButtonUp(POINT Pos) { LastBtnDown = mSysFD.whatBtnDown; mSysFD.whatBtnDown = BtnNone; } void CMainScreen::GameMainOnLButtonDblClk(POINT Pos) { if(PtInRect(&rcInputMsgField, Pos)) { g_nInputMsgPos = GetCursorPos(Pos.x); GetWord(g_nInputMsgPos); bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; return; } } void CMainScreen::GameMainOnRButtonDown(POINT Pos) { if( nMouseState == MouseNone ) { nMouseState = RButtonDown; if(PtInRect(&rc3DMainFace,Pos)) { D3DOnRButtonDown(Pos); return; } } } void CMainScreen::GameMainOnRButtonUp(POINT Pos) { if(( nMouseState == RButtonDown )||( nMouseState == RButtonDrag )){ nMouseState = MouseNone; if(PtInRect(&rcInputMsgField,Pos)){ ShowIconMenu(); } } } int CMainScreen::UserOnWhatBtn(POINT Pos) { int i; RECT rcTmp; for(i=0;i > 8) - 1; if(i >= mUserFD.nCount[nTempStatus]) i = -1; return i; } void CMainScreen::UserBtnMake(int nStatus) { mUserFD.nStatus = nStatus; UserBtnMake(); } void CMainScreen::UserBtnMake() { if(mUserFD.nWhatBtnDown == UB_none) { mUserFD.nStatus = 0; return; } int nTempStatus = (mUserFD.nSysStatus >> 8) - 1; if(mUserFD.nWhatBtnDown >= mUserFD.nCount[nTempStatus]) { mUserFD.nWhatBtnDown = UB_none; return; } if(mUserFD.nStatus == UB_mousenone) mUserFD.nWhatBtnDown = UB_none; mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; } void CMainScreen::GameMainOnMouseMove(POINT Pos) { mSysFD.ThisBtnMove=BtnNone; switch(nMouseWorkField){ case FieldUnknown: if(nMouseState == MouseNone) { if(PtInRect(&mSysFD.rcHintNameField,Pos)){ if(PtInRect(&mSysFD.rcCommunicate,Pos)) { mSysFD.ThisBtnMove=BtnCommunicate; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcAdventure,Pos)) { mSysFD.ThisBtnMove=BtnAdventure; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcPractice,Pos)) { mSysFD.ThisBtnMove=BtnPractice; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcBasicSkill,Pos)) { mSysFD.ThisBtnMove=BtnBasicSkill; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcOrganize,Pos)) { mSysFD.ThisBtnMove=BtnOrganize; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcFamily,Pos)) { mSysFD.ThisBtnMove=BtnFamily; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcEmotion,Pos)){ mSysFD.ThisBtnMove=BtnEmotion; mSysFD.LastBtnTick=timeGetTime(); } else if(PtInRect(&mSysFD.rcOption,Pos)){ mSysFD.ThisBtnMove=BtnOption; mSysFD.LastBtnTick=timeGetTime(); } } else if(bClearScrRed){ if(PtInRect(&rcClearScreen,Pos)) break; bClearScrRed = 0; mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; }else if(mUserFD.nWhatBtnDown != UB_none){ if(PtInRect(&rcUserUseField, Pos)){ int i = UserOnWhatBtn( Pos ); if(i != mUserFD.nWhatBtnDown){ UserBtnMake(0); mUserFD.nWhatBtnDown = i; UserBtnMake(1); } break; } UserBtnMake(0); } if(PtInRect(&rcUserUseField, Pos)){ mUserFD.nWhatBtnDown = UserOnWhatBtn(Pos); UserBtnMake(1); } else if(PtInRect(&rcClearScreen,Pos)) { bClearScrRed = 2; mUserFD.bReDraw[0] = TRUE; mUserFD.bReDraw[1] = TRUE; } } break; case FirstField: if(mFirstFD.mDragBar.OnMouseMove(Pos)){ mFirstFD.bReDraw[0] = TRUE; mFirstFD.bReDraw[1] = TRUE; } break; case SecondField: if(mSecondFD.mDragBar.OnMouseMove(Pos)){ mSecondFD.bReDraw[0] = TRUE; mSecondFD.bReDraw[1] = TRUE; } break; case _3DField: break; case SysUseField: break; case UserUseField: break; case ClearScreenField: break; case InputMsgField: if(nMouseState == LButtonDrag){ g_nInputMsgPos = g_nSelStart = GetCursorPos(Pos.x); g_nSelEnd = nMouseDownPos; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } break; case TalkMessField: if(mTalkFD.mDragBar.OnMouseMove(Pos)) { mTalkFD.bReDraw[0] = TRUE; mTalkFD.bReDraw[1] = TRUE; } break; default: break; } } void CMainScreen::ShowIconMenu() { CMenu ContextMenu ; CPoint CursorPos ; CQuickTalk * lpQuickTalk; CQuickTalk m_QuickTalk; int i,j; if(!quicktalklist.IsEmpty()) quicktalklist.RemoveAll(); CFile file; if(!file.Open("QuickTalk.dat",CFile::modeReadWrite)) return; while(file.Read(&m_QuickTalk,sizeof(CQuickTalk))) { lpQuickTalk = new CQuickTalk; strcpy(lpQuickTalk->szTitle,m_QuickTalk.szTitle); strcpy(lpQuickTalk->szTalkMsg,"Talk "); strcat(lpQuickTalk->szTalkMsg,m_QuickTalk.szTalkMsg); quicktalklist.AddTail(lpQuickTalk); } file.Close(); GetCursorPos ( & CursorPos ) ; ContextMenu.CreatePopupMenu () ; j = quicktalklist.GetCount(); for(i=0;i szTitle ) ; } ContextMenu.AppendMenu ( MF_SEPARATOR); ContextMenu.AppendMenu ( MF_STRING , IDR_MAINFRAME + i + 1, "编辑聊天按钮" ) ; SetForegroundWindow (myglobs.hWndMain) ; ContextMenu.TrackPopupMenu ( TPM_RIGHTALIGN | TPM_RIGHTBUTTON, CursorPos.x , CursorPos.y , CWnd::FromHandle(myglobs.hWndMain), NULL ) ; return ; } void CMainScreen::ShowQuickMsg(int nIndex) { CQuickTalk * lpQuickTalk; if(quicktalklist.GetCount() == nIndex) { return; } if(quicktalklist.GetCount() < nIndex+1) return; lpQuickTalk = quicktalklist.GetAt(quicktalklist.FindIndex(nIndex)); if(g_szInputMsgList.GetCount() > MSG_PIECE_NUMBER){ g_szInputMsgList.AddTail(g_szInputMsgList.RemoveHead() = lpQuickTalk->szTalkMsg); }else{ g_szInputMsgList.AddTail(lpQuickTalk->szTalkMsg); } bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } CString GetENameFromOnline(CString MyString) { static CString NewString; BOOL bStart; long i,s; bStart=FALSE; for(i=0;i m_sCNAME; else if(!stricmp(g_szInputMsg.Left(4),"Arm ")) g_szInputMsg = CString("Arm ") + lpEquipInfo->m_sCNAME; else if(!stricmp(g_szInputMsg.Left(6),"Unarm ")) g_szInputMsg = CString("Unarm ") + lpEquipInfo->m_sCNAME; else if(!stricmp(g_szInputMsg.Left(5),"Drop ")) g_szInputMsg = CString("Drop ") + lpEquipInfo->m_sCNAME; else if(!stricmp(g_szInputMsg.Left(5),"Look ")) g_szInputMsg = CString("Look ") + lpEquipInfo->m_sCNAME; else if(!stricmp(g_szInputMsg.Left(9),"Practice ")) g_szInputMsg = CString("Practice ") + lpEquipInfo->m_sCNAME; else g_szInputMsg += CString(" ") + lpEquipInfo->m_sCNAME; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } break; case SHOWSKILL: { lpSkillInfo = skilllist.GetAt(skilllist.FindIndex(nIndex)); if(!stricmp(g_szInputMsg.Left(8),"Mapping ")) g_szInputMsg += CString(" ") + lpSkillInfo->m_sCNAME; else g_szInputMsg = CString("Learn ") + lpSkillInfo->m_sCNAME/* +CString(" 1")*/; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; bCanReturn = TRUE; } break; case SHOWCHANNEL: { g_szInputMsg = CString("JoinChannel ") + g_strlistChannel.GetAt(g_strlistChannel.FindIndex(nIndex)); bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; bCanReturn = TRUE; } break; case SHOWCHANNELUSER: { lpChatChannel = chatchannellist.GetAt(chatchannellist.FindIndex(nIndex)); if(g_szInputMsg.IsEmpty()) g_szInputMsg = CString("Tell ") + lpChatChannel->m_sENAME; else if (g_szInputMsg[0] == ':') { int pos; pos = g_szInputMsg.Find(' '); if(pos == -1) pos = g_szInputMsg.GetLength()-1; g_szInputMsg = g_szInputMsg.Left(pos+1); if(g_szInputMsg != mSecondFD.szEmote) { g_szInputMsg += lpChatChannel->m_sENAME; bCanReturn = TRUE; } else if(mSecondFD.nType & EMT_HAVE_TARGET) { g_szInputMsg += lpChatChannel->m_sENAME; bCanReturn = TRUE; } } else { int pos; pos = g_szInputMsg.Find(' '); if(pos == -1) { pos = g_szInputMsg.GetLength(); g_szInputMsg += ' '; } g_szInputMsg = g_szInputMsg.Left(pos+1); g_szInputMsg += lpChatChannel->m_sENAME; } bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } break; case SHOWNPCSKILL: { if(nIndex == 0)break; lpNpcSkillInfo = npcskilllist.GetAt(npcskilllist.FindIndex(nIndex)); g_szInputMsg = CString("Learn ") + lpNpcSkillInfo->m_sCNAME /*+ CString(" 1")*/; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; bCanReturn = TRUE; } break; case SHOWNPCEQUIP: break; case SHOWFRIEND: break; case SHOWALLONLINEUSERS: { CString MyString; MyString = g_strlistOnline.GetAt(g_strlistOnline.FindIndex(nIndex)); if(g_szInputMsg.IsEmpty()){ g_szInputMsg = CString("Tell ") + GetENameFromOnline(MyString); }else if (g_szInputMsg[0] == ':'){ int pos; pos = g_szInputMsg.Find(' '); if(pos == -1) pos = g_szInputMsg.GetLength()-1; g_szInputMsg = g_szInputMsg.Left(pos+1); if(g_szInputMsg != mSecondFD.szEmote){ g_szInputMsg += GetENameFromOnline(MyString); bCanReturn = TRUE; }else if(mSecondFD.nType & EMT_HAVE_TARGET){ g_szInputMsg += GetENameFromOnline(MyString); bCanReturn = TRUE; } }else{ int pos; pos = g_szInputMsg.Find(' '); if(pos == -1){ pos = g_szInputMsg.GetLength(); g_szInputMsg += ' '; } g_szInputMsg = g_szInputMsg.Left(pos+1); g_szInputMsg += GetENameFromOnline(MyString); } bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; } break; case SHOWNPCASK: lpNpcAskInfo = npcAsklist.GetAt(npcAsklist.FindIndex(nIndex)); g_szInputMsg = CString("Ask ") + lpNpcAskInfo->m_sCNAME; bChangeInputMsg[0] = TRUE; bChangeInputMsg[1] = TRUE; bCanReturn = TRUE; break; } if(bChangeInputMsg[0]||bChangeInputMsg[1]) { g_szInputMsg += " "; g_nSelStart = 0; g_nSelEnd = 0; g_nInputMsgPos = g_szInputMsg.GetLength(); if((GetAsyncKeyState(VK_CONTROL)&0x8000)&&(bCanReturn))//if Ctrl Down { PostMessage(myglobs.hWndMain, WM_KEYDOWN, (WPARAM)VK_RETURN, 0); PostMessage(myglobs.hWndMain, WM_KEYUP, (WPARAM)VK_RETURN, 0); } } }