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

📄 msg.cpp

📁 本软件是简单的文本编辑器
💻 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 + -