📄 msg.cpp
字号:
/***************************************************************************
* 消息机制的实现:
* 对于不同的操作分配不同的操作码值,用宏定义便于理解。
* 定义一个Msg结构用于记录消息的信息,如操作对象,操作类型、操作码及有关参数。
* 消息类中定义一个Msg结构的数组Message[6]实现一个循环消息队列,用于存放消息;
* 消息类中的公有函数GetMsg(Item *DItem,int Opera,int Agu1,int Agu2)和
* GetMsg(Msg TheMsg)运用函数重载实现存放消息到消息队列中的繁简操作。
***************************************************************************/
#define mEMPTYMSG 0 //空消息
#define mITEMREFRESH 1 //对象刷新消息码
#define mWINLOAD 2 //打开已有文件的消息码
#define mWINSAVE 3 //保存某文件的消息码
#define mWINSAVEAS 4 //另存为某文件的消息码
#define mKEY 5 //有键盘按键按下的消息码
#define mCURMOV 6
//#define mBACKSPACEPOSE 7
#define mEXIT 8 //退出运行程序的消息码
#define mWINNEW 9 //新建文件的消息码
#define mWINGETFOCUS 10 //获得焦点的消息码
#define mWINLOSFOCUS 11 //失去焦点的消息码
#define mWINCUT 12 //剪切的消息码
#define mWINCOPY 13 //复制的消息码
#define mWINPASTE 14 //粘贴的消息码
#define mWINSELALL 15 //全选的消息码
#define mWINBLOCKDEF 16 //块定义的消息码
#define mWINBLOCKDEL 17 //块删除的消息码
#define mWINSEARCHFOR 18 //查找字符串的消息码
#define mWINSEARCHNEXT 19 //查找下一个字符串的消息码
#define mWINCLOSE 20 //关闭窗口的消息码
#define mWINNEXT 21 //显示下一个窗口的消息码
#define mMOUSEMOVE 22 //鼠标移动的消息码
#define mMOUSECLICK 23 //鼠标按键弹起的消息码
#define mMOUSEBUTTONDOWN 24 //鼠标按键按下的消息码
#define mOTHERITEM 25 //其他对象消息码
class Item;
//消息结构的定义
typedef struct Msg
{
Item *DestItem;
//指针DestItem记录操作对象,
int iOpera,iAgu1,iAgu2;
//iOpera记录操作码,iAgu1,iAgu2记录相应操作所需参数
};
//定义消息队列类
class MsgClass
{
private:
int iHeadMsg,iTailMsg;
Msg Messages[6];
public:
MsgClass() {iHeadMsg=iTailMsg=0;};
void GetMsg(Item *DItem,int Opera,int Agu1,int Agu2);
void GetMsg(Msg TheMsg);
int DealMsg(Msg &TheMsg);
};
//定义存放消息到消息队列的函数
//将消息的操作对象和有关参数存放在消息队列中
void MsgClass::GetMsg(Item *DItem,int Opera=0,int Agu1=0,int Agu2=0)
{
//如果消息队列满,则将新消息丢弃
if(((iHeadMsg-iTailMsg)%6)==1) return;
Messages[iTailMsg].DestItem=DItem;
Messages[iTailMsg].iOpera=Opera;
Messages[iTailMsg].iAgu1=Agu1;
Messages[iTailMsg].iAgu2=Agu2;
iTailMsg++;iTailMsg%=6;
}
//将消息的信息整体存放在消息队列中
void MsgClass::GetMsg(Msg TheMsg)
{
if(((iHeadMsg-iTailMsg)%6)==1) return;
Messages[iTailMsg]=TheMsg;
iTailMsg++;iTailMsg%=6;
}
//定义从消息队列中取出消息的函数
int MsgClass::DealMsg(Msg &TheMsg)
{
//如果队列为空,则返回空消息
if (iHeadMsg==iTailMsg)
{
TheMsg.DestItem=NULL;TheMsg.iOpera=0;
return 0;
}
//将取出的消息赋给结构变量TheMsg
TheMsg=Messages[iHeadMsg];
iHeadMsg++;iHeadMsg%=6;
return 1;
}
//定义消息队列
MsgClass MsgBox;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -