www.pudn.com > 3D_OnlineGame_Humen.rar > MainScreen.h


// MainScreen.h: interface for the CMainScreen class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_MAINSCREEN_H__BEFA2100_5F8C_11D3_BA84_0000E8A021D8__INCLUDED_) 
#define AFX_MAINSCREEN_H__BEFA2100_5F8C_11D3_BA84_0000E8A021D8__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "DragBar.h" 
 
int  GetStrWidth(CString str, BOOL bUseMessageFont); 
 
enum FirstFDState 
{ 
	SHOWEQUIP = 1,  //裝備 
	SHOWSKILL,      //技能 
	SHOWCHANNEL,    //頻道 
	SHOWCHANNELUSER,//玩家 
	SHOWNPCSKILL,   //NPC技能 
	SHOWNPCEQUIP,   //NPC裝備 
	SHOWFRIEND,     //好友名單 
	SHOWALLONLINEUSERS, //線上名單 
	// Nuke +1 
	SHOWNPCASK,//詢問的關鍵字 
	SHOWRENTEQUIP,  // 
}; 
 
typedef struct tagOldMsg 
{ 
	CString szAsk; 
	CString szDaZuo; 
	CString szTuNa; 
	CString szYunGong; 
	CString szUse; 
	CString szLook; 
	CString szGive; 
	CString szGive2; 
	CString szGet; 
	CString szDrop; 
	CString szArm; 
	CString szUnArm; 
	CString szPractice; 
	CString szFormat; 
	CString szAssign; 
	CString szCancel; 
 
	CString szTell; 
	CString szLearn; 
//	CString szEat; 
//	CString szDrink; 
	CString szEmote; 
	CString szMusic; 
	CString szMapping; 
	CString szMapping2; 
	tagOldMsg() 
	{ 
		szMusic = "MusicOFF"; 
	} 
}TOldMsg; 
 
class CMainScreen   
{ 
public://系統總的信息區 
	RECT rcMainSurfaceSource;//全屏資源 
	enum MouseInField {//鼠標當前所在區域 
		FieldUnknown, 
		_3DField, 
		FirstField, 
		SecondField, 
		SysUseField, 
		UserUseField, 
		InputMsgField, 
		TalkMessField, 
		ClearScreenField 
	}nMouseWorkField;//變量,工作的區域 
 
	//鼠標功能設定說明: 鼠標狀態值能為下面介紹的幾種之一, 
	//    當用戶按下鼠標左鍵後,右鍵即沒反映,反之也一樣. 
	//    當處于拖動狀態時,只有松鍵才有作用 
	enum MouseState {//鼠標當前狀態 
		MouseNone, 
		LButtonDown, 
		RButtonDown, 
		LButtonDrag, 
		RButtonDrag 
	}nMouseState;   
 
	//屏幕第一滾動條區(上邊) 
	RECT rcFirstField; 
	//屏幕第二滾動條區(下邊) 
	RECT rcSecondField; 
	//功能區一(系統功能,武功、裝備等) 
	RECT rcSysUseField; 
	//功能區二(用戶功能,練功、拜師等) 
	RECT rcUserUseField;	 
	//命令輸入框區 
	RECT rcInputMsgField; 
	//對話信息區 
	RECT rcTalkMessField; 
	//3d信息區 
	RECT rc3DField; 
 
	BOOL bClearScreen;//清除窗口按鈕 
	BOOL bClearScrRed;//鼠標是否在上邊 
	RECT rcClearScreen; 
	RECT rcClearScreenDownSource; 
	RECT rcClearScreenOnSource; 
 
public://第一滾動條區數據//mFirstFD 
	struct FIRSTFIELD  
  { 
		BOOL bReDraw[2];			//是否要重畫 
		int nShowState;			//第一區顯示的狀態,(裝備?技能?頻道?玩家?) 
 
		RECT rcBars[8];			//各條信息條位置(最多8條信息) 
		RECT rcRectBarSour;		//線條框資源位置 
		CDragBar mDragBar;		//拖動條 
		FIRSTFIELD():mDragBar(8,189,189,202,363){};//初始化拖動條 
		void ResetCount(); 
	}mFirstFD; 
 
public://第二滾動條區數據//mSecondFD 
//second button 
#define SNB_WIDTH	58 
#define SNB_HEIGHT	21 
//emote type 
#define EMT_HAVE_TARGET 0x1 
#define EMT_HAVE_NONAME 0x2 
#define EMT_HAVE_SELF   0x4 
#define EMT_SHOW_CHINESE 1 
#define EMT_SHOW_ENGLISH 0 
//emote kind 
#define ETK_smile	1 
#define ETK_angry	2 
#define ETK_cry		3 
#define ETK_other	4 
	typedef struct tagEmote 
	{ 
		int nKind;//種類,如哭,笑... 
		CString szCEmote; 
		CString szEmote; 
		int nType;//有哪幾種用法 
		tagEmote() 
		{ 
			szCEmote = ""; 
			szEmote = ""; 
			nType = 0; 
		} 
	}TEmote;//一條emote的結構 
 
	struct SECONDFIELD  
  { 
		BOOL bReDraw[2];			//是否要重畫 
		int nEmoteCount;		//emote的個數 
		int nShowState;			//顯示的狀態,(英文,中文) 
		int nKindState;			//種類狀態,如哭笑 
		int nSelect;			//當前區域哪一條記錄是被選中的 
		CString szEmote;		//當前的一條emote及它的類型 
		int nType; 
 
		CString szEndEmote;		//最後一條emote的名字 
		RECT rcGreenUp;			//綠色按鈕資源位置 
		RECT rcGreenDown;		//綠色按鈕按下 
		CDragBar mDragBar;		//拖動條 
		SECONDFIELD():mDragBar(9,189,371,202,562){};//初始化拖動條 
	}mSecondFD; 
 
	CList listAllEmote; 
	CList listCurEmote; 
public://系統功能區數據//mSysFD 
	enum WHATSYSDOWN  
  { 
		BtnNone, 
    BtnCommunicate, 
		BtnAdventure, 
    BtnPractice, 
    BtnBasicSkill, 
    BtnOrganize, 
    BtnFamily, 
    BtnEmotion, 
		BtnOption, 
    BtnHintShow, 
    BtnHintHide 
	}; 
	struct SYSUSEFIELD  
  { 
		enum WHATSYSDOWN whatBtnDown;//按下了那一個按鈕 
     BOOL bHintNameReDraw[2]; 
    DWORD LastBtnMove; 
    DWORD LastBtnTick; 
    DWORD ThisBtnMove; 
    DWORD BtnMoveStatus; 
    RECT rcCommunicate; //頻道按鈕 
    RECT rcCommunicateDownSource; 
		RECT rcAdventure;   //冒險按鈕 
		RECT rcAdventureDownSource; 
    RECT rcPractice;    //武術按鈕 
    RECT rcPracticeDownSource; 
    RECT rcBasicSkill;  //道具按鈕 
    RECT rcBasicSkillDownSource; 
    RECT rcOrganize;    //組織按鈕 
    RECT rcOrganizeDownSource; 
    RECT rcFamily;      //門派按鈕 
    RECT rcFamilyDownSource; 
    RECT rcEmotion;     //表情按鈕 
    RECT rcEmotionDownSource; 
		RECT rcOption;      //系統按鈕 
		RECT rcOptionDownSource;//按下的圖象資源位置 
		RECT rcHintNameField;   //說明圖示原始 
		RECT rcHintNameSource;  //說明圖示圖示 
    RECT rcTemp; 
    RECT rcSource; 
    RECT rcBackup; 
	}mSysFD; 
/* 
	enum WHATSYSDOWN  
  { 
		BtnNone, 
		BtnAdventure, 
		BtnWugong, 
		BtnEquip, 
		BtnHappyface, 
		BtnAngryface, 
		BtnBuleface, 
		BtnOtherface, 
		BtnOption 
	}; 
	struct SYSUSEFIELD  
  { 
		enum WHATSYSDOWN whatBtnDown;//按下了那一個按鈕 
		RECT rcAdventure;//冒險按鈕 
		RECT rcAdventureDownSource;//按下的圖象資源位置 
		RECT rcWugong;//武功按鈕 
		RECT rcWugongDownSource; 
		RECT rcEquip;//裝備按鈕 
		RECT rcEquipDownSource; 
		RECT rcHappyface;//高興表情 
		RECT rcHappyfaceDownSource; 
		RECT rcAngryface;//憤怒表情 
		RECT rcAngryfaceDownSource; 
		RECT rcBuleface;//憂傷表情 
		RECT rcBulefaceDownSource; 
		RECT rcOthereface;//其他表情 
		RECT rcOtherefaceDownSource; 
		RECT rcOption;//系統按鈕 
		RECT rcOptionDownSource; 
	}mSysFD; 
*/ 
public://用戶功能區數據//mUserFD 
 
//User field Button Status 
#define UBS_communicate 0x100 //通訊指令 
#define UBS_adventure   0x200 //冒險指令 
#define UBS_practice    0x300 //武術指令 
#define UBS_basicskill  0x400 //道具指令 
#define UBS_organize    0x500 //組織指令 
#define UBS_family      0x600 //門派指令 
#define UBS_emotion     0x700 //表情指令 
#define UBS_system      0x800 //系統指令 
 
/* 
//User field Button Status 
#define UBS_brave   0x100 //冒險指令 
#define UBS_skill   0x200 //武功指令 
#define UBS_goods   0x300 //物品指令 
#define UBS_system  0x400 //系統指令 
*/ 
//按鈕狀態 
#define UB_mousenone	0 
#define UB_mouseon		1 
#define UB_mousedown	2 
 
//UB UserButton 
#define UB_none		-1		//沒有 
 
#define UB_joinchannel    (UBS_communicate|0)   //新聞頻道 
#define UB_channel        (UBS_communicate|1)   //查看頻道 
#define UB_talk           (UBS_communicate|2)   //頻道交談 
#define UB_shout          (UBS_communicate|3)   //直接大喊 
#define UB_tell           (UBS_communicate|4)   //傳送耳語 
#define UB_who_l          (UBS_communicate|5)   //線上名單 
#define UB_who            (UBS_communicate|6)   //頻道名單 
#define UB_leavechannel   (UBS_communicate|7)   //離開頻道 
 
#define UB_ask            (UBS_adventure|0)     //詢問NPC 
#define UB_look           (UBS_adventure|1)     //查看NPC 
#define UB_apprentice     (UBS_adventure|2)     //拜師 
#define UB_skill          (UBS_adventure|3)     //師父技能 
#define UB_drill          (UBS_adventure|4)     //切磋 
 
#define UB_fight          (UBS_practice|0)      //切磋 
#define UB_kill           (UBS_practice|1)      //死鬥 
#define UB_dazuo          (UBS_practice|2)      //打坐 
#define UB_tuna           (UBS_practice|3)      //吐納 
#define UB_yungong        (UBS_practice|4)      //運功 
#define UB_mapping        (UBS_practice|5)      //配置武功 
#define UB_escape         (UBS_practice|6)      //逃跑 
#define UB_restart        (UBS_practice|7)      //復活 
#define UB_suicide		  (UBS_practice|8)		//自殺    ANDY_NEW 2001.3.1	 
 
#define UB_use            (UBS_basicskill|0)    //使用 
#define UB_watch          (UBS_basicskill|1)    //查看 
#define UB_give           (UBS_basicskill|2)    //給與 
#define UB_get            (UBS_basicskill|3)    //拿取 
#define UB_drop           (UBS_basicskill|4)    //丟棄 
#define UB_arm            (UBS_basicskill|5)    //裝備 
#define UB_unarm          (UBS_basicskill|6)    //解除裝備 
#define UB_practice       (UBS_basicskill|7)    //練習 
 
#define UB_jointeam       (UBS_organize|0)      //組隊 
#define UB_leaveteam      (UBS_organize|1)      //離隊 
#define UB_who_t          (UBS_organize|2)      //隊伍名稱 
#define UB_format         (UBS_organize|3)      //組陣 
#define UB_unformat       (UBS_organize|4)      //中止組陣 
 
#define UB_assign         (UBS_family|0)        //任命 
#define UB_cancel         (UBS_family|1)        //解除任命 
#define UB_newleader      (UBS_family|2)        //掌門移交 
#define UB_newfamily      (UBS_family|3)        //創立門派 
#define UB_newnpc         (UBS_family|4)        //創造NPC 
#define UB_setskill       (UBS_family|5)        //設定武功 
 
#define UB_cheer          (UBS_emotion|0)       //喜 
#define UB_angry          (UBS_emotion|1)       //怒 
#define UB_sadness        (UBS_emotion|2)       //哀 
#define UB_happy          (UBS_emotion|3)       //樂 
/* 
#define UB_apprentice     (UBS_brave|0)         //拜師 
#define UB_skill          (UBS_brave|1)         //技能 
#define UB_shout          (UBS_brave|2)         //大喊 
#define UB_talk           (UBS_brave|3)         //說話 
#define UB_tell           (UBS_brave|4)         //告訴 
#define UB_ask            (UBS_brave|5)         //詢問 
#define UB_online         (UBS_brave|6)         //在線 
#define UB_channel        (UBS_brave|7)         //頻道 
 
#define UB_give           (UBS_goods|0)         //給與 
#define UB_get            (UBS_goods|1)         //拿取 
#define UB_union          (UBS_goods|2)         //組合 
#define UB_eat            (UBS_goods|3)         //吃 
#define UB_drink          (UBS_goods|4)         //喝 
 
#define UB_yungong        (UBS_skill|0)         //運功 
#define UB_dazuo          (UBS_skill|1)         //打坐 
#define UB_tuna           (UBS_skill|2)         //吐納 
#define UB_practice       (UBS_skill|3)         //練習 
#define UB_kill           (UBS_skill|4)         //攻擊 
#define UB_fangqi         (UBS_skill|5)         //放棄 
*/ 
#define UB_stop           (UBS_system|0)        //終止 
#define UB_music          (UBS_system|1)        //音樂 
#define UB_addlight       (UBS_system|2)        //增亮 
#define UB_sublight       (UBS_system|3)        //減暗 
#define UB_switchport     (UBS_system|4)        //音源設定 
#define UB_acceptfight    (UBS_system|5)        //接受切搓 
#define UB_rejectfight    (UBS_system|6)        //拒絕切搓 
 
#define UB_XSPACE	48      //按鈕間隔 
#define UB_HEIGHT	37		  //高度 
#define UB_COUNT	9       //一共有多少按鈕 
#define UB_XDRAG	3       //鼠標在水平方向移動多少算是拖動 
#define UB_DRAGBARLEN 770 //拖動條的長度 
#define UB_SPACELEN 455   //可存放空間長度 
 
