📄 cmessage.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 + -