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

📄 cmessage.h

📁 一个个人开发的rpg游戏<亚特兰蒂斯传奇>的源码
💻 H
字号:
//消息类
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//Created 2003/6/25 by kylinx
//第一次修正于2003/6/26 by Kylin
//修正内容:彻底改写消息队列。
//优化优先队列入队算法
#ifndef LOA_MESSAGE_H_
#define LOA_MESSAGE_H_
#include<windows.h>
#include"klds.h"
class CLog;

#define LOA_MAKE_POINT(x,y)		((((DWORD)(WORD)(x))<<16)|(WORD)(y))	//将2个整数转换为一个DWORD
#define LOA_GET_POINT_X(pt)		(((DWORD)(pt))>>16)						//得到DWORD的高位
#define LOA_GET_POINT_Y(pt)		((WORD)(pt))							//得到DWORD的低位
//-----------------------------------消息定义-----------------------------------------------
#define LOA_MSG_QUIT				0					//退出游戏的消息,参数CGame*cParam,int pParam1(exitcode);

#define LOA_MSG_SHOWMAGIC			100					//显示魔法的消息CGame*cParam,char*pParam(magicfile),DWORD pParam2(显示的位置);
#define LOA_MSG_PLAYMEDIA			101					//播放媒体的消息CGame*cParam,char*pParam(musicfile),BOOL pParam2(是否循环)
#define LOA_MSG_LOADSCRIPT			102					//读取脚本的消息
#define LOA_MSG_SET_ROLE_DIR		103					//设置角色方向的消息

#define LOA_MSG_SHOW_TALK_DOWN		1001
#define LOA_MSG_SHOW_TALK_UP		1002
#define LOA_MSG_SHOW_MESSAGE		1003
//------------------------------------------------------------------------------------------
#define LOA_MSG_NEW_CPARAM_P		0x00000f			//参数cParam分配了内存(point)
#define LOA_MSG_NEW_CPARAM_A		0x0000f0			//参数cParam分配了内存(array)
#define LOA_MSG_NEW_P1PARAM_P		0x000f00			//参数pParam1分配了内存(point)
#define LOA_MSG_NEW_P1PARAM_A		0x00f000			//参数pParam1分配了内存(array)
#define LOA_MSG_NEW_P2PARAM_P		0x0f0000			//参数pParam2分配了内存(point)
#define LOA_MSG_NEW_P2PARAM_A		0xf00000			//参数pParam2分配了内存(array)
struct STMessage
{
	int	ID;														//消息ID
	void*cParam;												//消息参数1,c暂时定为class
	void*pParam1;												//消息参数2,p暂时定为functionParam
	void*pParam2;												//消息参数3,
	DWORD dwNewFlag;											//参数中分配内存么?

	STMessage()
	{
		dwNewFlag=0;
	}
};
class CMessage
{
	CLog				*m_pLog;								//日志
	
	struct STMessageNode
	{
		STMessage msg;											//消息内容
		DWORD Priority;											//优先级
		STMessageNode*next;										//下一个

		STMessageNode(STMessage msg,DWORD Priority)
		{
			this->msg=msg;
			this->Priority=Priority;
			next=NULL;
		}
		STMessageNode()
		{
			next=NULL;
		}
	};
	DWORD				m_nMsgCount;							//当前队列中的消息个数
	STMessageNode		*m_pMsgHead;							//消息队列头部
	STMessageNode		*m_pMsgTail;							//消息队列尾部

	BOOL RunMessage(const STMessage& msg);						//执行一条消息,如果执行完成后
																//要求从队列中删除此消息,返回false
																//否则返回true	
public:
	CMessage();
	virtual ~CMessage();

	BOOL InitMessageQueue(CLog*pLog);							//初始化
	BOOL AddMessage(STMessage msg,DWORD Priority=0);			//添加一条消息
	BOOL PostPriortyMessage(const STMessage&msg);				//添加一条非常紧急的消息(最优先处理)
	BOOL GetHeadMessage(STMessage*pMsg);						//得到消息队列头部的消息
	
	DWORD GetMessageCount();									//得到消息个数
	void ClearAllMessage();										//清除所有消息

	BOOL ExecuteMessage();										//执行并清除消息队列的内容
};
#endif

⌨️ 快捷键说明

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