	struct USERUSEFIELD  
  { 
		BOOL bReDraw[2];          //是否要重畫 
 
		int nWhatBtnDown;         //按下了那一個按鈕 
		int nStatus;              //這個按鈕現在的狀態 
 
		int nSysStatus;           //當前狀態 
		int nCount[UB_COUNT];     //個數 
		RECT rcOrgBtn[UB_COUNT];  //各個狀態原始位置 
 
		RECT rcBtns[UB_COUNT];    //按鈕們的位置 
	}mUserFD; 
 
public://3D信息區 
	BOOL bSelectOne;//選種某人 
	RECT rcSelectOnePos;//顯示選種的某人位置 
	char szSelectOneName[32]; 
	CString szSelectEName; 
 
	BOOL bFaceSomeOne[2];//是否面對某人 
	RECT rcFaceSomeOne;//顯示信息的位置 
	CString szFaceShowMsg;//顯示某人的見面語 
	CString szFaceSomeCName;//面對人物的名稱 
 
	RECT rcMapTitleInfo;//地圖的信息頭(地圖短信息) 
public://命令輸入框區 
	int nMouseDownPos;	//鼠標點在字串中的位置 
	BOOL bChangeInputMsg[2];//是否重新畫輸入條中的數據 
public://對話信息區 
	struct TALKMESSFIELD  
  { 
		BOOL bReDraw[2];			//是否要重畫 
		CDragBar mDragBar;		//拖動條 
		TALKMESSFIELD():mDragBar(9,780,419,793,562){};//初始化拖動條 
	}mTalkFD; 
public://玩家信息區 
	BOOL bDrawPlayInfo[2];//重新畫玩家數據 
	RECT rcNumberSource; 
	RECT rcPlayName; 
	RECT rcPlayNickName; 
	RECT rcPlaySex; 
	RECT rcPlayShen; 
 
	POINT posPlayAge; 
	POINT posPlayExp; 
	POINT posPlayGold; 
	POINT posPlaySeliver; 
	POINT posPlayCoin; 
	POINT posPlayStr; 
	POINT posPlayInt; 
	POINT posPlayCon; 
	POINT posPlayDex; 
	POINT posPlayQianNeng; 
	POINT posPlayShen; 
	POINT posPlayEffNeili; 
	POINT posPlayMaxNeili; 
	POINT posPlayAddNeili; 
	POINT posPlayEffJinli; 
	POINT posPlayMaxJinli; 
	POINT posPlayAddJinli; 
	POINT posPlayEffJingshen; 
	POINT posPlayMaxJingshen; 
	POINT posPlayEffQili; 
	POINT posPlayMaxQili; 
	POINT posPlayEffFood; 
	POINT posPlayMaxFood; 
	POINT posPlayEffDrink; 
	POINT posPlayMaxDrink; 
	POINT posPlayKillNpc; 
	POINT posPlayKillPlay; 
public://各種鼠標事件 
	void GameMainOnLButtonDown(POINT Pos); 
	void GameMainOnLButtonUp(POINT Pos); 
	void GameMainOnLButtonDblClk(POINT Pos); 
	void GameMainOnRButtonDown(POINT Pos); 
	void GameMainOnRButtonUp(POINT Pos); 
	void GameMainOnMouseMove(POINT Pos); 
	void SysUseLButtonDown(POINT Pos); 
	void SysUseLButtonUp(POINT Pos); 
	void SysUseMouseMove(POINT Pos); 
	void SysUseRButtonDown(POINT Pos); 
	void UserUseLButtonDown(POINT Pos); 
	void UserUseLButtonUp(POINT Pos); 
	void UserUseMouseMove(POINT Pos); 
	void UserUseRButtonDown(POINT Pos); 
	void FirstFieldLButtonDown(POINT Pos); 
	void FirstFieldLButtonUp(POINT Pos); 
	void SecondFieldLButtonDown(POINT Pos); 
	void SecondFieldLButtonUp(POINT Pos); 
	void InputMsgFieldLButtonDown(POINT Pos); 
	void UserFDDraw(); 
	void UserBtnMake(); 
	void UserBtnMake(int nStatus); 
	int  UserOnWhatBtn(POINT Pos); 
	void GetStateEmote(); 
	void GetStateEmote(int nState); 
	void ShowIconMenu(); 
 
public: 
	HRESULT Draw2DMainScreen(); 
	HRESULT DrawChangeMapScreen(); 
	HRESULT DisplaySelfMessage(int nScroll = 0); 
	HRESULT Display3DMessage(); 
	HRESULT Clear3DMessage(); 
 
	BOOL PrepareMainScreen(); 
	void PrepareNewMapInfo(); 
	void DrawMsgBar(LPRECT lpRect); 
	void DrawSecondField(); 
	void DrawPlayInfo(); 
	void DrawCursor(); 
	void DrawOneField(); 
	void FillANum(int n, int nMax, POINT *lpPoint, char Color); 
	void ShowQuickMsg(int nIndex); 
	void DoClickOneFieldFunction(int nIndex);//選種第一區鼠標有鍵盤按下的指令 
 
	CMainScreen(); 
	virtual ~CMainScreen(); 
}; 
 
#endif // !defined(AFX_MAINSCREEN_H__BEFA2100_5F8C_11D3_BA84_0000E8A021D8__INCLUDED_)